gitea源码

collaboration_test.go 4.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146
  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(t.Context(), &repo_model.FindCollaborationOptions{RepoID: repo.ID})
  18. assert.NoError(t, err)
  19. expectedLen, err := db.GetEngine(t.Context()).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.Equal(t, collaborator.User.ID, collaborator.Collaboration.UserID)
  24. assert.Equal(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(t.Context(), &repo_model.FindCollaborationOptions{
  34. ListOptions: db.ListOptions{PageSize: 1, Page: 1},
  35. RepoID: repo.ID,
  36. })
  37. assert.NoError(t, err)
  38. assert.Len(t, collaborators1, 1)
  39. collaborators2, _, err := repo_model.GetCollaborators(t.Context(), &repo_model.FindCollaborationOptions{
  40. ListOptions: db.ListOptions{PageSize: 1, Page: 2},
  41. RepoID: repo.ID,
  42. })
  43. assert.NoError(t, err)
  44. assert.Len(t, collaborators2, 1)
  45. assert.NotEqual(t, collaborators1[0].ID, collaborators2[0].ID)
  46. }
  47. func TestRepository_IsCollaborator(t *testing.T) {
  48. assert.NoError(t, unittest.PrepareTestDatabase())
  49. test := func(repoID, userID int64, expected bool) {
  50. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: repoID})
  51. actual, err := repo_model.IsCollaborator(t.Context(), repo.ID, userID)
  52. assert.NoError(t, err)
  53. assert.Equal(t, expected, actual)
  54. }
  55. test(3, 2, true)
  56. test(3, unittest.NonexistentID, false)
  57. test(4, 2, false)
  58. test(4, 4, true)
  59. }
  60. func TestRepository_ChangeCollaborationAccessMode(t *testing.T) {
  61. assert.NoError(t, unittest.PrepareTestDatabase())
  62. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 4})
  63. assert.NoError(t, repo_model.ChangeCollaborationAccessMode(t.Context(), repo, 4, perm.AccessModeAdmin))
  64. collaboration := unittest.AssertExistsAndLoadBean(t, &repo_model.Collaboration{RepoID: repo.ID, UserID: 4})
  65. assert.Equal(t, perm.AccessModeAdmin, collaboration.Mode)
  66. access := unittest.AssertExistsAndLoadBean(t, &access_model.Access{UserID: 4, RepoID: repo.ID})
  67. assert.Equal(t, perm.AccessModeAdmin, access.Mode)
  68. assert.NoError(t, repo_model.ChangeCollaborationAccessMode(t.Context(), repo, 4, perm.AccessModeAdmin))
  69. assert.NoError(t, repo_model.ChangeCollaborationAccessMode(t.Context(), repo, unittest.NonexistentID, perm.AccessModeAdmin))
  70. // Discard invalid input.
  71. assert.NoError(t, repo_model.ChangeCollaborationAccessMode(t.Context(), repo, 4, perm.AccessMode(-1)))
  72. unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: repo.ID})
  73. }
  74. func TestRepository_IsOwnerMemberCollaborator(t *testing.T) {
  75. assert.NoError(t, unittest.PrepareTestDatabase())
  76. repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3})
  77. // Organisation owner.
  78. actual, err := repo_model.IsOwnerMemberCollaborator(t.Context(), repo1, 2)
  79. assert.NoError(t, err)
  80. assert.True(t, actual)
  81. // Team member.
  82. actual, err = repo_model.IsOwnerMemberCollaborator(t.Context(), repo1, 4)
  83. assert.NoError(t, err)
  84. assert.True(t, actual)
  85. // Normal user.
  86. actual, err = repo_model.IsOwnerMemberCollaborator(t.Context(), repo1, 1)
  87. assert.NoError(t, err)
  88. assert.False(t, actual)
  89. repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 4})
  90. // Collaborator.
  91. actual, err = repo_model.IsOwnerMemberCollaborator(t.Context(), repo2, 4)
  92. assert.NoError(t, err)
  93. assert.True(t, actual)
  94. repo3 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 15})
  95. // Repository owner.
  96. actual, err = repo_model.IsOwnerMemberCollaborator(t.Context(), repo3, 2)
  97. assert.NoError(t, err)
  98. assert.True(t, actual)
  99. }
  100. func TestRepo_GetCollaboration(t *testing.T) {
  101. assert.NoError(t, unittest.PrepareTestDatabase())
  102. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 4})
  103. // Existing collaboration.
  104. collab, err := repo_model.GetCollaboration(t.Context(), repo.ID, 4)
  105. assert.NoError(t, err)
  106. assert.NotNil(t, collab)
  107. assert.EqualValues(t, 4, collab.UserID)
  108. assert.EqualValues(t, 4, collab.RepoID)
  109. // Non-existing collaboration.
  110. collab, err = repo_model.GetCollaboration(t.Context(), repo.ID, 1)
  111. assert.NoError(t, err)
  112. assert.Nil(t, collab)
  113. }