code.gitea.io/gitea@v1.22.3/models/repo/collaboration_test.go (about) 1 // Copyright 2022 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package repo_test 5 6 import ( 7 "testing" 8 9 "code.gitea.io/gitea/models/db" 10 "code.gitea.io/gitea/models/perm" 11 access_model "code.gitea.io/gitea/models/perm/access" 12 repo_model "code.gitea.io/gitea/models/repo" 13 "code.gitea.io/gitea/models/unittest" 14 15 "github.com/stretchr/testify/assert" 16 ) 17 18 func TestRepository_GetCollaborators(t *testing.T) { 19 assert.NoError(t, unittest.PrepareTestDatabase()) 20 test := func(repoID int64) { 21 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: repoID}) 22 collaborators, _, err := repo_model.GetCollaborators(db.DefaultContext, &repo_model.FindCollaborationOptions{RepoID: repo.ID}) 23 assert.NoError(t, err) 24 expectedLen, err := db.GetEngine(db.DefaultContext).Count(&repo_model.Collaboration{RepoID: repoID}) 25 assert.NoError(t, err) 26 assert.Len(t, collaborators, int(expectedLen)) 27 for _, collaborator := range collaborators { 28 assert.EqualValues(t, collaborator.User.ID, collaborator.Collaboration.UserID) 29 assert.EqualValues(t, repoID, collaborator.Collaboration.RepoID) 30 } 31 } 32 test(1) 33 test(2) 34 test(3) 35 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_model.FindCollaborationOptions{ 41 ListOptions: db.ListOptions{PageSize: 1, Page: 1}, 42 RepoID: repo.ID, 43 }) 44 assert.NoError(t, err) 45 assert.Len(t, collaborators1, 1) 46 47 collaborators2, _, err := repo_model.GetCollaborators(db.DefaultContext, &repo_model.FindCollaborationOptions{ 48 ListOptions: db.ListOptions{PageSize: 1, Page: 2}, 49 RepoID: repo.ID, 50 }) 51 assert.NoError(t, err) 52 assert.Len(t, collaborators2, 1) 53 54 assert.NotEqualValues(t, collaborators1[0].ID, collaborators2[0].ID) 55 } 56 57 func TestRepository_IsCollaborator(t *testing.T) { 58 assert.NoError(t, unittest.PrepareTestDatabase()) 59 60 test := func(repoID, userID int64, expected bool) { 61 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: repoID}) 62 actual, err := repo_model.IsCollaborator(db.DefaultContext, repo.ID, userID) 63 assert.NoError(t, err) 64 assert.Equal(t, expected, actual) 65 } 66 test(3, 2, true) 67 test(3, unittest.NonexistentID, false) 68 test(4, 2, false) 69 test(4, 4, true) 70 } 71 72 func TestRepository_ChangeCollaborationAccessMode(t *testing.T) { 73 assert.NoError(t, unittest.PrepareTestDatabase()) 74 75 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 4}) 76 assert.NoError(t, repo_model.ChangeCollaborationAccessMode(db.DefaultContext, repo, 4, perm.AccessModeAdmin)) 77 78 collaboration := unittest.AssertExistsAndLoadBean(t, &repo_model.Collaboration{RepoID: repo.ID, UserID: 4}) 79 assert.EqualValues(t, perm.AccessModeAdmin, collaboration.Mode) 80 81 access := unittest.AssertExistsAndLoadBean(t, &access_model.Access{UserID: 4, RepoID: repo.ID}) 82 assert.EqualValues(t, perm.AccessModeAdmin, access.Mode) 83 84 assert.NoError(t, repo_model.ChangeCollaborationAccessMode(db.DefaultContext, repo, 4, perm.AccessModeAdmin)) 85 86 assert.NoError(t, repo_model.ChangeCollaborationAccessMode(db.DefaultContext, repo, unittest.NonexistentID, perm.AccessModeAdmin)) 87 88 // Disvard invalid input. 89 assert.NoError(t, repo_model.ChangeCollaborationAccessMode(db.DefaultContext, repo, 4, perm.AccessMode(unittest.NonexistentID))) 90 91 unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: repo.ID}) 92 } 93 94 func TestRepository_IsOwnerMemberCollaborator(t *testing.T) { 95 assert.NoError(t, unittest.PrepareTestDatabase()) 96 97 repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3}) 98 99 // Organisation owner. 100 actual, err := repo_model.IsOwnerMemberCollaborator(db.DefaultContext, repo1, 2) 101 assert.NoError(t, err) 102 assert.True(t, actual) 103 104 // Team member. 105 actual, err = repo_model.IsOwnerMemberCollaborator(db.DefaultContext, repo1, 4) 106 assert.NoError(t, err) 107 assert.True(t, actual) 108 109 // Normal user. 110 actual, err = repo_model.IsOwnerMemberCollaborator(db.DefaultContext, repo1, 1) 111 assert.NoError(t, err) 112 assert.False(t, actual) 113 114 repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 4}) 115 116 // Collaborator. 117 actual, err = repo_model.IsOwnerMemberCollaborator(db.DefaultContext, repo2, 4) 118 assert.NoError(t, err) 119 assert.True(t, actual) 120 121 repo3 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 15}) 122 123 // Repository owner. 124 actual, err = repo_model.IsOwnerMemberCollaborator(db.DefaultContext, repo3, 2) 125 assert.NoError(t, err) 126 assert.True(t, actual) 127 } 128 129 func TestRepo_GetCollaboration(t *testing.T) { 130 assert.NoError(t, unittest.PrepareTestDatabase()) 131 132 repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 4}) 133 134 // Existing collaboration. 135 collab, err := repo_model.GetCollaboration(db.DefaultContext, repo.ID, 4) 136 assert.NoError(t, err) 137 assert.NotNil(t, collab) 138 assert.EqualValues(t, 4, collab.UserID) 139 assert.EqualValues(t, 4, collab.RepoID) 140 141 // Non-existing collaboration. 142 collab, err = repo_model.GetCollaboration(db.DefaultContext, repo.ID, 1) 143 assert.NoError(t, err) 144 assert.Nil(t, collab) 145 }