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.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  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. "code.gitea.io/gitea/models/unittest"
  9. user_model "code.gitea.io/gitea/models/user"
  10. api "code.gitea.io/gitea/modules/structs"
  11. "code.gitea.io/gitea/tests"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func TestUserOrgs(t *testing.T) {
  15. defer tests.PrepareTestEnv(t)()
  16. adminUsername := "user1"
  17. normalUsername := "user2"
  18. privateMemberUsername := "user4"
  19. unrelatedUsername := "user5"
  20. orgs := getUserOrgs(t, adminUsername, normalUsername)
  21. user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user3"})
  22. user17 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user17"})
  23. assert.Equal(t, []*api.Organization{
  24. {
  25. ID: 17,
  26. Name: user17.Name,
  27. UserName: user17.Name,
  28. FullName: user17.FullName,
  29. AvatarURL: user17.AvatarLink(),
  30. Description: "",
  31. Website: "",
  32. Location: "",
  33. Visibility: "public",
  34. },
  35. {
  36. ID: 3,
  37. Name: user3.Name,
  38. UserName: user3.Name,
  39. FullName: user3.FullName,
  40. AvatarURL: user3.AvatarLink(),
  41. Description: "",
  42. Website: "",
  43. Location: "",
  44. Visibility: "public",
  45. },
  46. }, orgs)
  47. // user itself should get it's org's he is a member of
  48. orgs = getUserOrgs(t, privateMemberUsername, privateMemberUsername)
  49. assert.Len(t, orgs, 1)
  50. // unrelated user should not get private org membership of privateMemberUsername
  51. orgs = getUserOrgs(t, unrelatedUsername, privateMemberUsername)
  52. assert.Len(t, orgs, 0)
  53. // not authenticated call also should hide org membership
  54. orgs = getUserOrgs(t, "", privateMemberUsername)
  55. assert.Len(t, orgs, 0)
  56. }
  57. func getUserOrgs(t *testing.T, userDoer, userCheck string) (orgs []*api.Organization) {
  58. token := ""
  59. session := emptyTestSession(t)
  60. if len(userDoer) != 0 {
  61. session = loginUser(t, userDoer)
  62. token = getTokenForLoggedInUser(t, session)
  63. }
  64. urlStr := fmt.Sprintf("/api/v1/users/%s/orgs?token=%s", userCheck, token)
  65. req := NewRequest(t, "GET", urlStr)
  66. resp := session.MakeRequest(t, req, http.StatusOK)
  67. DecodeJSON(t, resp, &orgs)
  68. return orgs
  69. }
  70. func TestMyOrgs(t *testing.T) {
  71. defer tests.PrepareTestEnv(t)()
  72. session := emptyTestSession(t)
  73. req := NewRequest(t, "GET", "/api/v1/user/orgs")
  74. session.MakeRequest(t, req, http.StatusUnauthorized)
  75. normalUsername := "user2"
  76. session = loginUser(t, normalUsername)
  77. token := getTokenForLoggedInUser(t, session)
  78. req = NewRequest(t, "GET", "/api/v1/user/orgs?token="+token)
  79. resp := session.MakeRequest(t, req, http.StatusOK)
  80. var orgs []*api.Organization
  81. DecodeJSON(t, resp, &orgs)
  82. user3 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user3"})
  83. user17 := unittest.AssertExistsAndLoadBean(t, &user_model.User{Name: "user17"})
  84. assert.Equal(t, []*api.Organization{
  85. {
  86. ID: 17,
  87. Name: user17.Name,
  88. UserName: user17.Name,
  89. FullName: user17.FullName,
  90. AvatarURL: user17.AvatarLink(),
  91. Description: "",
  92. Website: "",
  93. Location: "",
  94. Visibility: "public",
  95. },
  96. {
  97. ID: 3,
  98. Name: user3.Name,
  99. UserName: user3.Name,
  100. FullName: user3.FullName,
  101. AvatarURL: user3.AvatarLink(),
  102. Description: "",
  103. Website: "",
  104. Location: "",
  105. Visibility: "public",
  106. },
  107. }, orgs)
  108. }