Skip to content

Commit 0af6542

Browse files
GiteaBotearl-warrenGustedGustedsilverwind
authored
Add unit test for repository collaboration (go-gitea#25640) (go-gitea#25658)
Backport go-gitea#25640 by @earl-warren - Add a few extra test cases and test functions for the collaboration model to get everything covered by tests (except for error handling, as we cannot suddenly mock errors from the database). ``` -> % go tool cover -func=coverage.out | grep "code.gitea.io/gitea/models/repo/collaboration.go" ``` Before: ``` code.gitea.io/gitea/models/repo/collaboration.go:28: init 100.0% code.gitea.io/gitea/models/repo/collaboration.go:39: GetCollaborators 61.5% code.gitea.io/gitea/models/repo/collaboration.go:65: CountCollaborators 0.0% code.gitea.io/gitea/models/repo/collaboration.go:70: GetCollaboration 0.0% code.gitea.io/gitea/models/repo/collaboration.go:83: IsCollaborator 100.0% code.gitea.io/gitea/models/repo/collaboration.go:87: getCollaborations 42.9% code.gitea.io/gitea/models/repo/collaboration.go:102: ChangeCollaborationAccessMode 77.8% code.gitea.io/gitea/models/repo/collaboration.go:141: IsOwnerMemberCollaborator 0.0% ``` After: ``` code.gitea.io/gitea/models/repo/collaboration.go:28: init 100.0% code.gitea.io/gitea/models/repo/collaboration.go:39: GetCollaborators 61.5% code.gitea.io/gitea/models/repo/collaboration.go:65: CountCollaborators 100.0% code.gitea.io/gitea/models/repo/collaboration.go:70: GetCollaboration 100.0% code.gitea.io/gitea/models/repo/collaboration.go:83: IsCollaborator 100.0% code.gitea.io/gitea/models/repo/collaboration.go:87: getCollaborations 100.0% code.gitea.io/gitea/models/repo/collaboration.go:102: ChangeCollaborationAccessMode 83.3% code.gitea.io/gitea/models/repo/collaboration.go:141: IsOwnerMemberCollaborator 87.5% ``` Co-authored-by: Gusted <[email protected]> Reviewed-on: https://codeberg.org/forgejo/forgejo/pulls/825 Co-authored-by: Earl Warren <[email protected]> Co-authored-by: Gusted <[email protected]> Co-authored-by: Gusted <[email protected]> Co-authored-by: silverwind <[email protected]>
1 parent 69bdcf4 commit 0af6542

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed

models/repo/collaboration_test.go

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,19 @@ func TestRepository_GetCollaborators(t *testing.T) {
3333
test(2)
3434
test(3)
3535
test(4)
36+
37+
// Test db.ListOptions
38+
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 22})
39+
40+
collaborators1, err := repo_model.GetCollaborators(db.DefaultContext, repo.ID, db.ListOptions{PageSize: 1, Page: 1})
41+
assert.NoError(t, err)
42+
assert.Len(t, collaborators1, 1)
43+
44+
collaborators2, err := repo_model.GetCollaborators(db.DefaultContext, repo.ID, db.ListOptions{PageSize: 1, Page: 2})
45+
assert.NoError(t, err)
46+
assert.Len(t, collaborators2, 1)
47+
48+
assert.NotEqualValues(t, collaborators1[0].ID, collaborators2[0].ID)
3649
}
3750

3851
func TestRepository_IsCollaborator(t *testing.T) {
@@ -66,5 +79,80 @@ func TestRepository_ChangeCollaborationAccessMode(t *testing.T) {
6679

6780
assert.NoError(t, repo_model.ChangeCollaborationAccessMode(db.DefaultContext, repo, unittest.NonexistentID, perm.AccessModeAdmin))
6881

82+
// Disvard invalid input.
83+
assert.NoError(t, repo_model.ChangeCollaborationAccessMode(db.DefaultContext, repo, 4, perm.AccessMode(unittest.NonexistentID)))
84+
6985
unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: repo.ID})
7086
}
87+
88+
func TestRepository_CountCollaborators(t *testing.T) {
89+
assert.NoError(t, unittest.PrepareTestDatabase())
90+
91+
repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 4})
92+
count, err := repo_model.CountCollaborators(repo1.ID)
93+
assert.NoError(t, err)
94+
assert.EqualValues(t, 2, count)
95+
96+
repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 22})
97+
count, err = repo_model.CountCollaborators(repo2.ID)
98+
assert.NoError(t, err)
99+
assert.EqualValues(t, 2, count)
100+
101+
// Non-existent repository.
102+
count, err = repo_model.CountCollaborators(unittest.NonexistentID)
103+
assert.NoError(t, err)
104+
assert.EqualValues(t, 0, count)
105+
}
106+
107+
func TestRepository_IsOwnerMemberCollaborator(t *testing.T) {
108+
assert.NoError(t, unittest.PrepareTestDatabase())
109+
110+
repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3})
111+
112+
// Organisation owner.
113+
actual, err := repo_model.IsOwnerMemberCollaborator(repo1, 2)
114+
assert.NoError(t, err)
115+
assert.True(t, actual)
116+
117+
// Team member.
118+
actual, err = repo_model.IsOwnerMemberCollaborator(repo1, 4)
119+
assert.NoError(t, err)
120+
assert.True(t, actual)
121+
122+
// Normal user.
123+
actual, err = repo_model.IsOwnerMemberCollaborator(repo1, 1)
124+
assert.NoError(t, err)
125+
assert.False(t, actual)
126+
127+
repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 4})
128+
129+
// Collaborator.
130+
actual, err = repo_model.IsOwnerMemberCollaborator(repo2, 4)
131+
assert.NoError(t, err)
132+
assert.True(t, actual)
133+
134+
repo3 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 15})
135+
136+
// Repository owner.
137+
actual, err = repo_model.IsOwnerMemberCollaborator(repo3, 2)
138+
assert.NoError(t, err)
139+
assert.True(t, actual)
140+
}
141+
142+
func TestRepo_GetCollaboration(t *testing.T) {
143+
assert.NoError(t, unittest.PrepareTestDatabase())
144+
145+
repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 4})
146+
147+
// Existing collaboration.
148+
collab, err := repo_model.GetCollaboration(db.DefaultContext, repo.ID, 4)
149+
assert.NoError(t, err)
150+
assert.NotNil(t, collab)
151+
assert.EqualValues(t, 4, collab.UserID)
152+
assert.EqualValues(t, 4, collab.RepoID)
153+
154+
// Non-existing collaboration.
155+
collab, err = repo_model.GetCollaboration(db.DefaultContext, repo.ID, 1)
156+
assert.NoError(t, err)
157+
assert.Nil(t, collab)
158+
}

0 commit comments

Comments
 (0)