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_team_test.go 6.9KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // SPDX-License-Identifier: MIT
  3. package models
  4. import (
  5. "strings"
  6. "testing"
  7. "code.gitea.io/gitea/models/db"
  8. "code.gitea.io/gitea/models/organization"
  9. "code.gitea.io/gitea/models/perm"
  10. access_model "code.gitea.io/gitea/models/perm/access"
  11. repo_model "code.gitea.io/gitea/models/repo"
  12. "code.gitea.io/gitea/models/unittest"
  13. user_model "code.gitea.io/gitea/models/user"
  14. "github.com/stretchr/testify/assert"
  15. )
  16. func TestTeam_AddMember(t *testing.T) {
  17. assert.NoError(t, unittest.PrepareTestDatabase())
  18. test := func(teamID, userID int64) {
  19. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
  20. assert.NoError(t, AddTeamMember(team, userID))
  21. unittest.AssertExistsAndLoadBean(t, &organization.TeamUser{UID: userID, TeamID: teamID})
  22. unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID}, &user_model.User{ID: team.OrgID})
  23. }
  24. test(1, 2)
  25. test(1, 4)
  26. test(3, 2)
  27. }
  28. func TestTeam_RemoveMember(t *testing.T) {
  29. assert.NoError(t, unittest.PrepareTestDatabase())
  30. testSuccess := func(teamID, userID int64) {
  31. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
  32. assert.NoError(t, RemoveTeamMember(team, userID))
  33. unittest.AssertNotExistsBean(t, &organization.TeamUser{UID: userID, TeamID: teamID})
  34. unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID})
  35. }
  36. testSuccess(1, 4)
  37. testSuccess(2, 2)
  38. testSuccess(3, 2)
  39. testSuccess(3, unittest.NonexistentID)
  40. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 1})
  41. err := RemoveTeamMember(team, 2)
  42. assert.True(t, organization.IsErrLastOrgOwner(err))
  43. }
  44. func TestTeam_HasRepository(t *testing.T) {
  45. assert.NoError(t, unittest.PrepareTestDatabase())
  46. test := func(teamID, repoID int64, expected bool) {
  47. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
  48. assert.Equal(t, expected, HasRepository(team, repoID))
  49. }
  50. test(1, 1, false)
  51. test(1, 3, true)
  52. test(1, 5, true)
  53. test(1, unittest.NonexistentID, false)
  54. test(2, 3, true)
  55. test(2, 5, false)
  56. }
  57. func TestTeam_RemoveRepository(t *testing.T) {
  58. assert.NoError(t, unittest.PrepareTestDatabase())
  59. testSuccess := func(teamID, repoID int64) {
  60. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
  61. assert.NoError(t, RemoveRepository(team, repoID))
  62. unittest.AssertNotExistsBean(t, &organization.TeamRepo{TeamID: teamID, RepoID: repoID})
  63. unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID}, &repo_model.Repository{ID: repoID})
  64. }
  65. testSuccess(2, 3)
  66. testSuccess(2, 5)
  67. testSuccess(1, unittest.NonexistentID)
  68. }
  69. func TestIsUsableTeamName(t *testing.T) {
  70. assert.NoError(t, organization.IsUsableTeamName("usable"))
  71. assert.True(t, db.IsErrNameReserved(organization.IsUsableTeamName("new")))
  72. }
  73. func TestNewTeam(t *testing.T) {
  74. assert.NoError(t, unittest.PrepareTestDatabase())
  75. const teamName = "newTeamName"
  76. team := &organization.Team{Name: teamName, OrgID: 3}
  77. assert.NoError(t, NewTeam(team))
  78. unittest.AssertExistsAndLoadBean(t, &organization.Team{Name: teamName})
  79. unittest.CheckConsistencyFor(t, &organization.Team{}, &user_model.User{ID: team.OrgID})
  80. }
  81. func TestUpdateTeam(t *testing.T) {
  82. // successful update
  83. assert.NoError(t, unittest.PrepareTestDatabase())
  84. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 2})
  85. team.LowerName = "newname"
  86. team.Name = "newName"
  87. team.Description = strings.Repeat("A long description!", 100)
  88. team.AccessMode = perm.AccessModeAdmin
  89. assert.NoError(t, UpdateTeam(team, true, false))
  90. team = unittest.AssertExistsAndLoadBean(t, &organization.Team{Name: "newName"})
  91. assert.True(t, strings.HasPrefix(team.Description, "A long description!"))
  92. access := unittest.AssertExistsAndLoadBean(t, &access_model.Access{UserID: 4, RepoID: 3})
  93. assert.EqualValues(t, perm.AccessModeAdmin, access.Mode)
  94. unittest.CheckConsistencyFor(t, &organization.Team{ID: team.ID})
  95. }
  96. func TestUpdateTeam2(t *testing.T) {
  97. // update to already-existing team
  98. assert.NoError(t, unittest.PrepareTestDatabase())
  99. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 2})
  100. team.LowerName = "owners"
  101. team.Name = "Owners"
  102. team.Description = strings.Repeat("A long description!", 100)
  103. err := UpdateTeam(team, true, false)
  104. assert.True(t, organization.IsErrTeamAlreadyExist(err))
  105. unittest.CheckConsistencyFor(t, &organization.Team{ID: team.ID})
  106. }
  107. func TestDeleteTeam(t *testing.T) {
  108. assert.NoError(t, unittest.PrepareTestDatabase())
  109. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 2})
  110. assert.NoError(t, DeleteTeam(team))
  111. unittest.AssertNotExistsBean(t, &organization.Team{ID: team.ID})
  112. unittest.AssertNotExistsBean(t, &organization.TeamRepo{TeamID: team.ID})
  113. unittest.AssertNotExistsBean(t, &organization.TeamUser{TeamID: team.ID})
  114. // check that team members don't have "leftover" access to repos
  115. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
  116. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3})
  117. accessMode, err := access_model.AccessLevel(db.DefaultContext, user, repo)
  118. assert.NoError(t, err)
  119. assert.True(t, accessMode < perm.AccessModeWrite)
  120. }
  121. func TestAddTeamMember(t *testing.T) {
  122. assert.NoError(t, unittest.PrepareTestDatabase())
  123. test := func(teamID, userID int64) {
  124. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
  125. assert.NoError(t, AddTeamMember(team, userID))
  126. unittest.AssertExistsAndLoadBean(t, &organization.TeamUser{UID: userID, TeamID: teamID})
  127. unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID}, &user_model.User{ID: team.OrgID})
  128. }
  129. test(1, 2)
  130. test(1, 4)
  131. test(3, 2)
  132. }
  133. func TestRemoveTeamMember(t *testing.T) {
  134. assert.NoError(t, unittest.PrepareTestDatabase())
  135. testSuccess := func(teamID, userID int64) {
  136. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
  137. assert.NoError(t, RemoveTeamMember(team, userID))
  138. unittest.AssertNotExistsBean(t, &organization.TeamUser{UID: userID, TeamID: teamID})
  139. unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID})
  140. }
  141. testSuccess(1, 4)
  142. testSuccess(2, 2)
  143. testSuccess(3, 2)
  144. testSuccess(3, unittest.NonexistentID)
  145. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 1})
  146. err := RemoveTeamMember(team, 2)
  147. assert.True(t, organization.IsErrLastOrgOwner(err))
  148. }
  149. func TestRepository_RecalculateAccesses3(t *testing.T) {
  150. assert.NoError(t, unittest.PrepareTestDatabase())
  151. team5 := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 5})
  152. user29 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 29})
  153. has, err := db.GetEngine(db.DefaultContext).Get(&access_model.Access{UserID: 29, RepoID: 23})
  154. assert.NoError(t, err)
  155. assert.False(t, has)
  156. // adding user29 to team5 should add an explicit access row for repo 23
  157. // even though repo 23 is public
  158. assert.NoError(t, AddTeamMember(team5, user29.ID))
  159. has, err = db.GetEngine(db.DefaultContext).Get(&access_model.Access{UserID: 29, RepoID: 23})
  160. assert.NoError(t, err)
  161. assert.True(t, has)
  162. }