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.

api_repo_collaborator_test.go 5.5KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package integrations
  5. import (
  6. "net/http"
  7. "net/url"
  8. "testing"
  9. "code.gitea.io/gitea/models/perm"
  10. repo_model "code.gitea.io/gitea/models/repo"
  11. "code.gitea.io/gitea/models/unittest"
  12. user_model "code.gitea.io/gitea/models/user"
  13. api "code.gitea.io/gitea/modules/structs"
  14. "github.com/stretchr/testify/assert"
  15. )
  16. func TestAPIRepoCollaboratorPermission(t *testing.T) {
  17. onGiteaRun(t, func(t *testing.T, u *url.URL) {
  18. repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}).(*repo_model.Repository)
  19. repo2Owner := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: repo2.OwnerID}).(*user_model.User)
  20. user4 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}).(*user_model.User)
  21. user5 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 5}).(*user_model.User)
  22. user10 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 10}).(*user_model.User)
  23. user11 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 11}).(*user_model.User)
  24. session := loginUser(t, repo2Owner.Name)
  25. testCtx := NewAPITestContext(t, repo2Owner.Name, repo2.Name)
  26. t.Run("RepoOwnerShouldBeOwner", func(t *testing.T) {
  27. req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/collaborators/%s/permission?token=%s", repo2Owner.Name, repo2.Name, repo2Owner.Name, testCtx.Token)
  28. resp := session.MakeRequest(t, req, http.StatusOK)
  29. var repoPermission api.RepoCollaboratorPermission
  30. DecodeJSON(t, resp, &repoPermission)
  31. assert.Equal(t, "owner", repoPermission.Permission)
  32. })
  33. t.Run("CollaboratorWithReadAccess", func(t *testing.T) {
  34. t.Run("AddUserAsCollaboratorWithReadAccess", doAPIAddCollaborator(testCtx, user4.Name, perm.AccessModeRead))
  35. req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/collaborators/%s/permission?token=%s", repo2Owner.Name, repo2.Name, user4.Name, testCtx.Token)
  36. resp := session.MakeRequest(t, req, http.StatusOK)
  37. var repoPermission api.RepoCollaboratorPermission
  38. DecodeJSON(t, resp, &repoPermission)
  39. assert.Equal(t, "read", repoPermission.Permission)
  40. })
  41. t.Run("CollaboratorWithWriteAccess", func(t *testing.T) {
  42. t.Run("AddUserAsCollaboratorWithWriteAccess", doAPIAddCollaborator(testCtx, user4.Name, perm.AccessModeWrite))
  43. req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/collaborators/%s/permission?token=%s", repo2Owner.Name, repo2.Name, user4.Name, testCtx.Token)
  44. resp := session.MakeRequest(t, req, http.StatusOK)
  45. var repoPermission api.RepoCollaboratorPermission
  46. DecodeJSON(t, resp, &repoPermission)
  47. assert.Equal(t, "write", repoPermission.Permission)
  48. })
  49. t.Run("CollaboratorWithAdminAccess", func(t *testing.T) {
  50. t.Run("AddUserAsCollaboratorWithAdminAccess", doAPIAddCollaborator(testCtx, user4.Name, perm.AccessModeAdmin))
  51. req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/collaborators/%s/permission?token=%s", repo2Owner.Name, repo2.Name, user4.Name, testCtx.Token)
  52. resp := session.MakeRequest(t, req, http.StatusOK)
  53. var repoPermission api.RepoCollaboratorPermission
  54. DecodeJSON(t, resp, &repoPermission)
  55. assert.Equal(t, "admin", repoPermission.Permission)
  56. })
  57. t.Run("CollaboratorNotFound", func(t *testing.T) {
  58. req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/collaborators/%s/permission?token=%s", repo2Owner.Name, repo2.Name, "non-existent-user", testCtx.Token)
  59. session.MakeRequest(t, req, http.StatusNotFound)
  60. })
  61. t.Run("CollaboratorCanQueryItsPermissions", func(t *testing.T) {
  62. t.Run("AddUserAsCollaboratorWithReadAccess", doAPIAddCollaborator(testCtx, user5.Name, perm.AccessModeRead))
  63. _session := loginUser(t, user5.Name)
  64. _testCtx := NewAPITestContext(t, user5.Name, repo2.Name)
  65. req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/collaborators/%s/permission?token=%s", repo2Owner.Name, repo2.Name, user5.Name, _testCtx.Token)
  66. resp := _session.MakeRequest(t, req, http.StatusOK)
  67. var repoPermission api.RepoCollaboratorPermission
  68. DecodeJSON(t, resp, &repoPermission)
  69. assert.Equal(t, "read", repoPermission.Permission)
  70. })
  71. t.Run("CollaboratorCanQueryItsPermissions", func(t *testing.T) {
  72. t.Run("AddUserAsCollaboratorWithReadAccess", doAPIAddCollaborator(testCtx, user5.Name, perm.AccessModeRead))
  73. _session := loginUser(t, user5.Name)
  74. _testCtx := NewAPITestContext(t, user5.Name, repo2.Name)
  75. req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/collaborators/%s/permission?token=%s", repo2Owner.Name, repo2.Name, user5.Name, _testCtx.Token)
  76. resp := _session.MakeRequest(t, req, http.StatusOK)
  77. var repoPermission api.RepoCollaboratorPermission
  78. DecodeJSON(t, resp, &repoPermission)
  79. assert.Equal(t, "read", repoPermission.Permission)
  80. })
  81. t.Run("RepoAdminCanQueryACollaboratorsPermissions", func(t *testing.T) {
  82. t.Run("AddUserAsCollaboratorWithAdminAccess", doAPIAddCollaborator(testCtx, user10.Name, perm.AccessModeAdmin))
  83. t.Run("AddUserAsCollaboratorWithReadAccess", doAPIAddCollaborator(testCtx, user11.Name, perm.AccessModeRead))
  84. _session := loginUser(t, user10.Name)
  85. _testCtx := NewAPITestContext(t, user10.Name, repo2.Name)
  86. req := NewRequestf(t, "GET", "/api/v1/repos/%s/%s/collaborators/%s/permission?token=%s", repo2Owner.Name, repo2.Name, user11.Name, _testCtx.Token)
  87. resp := _session.MakeRequest(t, req, http.StatusOK)
  88. var repoPermission api.RepoCollaboratorPermission
  89. DecodeJSON(t, resp, &repoPermission)
  90. assert.Equal(t, "read", repoPermission.Permission)
  91. })
  92. })
  93. }