This repository has no description
1package rbac_test
2
3import (
4 "testing"
5
6 "github.com/bluesky-social/indigo/atproto/syntax"
7 _ "github.com/mattn/go-sqlite3"
8 "github.com/stretchr/testify/assert"
9 "tangled.org/core/rbac/v2"
10)
11
12func setup(t *testing.T) *rbac.Enforcer {
13 enforcer, err := rbac.NewEnforcer(":memory:")
14 assert.NoError(t, err)
15
16 return enforcer
17}
18
19func TestRepoOwnerPermissions(t *testing.T) {
20 var (
21 e = setup(t)
22 ok bool
23 err error
24 fooRepo = syntax.DID("did:example:coolrepo")
25 fooUser = syntax.DID("did:plc:foo")
26 )
27
28 assert.NoError(t, e.SetRepoOwner(fooUser, fooRepo))
29
30 ok, err = e.IsRepoOwner(fooUser, fooRepo)
31 assert.NoError(t, err)
32 assert.True(t, ok, "repo author should be repo owner")
33
34 ok, err = e.IsRepoCollaborator(fooUser, fooRepo)
35 assert.NoError(t, err)
36 assert.True(t, ok, "repo owner should inherit role role:collaborator")
37
38 ok, err = e.IsRepoSecretsAllowed(fooUser, fooRepo)
39 assert.NoError(t, err)
40 assert.True(t, ok, "repo owner should inherit collaborator permissions")
41}
42
43func TestRepoTeardown(t *testing.T) {
44 var (
45 e = setup(t)
46 ok bool
47 err error
48 fooRepo = syntax.DID("did:example:coolrepo")
49 fooUser = syntax.DID("did:example:foo")
50 barUser = syntax.DID("did:example:bar")
51 )
52
53 assert.NoError(t, e.SetRepoOwner(fooUser, fooRepo))
54 assert.NoError(t, e.AddRepoCollaborator(barUser, fooRepo))
55
56 ok, err = e.IsRepoOwner(fooUser, fooRepo)
57 assert.NoError(t, err)
58 assert.True(t, ok, "repo author should be repo owner")
59
60 ok, err = e.IsRepoOwner(barUser, fooRepo)
61 assert.NoError(t, err)
62 assert.False(t, ok, "repo collaborator should not be repo owner")
63
64 ok, err = e.IsRepoCollaborator(barUser, fooRepo)
65 assert.NoError(t, err)
66 assert.True(t, ok, "repo collaborator should be repo collaborator")
67
68 assert.NoError(t, e.DeleteRepo(fooRepo))
69
70 ok, err = e.IsRepoOwner(barUser, fooRepo)
71 assert.NoError(t, err)
72 assert.False(t, ok, "repo owner permission should be deleted after repo deletion")
73
74 ok, err = e.IsRepoCollaborator(barUser, fooRepo)
75 assert.NoError(t, err)
76 assert.False(t, ok, "repo collaborator permission should be deleted after repo deletion")
77}
78
79func TestRepoCollaboratorPermissions(t *testing.T) {
80 var (
81 e = setup(t)
82 ok bool
83 err error
84 fooRepo = syntax.DID("did:example:coolrepo")
85 fooUser = syntax.DID("did:plc:foo")
86 barUser = syntax.DID("did:plc:bar")
87 )
88
89 assert.NoError(t, e.SetRepoOwner(fooUser, fooRepo))
90 assert.NoError(t, e.AddRepoCollaborator(barUser, fooRepo))
91
92 ok, err = e.IsRepoCollaborator(barUser, fooRepo)
93 assert.NoError(t, err)
94 assert.True(t, ok, "should set repo collaborator")
95
96 ok, err = e.IsRepoSecretsAllowed(barUser, fooRepo)
97 assert.NoError(t, err)
98 assert.True(t, ok, "repo collaborator should be able to edit repo settings")
99}
100
101func TestGetByRole(t *testing.T) {
102 var (
103 e = setup(t)
104 err error
105 fooRepo = syntax.DID("did:example:coolrepo")
106 owner = syntax.DID("did:plc:foo")
107 collaborator1 = syntax.DID("did:plc:bar")
108 collaborator2 = syntax.DID("did:plc:baz")
109 )
110
111 assert.NoError(t, e.SetRepoOwner(owner, fooRepo))
112 assert.NoError(t, e.AddRepoCollaborator(collaborator1, fooRepo))
113 assert.NoError(t, e.AddRepoCollaborator(collaborator2, fooRepo))
114
115 collaborators, err := e.GetRepoCollaborators(fooRepo)
116 assert.NoError(t, err)
117 assert.ElementsMatch(t, []syntax.DID{
118 owner,
119 collaborator1,
120 collaborator2,
121 }, collaborators)
122}