diff options
Diffstat (limited to 'internal/db/perms_test.go')
-rw-r--r-- | internal/db/perms_test.go | 266 |
1 files changed, 136 insertions, 130 deletions
diff --git a/internal/db/perms_test.go b/internal/db/perms_test.go index 9b821e6b..d7ddb6d5 100644 --- a/internal/db/perms_test.go +++ b/internal/db/perms_test.go @@ -5,12 +5,14 @@ package db import ( + "context" "testing" "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" ) -func Test_perms(t *testing.T) { +func TestPerms(t *testing.T) { if testing.Short() { t.Skip() } @@ -26,16 +28,14 @@ func Test_perms(t *testing.T) { name string test func(*testing.T, *perms) }{ - {"AccessMode", test_perms_AccessMode}, - {"Authorize", test_perms_Authorize}, - {"SetRepoPerms", test_perms_SetRepoPerms}, + {"AccessMode", permsAccessMode}, + {"Authorize", permsAuthorize}, + {"SetRepoPerms", permsSetRepoPerms}, } { t.Run(tc.name, func(t *testing.T) { t.Cleanup(func() { err := clearTables(t, db.DB, tables...) - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) }) tc.test(t, db) }) @@ -45,21 +45,23 @@ func Test_perms(t *testing.T) { } } -func test_perms_AccessMode(t *testing.T, db *perms) { +func permsAccessMode(t *testing.T, db *perms) { + ctx := context.Background() + // Set up permissions - err := db.SetRepoPerms(1, map[int64]AccessMode{ - 2: AccessModeWrite, - 3: AccessModeAdmin, - }) - if err != nil { - t.Fatal(err) - } - err = db.SetRepoPerms(2, map[int64]AccessMode{ - 1: AccessModeRead, - }) - if err != nil { - t.Fatal(err) - } + err := db.SetRepoPerms(ctx, 1, + map[int64]AccessMode{ + 2: AccessModeWrite, + 3: AccessModeAdmin, + }, + ) + require.NoError(t, err) + err = db.SetRepoPerms(ctx, 2, + map[int64]AccessMode{ + 1: AccessModeRead, + }, + ) + require.NoError(t, err) publicRepoID := int64(1) publicRepoOpts := AccessModeOptions{ @@ -73,99 +75,101 @@ func test_perms_AccessMode(t *testing.T, db *perms) { } tests := []struct { - name string - userID int64 - repoID int64 - opts AccessModeOptions - expAccessMode AccessMode + name string + userID int64 + repoID int64 + opts AccessModeOptions + wantAccessMode AccessMode }{ { - name: "nil repository", - expAccessMode: AccessModeNone, + name: "nil repository", + wantAccessMode: AccessModeNone, }, { - name: "anonymous user has read access to public repository", - repoID: publicRepoID, - opts: publicRepoOpts, - expAccessMode: AccessModeRead, + name: "anonymous user has read access to public repository", + repoID: publicRepoID, + opts: publicRepoOpts, + wantAccessMode: AccessModeRead, }, { - name: "anonymous user has no access to private repository", - repoID: privateRepoID, - opts: privateRepoOpts, - expAccessMode: AccessModeNone, + name: "anonymous user has no access to private repository", + repoID: privateRepoID, + opts: privateRepoOpts, + wantAccessMode: AccessModeNone, }, { - name: "user is the owner", - userID: 98, - repoID: publicRepoID, - opts: publicRepoOpts, - expAccessMode: AccessModeOwner, + name: "user is the owner", + userID: 98, + repoID: publicRepoID, + opts: publicRepoOpts, + wantAccessMode: AccessModeOwner, }, { - name: "user 1 has read access to public repo", - userID: 1, - repoID: publicRepoID, - opts: publicRepoOpts, - expAccessMode: AccessModeRead, + name: "user 1 has read access to public repo", + userID: 1, + repoID: publicRepoID, + opts: publicRepoOpts, + wantAccessMode: AccessModeRead, }, { - name: "user 2 has write access to public repo", - userID: 2, - repoID: publicRepoID, - opts: publicRepoOpts, - expAccessMode: AccessModeWrite, + name: "user 2 has write access to public repo", + userID: 2, + repoID: publicRepoID, + opts: publicRepoOpts, + wantAccessMode: AccessModeWrite, }, { - name: "user 3 has admin access to public repo", - userID: 3, - repoID: publicRepoID, - opts: publicRepoOpts, - expAccessMode: AccessModeAdmin, + name: "user 3 has admin access to public repo", + userID: 3, + repoID: publicRepoID, + opts: publicRepoOpts, + wantAccessMode: AccessModeAdmin, }, { - name: "user 1 has read access to private repo", - userID: 1, - repoID: privateRepoID, - opts: privateRepoOpts, - expAccessMode: AccessModeRead, + name: "user 1 has read access to private repo", + userID: 1, + repoID: privateRepoID, + opts: privateRepoOpts, + wantAccessMode: AccessModeRead, }, { - name: "user 2 has no access to private repo", - userID: 2, - repoID: privateRepoID, - opts: privateRepoOpts, - expAccessMode: AccessModeNone, + name: "user 2 has no access to private repo", + userID: 2, + repoID: privateRepoID, + opts: privateRepoOpts, + wantAccessMode: AccessModeNone, }, { - name: "user 3 has no access to private repo", - userID: 3, - repoID: privateRepoID, - opts: privateRepoOpts, - expAccessMode: AccessModeNone, + name: "user 3 has no access to private repo", + userID: 3, + repoID: privateRepoID, + opts: privateRepoOpts, + wantAccessMode: AccessModeNone, }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - mode := db.AccessMode(test.userID, test.repoID, test.opts) - assert.Equal(t, test.expAccessMode, mode) + mode := db.AccessMode(ctx, test.userID, test.repoID, test.opts) + assert.Equal(t, test.wantAccessMode, mode) }) } } -func test_perms_Authorize(t *testing.T, db *perms) { +func permsAuthorize(t *testing.T, db *perms) { + ctx := context.Background() + // Set up permissions - err := db.SetRepoPerms(1, map[int64]AccessMode{ - 1: AccessModeRead, - 2: AccessModeWrite, - 3: AccessModeAdmin, - }) - if err != nil { - t.Fatal(err) - } + err := db.SetRepoPerms(ctx, 1, + map[int64]AccessMode{ + 1: AccessModeRead, + 2: AccessModeWrite, + 3: AccessModeAdmin, + }, + ) + require.NoError(t, err) repo := &Repository{ ID: 1, @@ -173,74 +177,78 @@ func test_perms_Authorize(t *testing.T, db *perms) { } tests := []struct { - name string - userID int64 - desired AccessMode - expAuthorized bool + name string + userID int64 + desired AccessMode + wantAuthorized bool }{ { - name: "user 1 has read and wants read", - userID: 1, - desired: AccessModeRead, - expAuthorized: true, + name: "user 1 has read and wants read", + userID: 1, + desired: AccessModeRead, + wantAuthorized: true, }, { - name: "user 1 has read and wants write", - userID: 1, - desired: AccessModeWrite, - expAuthorized: false, + name: "user 1 has read and wants write", + userID: 1, + desired: AccessModeWrite, + wantAuthorized: false, }, { - name: "user 2 has write and wants read", - userID: 2, - desired: AccessModeRead, - expAuthorized: true, + name: "user 2 has write and wants read", + userID: 2, + desired: AccessModeRead, + wantAuthorized: true, }, { - name: "user 2 has write and wants write", - userID: 2, - desired: AccessModeWrite, - expAuthorized: true, + name: "user 2 has write and wants write", + userID: 2, + desired: AccessModeWrite, + wantAuthorized: true, }, { - name: "user 2 has write and wants admin", - userID: 2, - desired: AccessModeAdmin, - expAuthorized: false, + name: "user 2 has write and wants admin", + userID: 2, + desired: AccessModeAdmin, + wantAuthorized: false, }, { - name: "user 3 has admin and wants read", - userID: 3, - desired: AccessModeRead, - expAuthorized: true, + name: "user 3 has admin and wants read", + userID: 3, + desired: AccessModeRead, + wantAuthorized: true, }, { - name: "user 3 has admin and wants write", - userID: 3, - desired: AccessModeWrite, - expAuthorized: true, + name: "user 3 has admin and wants write", + userID: 3, + desired: AccessModeWrite, + wantAuthorized: true, }, { - name: "user 3 has admin and wants admin", - userID: 3, - desired: AccessModeAdmin, - expAuthorized: true, + name: "user 3 has admin and wants admin", + userID: 3, + desired: AccessModeAdmin, + wantAuthorized: true, }, } for _, test := range tests { t.Run(test.name, func(t *testing.T) { - authorized := db.Authorize(test.userID, repo.ID, test.desired, AccessModeOptions{ - OwnerID: repo.OwnerID, - Private: repo.IsPrivate, - }) - assert.Equal(t, test.expAuthorized, authorized) + authorized := db.Authorize(ctx, test.userID, repo.ID, test.desired, + AccessModeOptions{ + OwnerID: repo.OwnerID, + Private: repo.IsPrivate, + }, + ) + assert.Equal(t, test.wantAuthorized, authorized) }) } } -func test_perms_SetRepoPerms(t *testing.T, db *perms) { +func permsSetRepoPerms(t *testing.T, db *perms) { + ctx := context.Background() + for _, update := range []struct { repoID int64 accessMap map[int64]AccessMode @@ -279,7 +287,7 @@ func test_perms_SetRepoPerms(t *testing.T, db *perms) { }, }, } { - err := db.SetRepoPerms(update.repoID, update.accessMap) + err := db.SetRepoPerms(ctx, update.repoID, update.accessMap) if err != nil { t.Fatal(err) } @@ -287,21 +295,19 @@ func test_perms_SetRepoPerms(t *testing.T, db *perms) { var accesses []*Access err := db.Order("user_id, repo_id").Find(&accesses).Error - if err != nil { - t.Fatal(err) - } + require.NoError(t, err) // Ignore ID fields for _, a := range accesses { a.ID = 0 } - expAccesses := []*Access{ + wantAccesses := []*Access{ {UserID: 1, RepoID: 2, Mode: AccessModeWrite}, {UserID: 2, RepoID: 1, Mode: AccessModeWrite}, {UserID: 2, RepoID: 2, Mode: AccessModeRead}, {UserID: 3, RepoID: 1, Mode: AccessModeAdmin}, {UserID: 5, RepoID: 2, Mode: AccessModeWrite}, } - assert.Equal(t, expAccesses, accesses) + assert.Equal(t, wantAccesses, accesses) } |