aboutsummaryrefslogtreecommitdiff
path: root/internal/db/repos_test.go
diff options
context:
space:
mode:
authorJoe Chen <jc@unknwon.io>2023-02-05 16:28:47 +0800
committerGitHub <noreply@github.com>2023-02-05 16:28:47 +0800
commit7ff09cf35916cad50495c26a47f4c0d05487e24e (patch)
treedc4516234c3a8e72051e2ab1674adb7e7c32c3cc /internal/db/repos_test.go
parent3c43b9b21c74faf60d62b2cbf2ee89e9ada37f0c (diff)
refactor(db): migrate methods off `user.go` (#7336)
Diffstat (limited to 'internal/db/repos_test.go')
-rw-r--r--internal/db/repos_test.go62
1 files changed, 61 insertions, 1 deletions
diff --git a/internal/db/repos_test.go b/internal/db/repos_test.go
index 3c01105d..09289729 100644
--- a/internal/db/repos_test.go
+++ b/internal/db/repos_test.go
@@ -85,7 +85,7 @@ func TestRepos(t *testing.T) {
}
t.Parallel()
- tables := []any{new(Repository)}
+ tables := []any{new(Repository), new(Access)}
db := &repos{
DB: dbtest.NewDB(t, "repos", tables...),
}
@@ -95,6 +95,8 @@ func TestRepos(t *testing.T) {
test func(t *testing.T, db *repos)
}{
{"Create", reposCreate},
+ {"GetByCollaboratorID", reposGetByCollaboratorID},
+ {"GetByCollaboratorIDWithAccessMode", reposGetByCollaboratorIDWithAccessMode},
{"GetByName", reposGetByName},
{"Touch", reposTouch},
} {
@@ -154,6 +156,64 @@ func reposCreate(t *testing.T, db *repos) {
assert.Equal(t, db.NowFunc().Format(time.RFC3339), repo.Created.UTC().Format(time.RFC3339))
}
+func reposGetByCollaboratorID(t *testing.T, db *repos) {
+ ctx := context.Background()
+
+ repo1, err := db.Create(ctx, 1, CreateRepoOptions{Name: "repo1"})
+ require.NoError(t, err)
+ repo2, err := db.Create(ctx, 2, CreateRepoOptions{Name: "repo2"})
+ require.NoError(t, err)
+
+ permsStore := NewPermsStore(db.DB)
+ err = permsStore.SetRepoPerms(ctx, repo1.ID, map[int64]AccessMode{3: AccessModeRead})
+ require.NoError(t, err)
+ err = permsStore.SetRepoPerms(ctx, repo2.ID, map[int64]AccessMode{4: AccessModeAdmin})
+ require.NoError(t, err)
+
+ t.Run("user 3 is a collaborator of repo1", func(t *testing.T) {
+ got, err := db.GetByCollaboratorID(ctx, 3, 10, "")
+ require.NoError(t, err)
+ require.Len(t, got, 1)
+ assert.Equal(t, repo1.ID, got[0].ID)
+ })
+
+ t.Run("do not return directly owned repository", func(t *testing.T) {
+ got, err := db.GetByCollaboratorID(ctx, 1, 10, "")
+ require.NoError(t, err)
+ require.Len(t, got, 0)
+ })
+}
+
+func reposGetByCollaboratorIDWithAccessMode(t *testing.T, db *repos) {
+ ctx := context.Background()
+
+ repo1, err := db.Create(ctx, 1, CreateRepoOptions{Name: "repo1"})
+ require.NoError(t, err)
+ repo2, err := db.Create(ctx, 2, CreateRepoOptions{Name: "repo2"})
+ require.NoError(t, err)
+ repo3, err := db.Create(ctx, 2, CreateRepoOptions{Name: "repo3"})
+ require.NoError(t, err)
+
+ permsStore := NewPermsStore(db.DB)
+ err = permsStore.SetRepoPerms(ctx, repo1.ID, map[int64]AccessMode{3: AccessModeRead})
+ require.NoError(t, err)
+ err = permsStore.SetRepoPerms(ctx, repo2.ID, map[int64]AccessMode{3: AccessModeAdmin, 4: AccessModeWrite})
+ require.NoError(t, err)
+ err = permsStore.SetRepoPerms(ctx, repo3.ID, map[int64]AccessMode{4: AccessModeWrite})
+ require.NoError(t, err)
+
+ got, err := db.GetByCollaboratorIDWithAccessMode(ctx, 3)
+ require.NoError(t, err)
+ require.Len(t, got, 2)
+
+ accessModes := make(map[int64]AccessMode)
+ for repo, mode := range got {
+ accessModes[repo.ID] = mode
+ }
+ assert.Equal(t, AccessModeRead, accessModes[repo1.ID])
+ assert.Equal(t, AccessModeAdmin, accessModes[repo2.ID])
+}
+
func reposGetByName(t *testing.T, db *repos) {
ctx := context.Background()