You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

collaboration_test.go 5.5KB

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