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.

org_user_test.go 4.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. // Copyright 2022 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package organization_test
  4. import (
  5. "fmt"
  6. "testing"
  7. "code.gitea.io/gitea/models/db"
  8. "code.gitea.io/gitea/models/organization"
  9. "code.gitea.io/gitea/models/unittest"
  10. user_model "code.gitea.io/gitea/models/user"
  11. "code.gitea.io/gitea/modules/setting"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func TestUserIsPublicMember(t *testing.T) {
  15. assert.NoError(t, unittest.PrepareTestDatabase())
  16. tt := []struct {
  17. uid int64
  18. orgid int64
  19. expected bool
  20. }{
  21. {2, 3, true},
  22. {4, 3, false},
  23. {5, 6, true},
  24. {5, 7, false},
  25. }
  26. for _, v := range tt {
  27. t.Run(fmt.Sprintf("UserId%dIsPublicMemberOf%d", v.uid, v.orgid), func(t *testing.T) {
  28. testUserIsPublicMember(t, v.uid, v.orgid, v.expected)
  29. })
  30. }
  31. }
  32. func testUserIsPublicMember(t *testing.T, uid, orgID int64, expected bool) {
  33. user, err := user_model.GetUserByID(db.DefaultContext, uid)
  34. assert.NoError(t, err)
  35. is, err := organization.IsPublicMembership(orgID, user.ID)
  36. assert.NoError(t, err)
  37. assert.Equal(t, expected, is)
  38. }
  39. func TestIsUserOrgOwner(t *testing.T) {
  40. assert.NoError(t, unittest.PrepareTestDatabase())
  41. tt := []struct {
  42. uid int64
  43. orgid int64
  44. expected bool
  45. }{
  46. {2, 3, true},
  47. {4, 3, false},
  48. {5, 6, true},
  49. {5, 7, true},
  50. }
  51. for _, v := range tt {
  52. t.Run(fmt.Sprintf("UserId%dIsOrgOwnerOf%d", v.uid, v.orgid), func(t *testing.T) {
  53. testIsUserOrgOwner(t, v.uid, v.orgid, v.expected)
  54. })
  55. }
  56. }
  57. func testIsUserOrgOwner(t *testing.T, uid, orgID int64, expected bool) {
  58. user, err := user_model.GetUserByID(db.DefaultContext, uid)
  59. assert.NoError(t, err)
  60. is, err := organization.IsOrganizationOwner(db.DefaultContext, orgID, user.ID)
  61. assert.NoError(t, err)
  62. assert.Equal(t, expected, is)
  63. }
  64. func TestUserListIsPublicMember(t *testing.T) {
  65. assert.NoError(t, unittest.PrepareTestDatabase())
  66. tt := []struct {
  67. orgid int64
  68. expected map[int64]bool
  69. }{
  70. {3, map[int64]bool{2: true, 4: false, 28: true}},
  71. {6, map[int64]bool{5: true, 28: true}},
  72. {7, map[int64]bool{5: false}},
  73. {25, map[int64]bool{24: true}},
  74. {22, map[int64]bool{}},
  75. }
  76. for _, v := range tt {
  77. t.Run(fmt.Sprintf("IsPublicMemberOfOrgId%d", v.orgid), func(t *testing.T) {
  78. testUserListIsPublicMember(t, v.orgid, v.expected)
  79. })
  80. }
  81. }
  82. func testUserListIsPublicMember(t *testing.T, orgID int64, expected map[int64]bool) {
  83. org, err := organization.GetOrgByID(db.DefaultContext, orgID)
  84. assert.NoError(t, err)
  85. _, membersIsPublic, err := org.GetMembers(db.DefaultContext)
  86. assert.NoError(t, err)
  87. assert.Equal(t, expected, membersIsPublic)
  88. }
  89. func TestUserListIsUserOrgOwner(t *testing.T) {
  90. assert.NoError(t, unittest.PrepareTestDatabase())
  91. tt := []struct {
  92. orgid int64
  93. expected map[int64]bool
  94. }{
  95. {3, map[int64]bool{2: true, 4: false, 28: false}},
  96. {6, map[int64]bool{5: true, 28: false}},
  97. {7, map[int64]bool{5: true}},
  98. {25, map[int64]bool{24: false}}, // ErrTeamNotExist
  99. {22, map[int64]bool{}}, // No member
  100. }
  101. for _, v := range tt {
  102. t.Run(fmt.Sprintf("IsUserOrgOwnerOfOrgId%d", v.orgid), func(t *testing.T) {
  103. testUserListIsUserOrgOwner(t, v.orgid, v.expected)
  104. })
  105. }
  106. }
  107. func testUserListIsUserOrgOwner(t *testing.T, orgID int64, expected map[int64]bool) {
  108. org, err := organization.GetOrgByID(db.DefaultContext, orgID)
  109. assert.NoError(t, err)
  110. members, _, err := org.GetMembers(db.DefaultContext)
  111. assert.NoError(t, err)
  112. assert.Equal(t, expected, organization.IsUserOrgOwner(members, orgID))
  113. }
  114. func TestAddOrgUser(t *testing.T) {
  115. assert.NoError(t, unittest.PrepareTestDatabase())
  116. testSuccess := func(orgID, userID int64, isPublic bool) {
  117. org := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: orgID})
  118. expectedNumMembers := org.NumMembers
  119. if !unittest.BeanExists(t, &organization.OrgUser{OrgID: orgID, UID: userID}) {
  120. expectedNumMembers++
  121. }
  122. assert.NoError(t, organization.AddOrgUser(orgID, userID))
  123. ou := &organization.OrgUser{OrgID: orgID, UID: userID}
  124. unittest.AssertExistsAndLoadBean(t, ou)
  125. assert.Equal(t, isPublic, ou.IsPublic)
  126. org = unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: orgID})
  127. assert.EqualValues(t, expectedNumMembers, org.NumMembers)
  128. }
  129. setting.Service.DefaultOrgMemberVisible = false
  130. testSuccess(3, 5, false)
  131. testSuccess(3, 5, false)
  132. testSuccess(6, 2, false)
  133. setting.Service.DefaultOrgMemberVisible = true
  134. testSuccess(6, 3, true)
  135. unittest.CheckConsistencyFor(t, &user_model.User{}, &organization.Team{})
  136. }