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 7.4KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. // Copyright 2017 The Gitea Authors. All rights reserved.
  2. // Use of this source code is governed by a MIT-style
  3. // license that can be found in the LICENSE file.
  4. package models
  5. import (
  6. "strings"
  7. "testing"
  8. "code.gitea.io/gitea/models/db"
  9. "code.gitea.io/gitea/models/organization"
  10. "code.gitea.io/gitea/models/perm"
  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}).(*organization.Team)
  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}).(*organization.Team)
  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}).(*organization.Team)
  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}).(*organization.Team)
  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_AddRepository(t *testing.T) {
  58. assert.NoError(t, unittest.PrepareTestDatabase())
  59. testSuccess := func(teamID, repoID int64) {
  60. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID}).(*organization.Team)
  61. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: repoID}).(*repo_model.Repository)
  62. assert.NoError(t, AddRepository(team, repo))
  63. unittest.AssertExistsAndLoadBean(t, &organization.TeamRepo{TeamID: teamID, RepoID: repoID})
  64. unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID}, &repo_model.Repository{ID: repoID})
  65. }
  66. testSuccess(2, 3)
  67. testSuccess(2, 5)
  68. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 1}).(*organization.Team)
  69. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository)
  70. assert.Error(t, AddRepository(team, repo))
  71. unittest.CheckConsistencyFor(t, &organization.Team{ID: 1}, &repo_model.Repository{ID: 1})
  72. }
  73. func TestTeam_RemoveRepository(t *testing.T) {
  74. assert.NoError(t, unittest.PrepareTestDatabase())
  75. testSuccess := func(teamID, repoID int64) {
  76. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID}).(*organization.Team)
  77. assert.NoError(t, RemoveRepository(team, repoID))
  78. unittest.AssertNotExistsBean(t, &organization.TeamRepo{TeamID: teamID, RepoID: repoID})
  79. unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID}, &repo_model.Repository{ID: repoID})
  80. }
  81. testSuccess(2, 3)
  82. testSuccess(2, 5)
  83. testSuccess(1, unittest.NonexistentID)
  84. }
  85. func TestIsUsableTeamName(t *testing.T) {
  86. assert.NoError(t, organization.IsUsableTeamName("usable"))
  87. assert.True(t, db.IsErrNameReserved(organization.IsUsableTeamName("new")))
  88. }
  89. func TestNewTeam(t *testing.T) {
  90. assert.NoError(t, unittest.PrepareTestDatabase())
  91. const teamName = "newTeamName"
  92. team := &organization.Team{Name: teamName, OrgID: 3}
  93. assert.NoError(t, NewTeam(team))
  94. unittest.AssertExistsAndLoadBean(t, &organization.Team{Name: teamName})
  95. unittest.CheckConsistencyFor(t, &organization.Team{}, &user_model.User{ID: team.OrgID})
  96. }
  97. func TestUpdateTeam(t *testing.T) {
  98. // successful update
  99. assert.NoError(t, unittest.PrepareTestDatabase())
  100. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 2}).(*organization.Team)
  101. team.LowerName = "newname"
  102. team.Name = "newName"
  103. team.Description = strings.Repeat("A long description!", 100)
  104. team.AccessMode = perm.AccessModeAdmin
  105. assert.NoError(t, UpdateTeam(team, true, false))
  106. team = unittest.AssertExistsAndLoadBean(t, &organization.Team{Name: "newName"}).(*organization.Team)
  107. assert.True(t, strings.HasPrefix(team.Description, "A long description!"))
  108. access := unittest.AssertExistsAndLoadBean(t, &Access{UserID: 4, RepoID: 3}).(*Access)
  109. assert.EqualValues(t, perm.AccessModeAdmin, access.Mode)
  110. unittest.CheckConsistencyFor(t, &organization.Team{ID: team.ID})
  111. }
  112. func TestUpdateTeam2(t *testing.T) {
  113. // update to already-existing team
  114. assert.NoError(t, unittest.PrepareTestDatabase())
  115. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 2}).(*organization.Team)
  116. team.LowerName = "owners"
  117. team.Name = "Owners"
  118. team.Description = strings.Repeat("A long description!", 100)
  119. err := UpdateTeam(team, true, false)
  120. assert.True(t, organization.IsErrTeamAlreadyExist(err))
  121. unittest.CheckConsistencyFor(t, &organization.Team{ID: team.ID})
  122. }
  123. func TestDeleteTeam(t *testing.T) {
  124. assert.NoError(t, unittest.PrepareTestDatabase())
  125. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 2}).(*organization.Team)
  126. assert.NoError(t, DeleteTeam(team))
  127. unittest.AssertNotExistsBean(t, &organization.Team{ID: team.ID})
  128. unittest.AssertNotExistsBean(t, &organization.TeamRepo{TeamID: team.ID})
  129. unittest.AssertNotExistsBean(t, &organization.TeamUser{TeamID: team.ID})
  130. // check that team members don't have "leftover" access to repos
  131. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4}).(*user_model.User)
  132. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3}).(*repo_model.Repository)
  133. accessMode, err := AccessLevel(user, repo)
  134. assert.NoError(t, err)
  135. assert.True(t, accessMode < perm.AccessModeWrite)
  136. }
  137. func TestAddTeamMember(t *testing.T) {
  138. assert.NoError(t, unittest.PrepareTestDatabase())
  139. test := func(teamID, userID int64) {
  140. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID}).(*organization.Team)
  141. assert.NoError(t, AddTeamMember(team, userID))
  142. unittest.AssertExistsAndLoadBean(t, &organization.TeamUser{UID: userID, TeamID: teamID})
  143. unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID}, &user_model.User{ID: team.OrgID})
  144. }
  145. test(1, 2)
  146. test(1, 4)
  147. test(3, 2)
  148. }
  149. func TestRemoveTeamMember(t *testing.T) {
  150. assert.NoError(t, unittest.PrepareTestDatabase())
  151. testSuccess := func(teamID, userID int64) {
  152. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID}).(*organization.Team)
  153. assert.NoError(t, RemoveTeamMember(team, userID))
  154. unittest.AssertNotExistsBean(t, &organization.TeamUser{UID: userID, TeamID: teamID})
  155. unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID})
  156. }
  157. testSuccess(1, 4)
  158. testSuccess(2, 2)
  159. testSuccess(3, 2)
  160. testSuccess(3, unittest.NonexistentID)
  161. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 1}).(*organization.Team)
  162. err := RemoveTeamMember(team, 2)
  163. assert.True(t, organization.IsErrLastOrgOwner(err))
  164. }