This repository has no description
0

Configure Feed

Select the types of activity you want to include in your feed.

core / rbac / v2 / rbac_test.go
3.4 kB 122 lines
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}