permissions_test.go

 1package abac
 2
 3import (
 4	"testing"
 5
 6	"github.com/stretchr/testify/assert"
 7)
 8
 9func p(p ...Permission) []Permission {
10	return p
11}
12
13func TestAdd(t *testing.T) {
14	tt := []struct {
15		name   string
16		set    Permission
17		can    []Permission
18		cannot []Permission
19	}{
20		{"private", Private, nil, p(Read, Write, Delete, Admin)},
21		{"read", Read, p(Read), p(Write, Delete, Admin)},
22		{"write", Write, p(Read, Write), p(Delete, Admin)},
23		{"delete", Delete, p(Read, Write, Delete), nil},
24		{"admin", Admin, p(Read, Write, Delete, Admin), nil},
25		{"R&W", Read | Write, p(Read, Write), p(Delete, Admin)},
26		{"R&A", Read | Admin, p(Read, Write, Delete, Admin), nil},
27		{"Ban", Ban, nil, p(Read, Write, Delete, Admin)},
28		{"God", God, p(Read, Write, Delete, Admin, God, Ban), nil},
29	}
30
31	for _, tc := range tt {
32		t.Run(tc.name, func(t *testing.T) {
33			a := Add(None, tc.set)
34			for _, p := range tc.can {
35				assert.True(t, Has(a, p))
36			}
37			for _, p := range tc.cannot {
38				assert.False(t, Has(a, p))
39			}
40		})
41	}
42}
43
44func TestRemove(t *testing.T) {
45	tt := []struct {
46		name   string
47		set    Permission
48		remove Permission
49		can    []Permission
50		cannot []Permission
51	}{
52		{"read/read", Read, Read, nil, p(Read, Write, Delete, Admin)},
53		{"write/read", Write, Read, nil, p(Read, Write, Delete, Admin)},
54		{"write/write", Write, Write, p(Read), p(Write, Delete, Admin)},
55		{"admin/write", Admin, Write, p(Read), p(Write, Delete, Admin)},
56		{"read/admin", Read, Admin, p(Read), p(Write, Delete, Admin)},
57		{"write/admin", Write, Admin, p(Read, Write), p(Delete, Admin)},
58		{"private/write", Private, Write, nil, p(Read, Write, Delete, Admin)},
59	}
60
61	for _, tc := range tt {
62		t.Run(tc.name, func(t *testing.T) {
63			a := Add(None, tc.set)
64			a = Remove(a, tc.remove)
65			for _, p := range tc.can {
66				assert.True(t, Has(a, p))
67			}
68			for _, p := range tc.cannot {
69				assert.False(t, Has(a, p))
70			}
71		})
72	}
73}