gitea源码

api_user_orgs_test.go 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158
  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/unittest"
  10. user_model "code.gitea.io/gitea/models/user"
  11. api "code.gitea.io/gitea/modules/structs"
  12. "code.gitea.io/gitea/tests"
  13. "github.com/stretchr/testify/assert"
  14. )
  15. func TestUserOrgs(t *testing.T) {
  16. defer tests.PrepareTestEnv(t)()
  17. adminUsername := "user1"
  18. normalUsername := "user2"
  19. privateMemberUsername := "user4"
  20. unrelatedUsername := "user5"
  21. orgs := getUserOrgs(t, adminUsername, normalUsername)
  22. org3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "org3"})
  23. org17 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "org17"})
  24. org35 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "private_org35"})
  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(t.Context()),
  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(t.Context()),
  45. Description: "",
  46. Website: "",
  47. Location: "",
  48. Visibility: "public",
  49. },
  50. {
  51. ID: 35,
  52. Name: org35.Name,
  53. UserName: org35.Name,
  54. FullName: org35.FullName,
  55. Email: org35.Email,
  56. AvatarURL: org35.AvatarLink(t.Context()),
  57. Description: "",
  58. Website: "",
  59. Location: "",
  60. Visibility: "private",
  61. },
  62. }, orgs)
  63. // user itself should get it's org's he is a member of
  64. orgs = getUserOrgs(t, privateMemberUsername, privateMemberUsername)
  65. assert.Len(t, orgs, 1)
  66. // unrelated user should not get private org membership of privateMemberUsername
  67. orgs = getUserOrgs(t, unrelatedUsername, privateMemberUsername)
  68. assert.Empty(t, orgs)
  69. // not authenticated call should not be allowed
  70. testUserOrgsUnauthenticated(t, privateMemberUsername)
  71. }
  72. func getUserOrgs(t *testing.T, userDoer, userCheck string) (orgs []*api.Organization) {
  73. token := ""
  74. if len(userDoer) != 0 {
  75. token = getUserToken(t, userDoer, auth_model.AccessTokenScopeReadOrganization, auth_model.AccessTokenScopeReadUser)
  76. }
  77. req := NewRequest(t, "GET", fmt.Sprintf("/api/v1/users/%s/orgs", userCheck)).
  78. AddTokenAuth(token)
  79. resp := MakeRequest(t, req, http.StatusOK)
  80. DecodeJSON(t, resp, &orgs)
  81. return orgs
  82. }
  83. func testUserOrgsUnauthenticated(t *testing.T, userCheck string) {
  84. session := emptyTestSession(t)
  85. req := NewRequestf(t, "GET", "/api/v1/users/%s/orgs", userCheck)
  86. session.MakeRequest(t, req, http.StatusUnauthorized)
  87. }
  88. func TestMyOrgs(t *testing.T) {
  89. defer tests.PrepareTestEnv(t)()
  90. req := NewRequest(t, "GET", "/api/v1/user/orgs")
  91. MakeRequest(t, req, http.StatusUnauthorized)
  92. normalUsername := "user2"
  93. token := getUserToken(t, normalUsername, auth_model.AccessTokenScopeReadOrganization, auth_model.AccessTokenScopeReadUser)
  94. req = NewRequest(t, "GET", "/api/v1/user/orgs").
  95. AddTokenAuth(token)
  96. resp := MakeRequest(t, req, http.StatusOK)
  97. var orgs []*api.Organization
  98. DecodeJSON(t, resp, &orgs)
  99. org3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "org3"})
  100. org17 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "org17"})
  101. org35 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "private_org35"})
  102. assert.Equal(t, []*api.Organization{
  103. {
  104. ID: 17,
  105. Name: org17.Name,
  106. UserName: org17.Name,
  107. FullName: org17.FullName,
  108. Email: org17.Email,
  109. AvatarURL: org17.AvatarLink(t.Context()),
  110. Description: "",
  111. Website: "",
  112. Location: "",
  113. Visibility: "public",
  114. },
  115. {
  116. ID: 3,
  117. Name: org3.Name,
  118. UserName: org3.Name,
  119. FullName: org3.FullName,
  120. Email: org3.Email,
  121. AvatarURL: org3.AvatarLink(t.Context()),
  122. Description: "",
  123. Website: "",
  124. Location: "",
  125. Visibility: "public",
  126. },
  127. {
  128. ID: 35,
  129. Name: org35.Name,
  130. UserName: org35.Name,
  131. FullName: org35.FullName,
  132. Email: org35.Email,
  133. AvatarURL: org35.AvatarLink(t.Context()),
  134. Description: "",
  135. Website: "",
  136. Location: "",
  137. Visibility: "private",
  138. },
  139. }, orgs)
  140. }