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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  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. urlStr := fmt.Sprintf("/api/v1/users/%s/orgs?token=%s", userCheck, token)
  66. req := NewRequest(t, "GET", urlStr)
  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?token="+token)
  83. resp := MakeRequest(t, req, http.StatusOK)
  84. var orgs []*api.Organization
  85. DecodeJSON(t, resp, &orgs)
  86. org3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "org3"})
  87. org17 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "org17"})
  88. assert.Equal(t, []*api.Organization{
  89. {
  90. ID: 17,
  91. Name: org17.Name,
  92. UserName: org17.Name,
  93. FullName: org17.FullName,
  94. Email: org17.Email,
  95. AvatarURL: org17.AvatarLink(db.DefaultContext),
  96. Description: "",
  97. Website: "",
  98. Location: "",
  99. Visibility: "public",
  100. },
  101. {
  102. ID: 3,
  103. Name: org3.Name,
  104. UserName: org3.Name,
  105. FullName: org3.FullName,
  106. Email: org3.Email,
  107. AvatarURL: org3.AvatarLink(db.DefaultContext),
  108. Description: "",
  109. Website: "",
  110. Location: "",
  111. Visibility: "public",
  112. },
  113. }, orgs)
  114. }