aboutsummaryrefslogtreecommitdiff
path: root/internal/db/perms_test.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/db/perms_test.go')
-rw-r--r--internal/db/perms_test.go266
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)
}