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_user_orgs_test.go 3.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. // Copyright 2018 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package integration
  4. import (
  5. "fmt"
  6. "net/http"
  7. "testing"
  8. auth_model "code.gitea.io/gitea/models/auth"
  9. "code.gitea.io/gitea/models/db"
  10. "code.gitea.io/gitea/models/unittest"
  11. user_model "code.gitea.io/gitea/models/user"
  12. api "code.gitea.io/gitea/modules/structs"
  13. "code.gitea.io/gitea/tests"
  14. "github.com/stretchr/testify/assert"
  15. )
  16. func TestUserOrgs(t *testing.T) {
  17. defer tests.PrepareTestEnv(t)()
  18. adminUsername := "user1"
  19. normalUsername := "user2"
  20. privateMemberUsername := "user4"
  21. unrelatedUsername := "user5"
  22. orgs := getUserOrgs(t, adminUsername, normalUsername)
  23. org3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "org3"})
  24. org17 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "org17"})
  25. assert.Equal(t, []*api.Organization{
  26. {
  27. ID: 17,
  28. Name: org17.Name,
  29. UserName: org17.Name,
  30. FullName: org17.FullName,
  31. Email: org17.Email,
  32. AvatarURL: org17.AvatarLink(db.DefaultContext),
  33. Description: "",
  34. Website: "",
  35. Location: "",
  36. Visibility: "public",
  37. },
  38. {
  39. ID: 3,
  40. Name: org3.Name,
  41. UserName: org3.Name,
  42. FullName: org3.FullName,
  43. Email: org3.Email,
  44. AvatarURL: org3.AvatarLink(db.DefaultContext),
  45. Description: "",
  46. Website: "",
  47. Location: "",
  48. Visibility: "public",
  49. },
  50. }, orgs)
  51. // user itself should get it's org's he is a member of
  52. orgs = getUserOrgs(t, privateMemberUsername, privateMemberUsername)
  53. assert.Len(t, orgs, 1)
  54. // unrelated user should not get private org membership of privateMemberUsername
  55. orgs = getUserOrgs(t, unrelatedUsername, privateMemberUsername)
  56. assert.Len(t, orgs, 0)
  57. // not authenticated call should not be allowed
  58. testUserOrgsUnauthenticated(t, privateMemberUsername)
  59. }
  60. func getUserOrgs(t *testing.T, userDoer, userCheck string) (orgs []*api.Organization) {
  61. token := ""
  62. if len(userDoer) != 0 {
  63. token = getUserToken(t, userDoer, auth_model.AccessTokenScopeReadOrganization, auth_model.AccessTokenScopeReadUser)
  64. }
  65. req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/orgs", userCheck)).
  66. AddTokenAuth(token)
  67. resp := MakeRequest(t, req, http.StatusOK)
  68. DecodeJSON(t, resp, &orgs)
  69. return orgs
  70. }
  71. func testUserOrgsUnauthenticated(t *testing.T, userCheck string) {
  72. session := emptyTestSession(t)
  73. req := NewRequestf(t, "GET", "/api/v1/users/%s/orgs", userCheck)
  74. session.MakeRequest(t, req, http.StatusUnauthorized)
  75. }
  76. func TestMyOrgs(t *testing.T) {
  77. defer tests.PrepareTestEnv(t)()
  78. req := NewRequest(t, "GET", "/api/v1/user/orgs")
  79. MakeRequest(t, req, http.StatusUnauthorized)
  80. normalUsername := "user2"
  81. token := getUserToken(t, normalUsername, auth_model.AccessTokenScopeReadOrganization, auth_model.AccessTokenScopeReadUser)
  82. req = NewRequest(t, "GET", "/api/v1/user/orgs").
  83. AddTokenAuth(token)
  84. resp := MakeRequest(t, req, http.StatusOK)
  85. var orgs []*api.Organization
  86. DecodeJSON(t, resp, &orgs)
  87. org3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "org3"})
  88. org17 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "org17"})
  89. assert.Equal(t, []*api.Organization{
  90. {
  91. ID: 17,
  92. Name: org17.Name,
  93. UserName: org17.Name,
  94. FullName: org17.FullName,
  95. Email: org17.Email,
  96. AvatarURL: org17.AvatarLink(db.DefaultContext),
  97. Description: "",
  98. Website: "",
  99. Location: "",
  100. Visibility: "public",
  101. },
  102. {
  103. ID: 3,
  104. Name: org3.Name,
  105. UserName: org3.Name,
  106. FullName: org3.FullName,
  107. Email: org3.Email,
  108. AvatarURL: org3.AvatarLink(db.DefaultContext),
  109. Description: "",
  110. Website: "",
  111. Location: "",
  112. Visibility: "public",
  113. },
  114. }, orgs)
  115. }