Files
core/iam/access/adapter_test.go
2023-05-25 16:16:29 +02:00

94 lines
2.1 KiB
Go

package access
import (
"encoding/json"
"testing"
"github.com/datarhei/core/v16/io/fs"
"github.com/stretchr/testify/require"
)
func TestAddPolicy(t *testing.T) {
memfs, err := fs.NewMemFilesystem(fs.MemConfig{})
require.NoError(t, err)
ai, err := NewJSONAdapter(memfs, "/policy.json", nil)
require.NoError(t, err)
a, ok := ai.(*adapter)
require.True(t, ok)
err = a.AddPolicy("p", "p", []string{"foobar", "group", "resource", "action"})
require.NoError(t, err)
require.Equal(t, 1, len(a.domains))
data, err := memfs.ReadFile("/policy.json")
require.NoError(t, err)
g := []Domain{}
err = json.Unmarshal(data, &g)
require.NoError(t, err)
require.Equal(t, "group", g[0].Name)
require.Equal(t, 1, len(g[0].Policies))
require.Equal(t, DomainPolicy{
Username: "foobar",
Role: Role{
Resource: "resource",
Actions: "action",
},
}, g[0].Policies[0])
}
func TestFormatActions(t *testing.T) {
data := [][]string{
{"a|b|c", "a|b|c"},
{"b|c|a", "a|b|c"},
}
for _, d := range data {
require.Equal(t, d[1], formatActions(d[0]), d[0])
}
}
func TestRemovePolicy(t *testing.T) {
memfs, err := fs.NewMemFilesystem(fs.MemConfig{})
require.NoError(t, err)
ai, err := NewJSONAdapter(memfs, "/policy.json", nil)
require.NoError(t, err)
a, ok := ai.(*adapter)
require.True(t, ok)
err = a.AddPolicies("p", "p", [][]string{
{"foobar1", "group", "resource1", "action1"},
{"foobar2", "group", "resource2", "action2"},
})
require.NoError(t, err)
require.Equal(t, 1, len(a.domains))
require.Equal(t, 2, len(a.domains[0].Policies))
err = a.RemovePolicy("p", "p", []string{"foobar1", "group", "resource1", "action1"})
require.NoError(t, err)
require.Equal(t, 1, len(a.domains))
require.Equal(t, 1, len(a.domains[0].Policies))
err = a.RemovePolicy("p", "p", []string{"foobar2", "group", "resource2", "action2"})
require.NoError(t, err)
require.Equal(t, 0, len(a.domains))
data, err := memfs.ReadFile("/policy.json")
require.NoError(t, err)
g := []Domain{}
err = json.Unmarshal(data, &g)
require.NoError(t, err)
require.Equal(t, 0, len(g))
}