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

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169
  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(db.DefaultContext, 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(db.DefaultContext, 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(db.DefaultContext, team, 2)
  42. assert.True(t, organization.IsErrLastOrgOwner(err))
  43. }
  44. func TestIsUsableTeamName(t *testing.T) {
  45. assert.NoError(t, organization.IsUsableTeamName("usable"))
  46. assert.True(t, db.IsErrNameReserved(organization.IsUsableTeamName("new")))
  47. }
  48. func TestNewTeam(t *testing.T) {
  49. assert.NoError(t, unittest.PrepareTestDatabase())
  50. const teamName = "newTeamName"
  51. team := &organization.Team{Name: teamName, OrgID: 3}
  52. assert.NoError(t, NewTeam(db.DefaultContext, team))
  53. unittest.AssertExistsAndLoadBean(t, &organization.Team{Name: teamName})
  54. unittest.CheckConsistencyFor(t, &organization.Team{}, &user_model.User{ID: team.OrgID})
  55. }
  56. func TestUpdateTeam(t *testing.T) {
  57. // successful update
  58. assert.NoError(t, unittest.PrepareTestDatabase())
  59. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 2})
  60. team.LowerName = "newname"
  61. team.Name = "newName"
  62. team.Description = strings.Repeat("A long description!", 100)
  63. team.AccessMode = perm.AccessModeAdmin
  64. assert.NoError(t, UpdateTeam(db.DefaultContext, team, true, false))
  65. team = unittest.AssertExistsAndLoadBean(t, &organization.Team{Name: "newName"})
  66. assert.True(t, strings.HasPrefix(team.Description, "A long description!"))
  67. access := unittest.AssertExistsAndLoadBean(t, &access_model.Access{UserID: 4, RepoID: 3})
  68. assert.EqualValues(t, perm.AccessModeAdmin, access.Mode)
  69. unittest.CheckConsistencyFor(t, &organization.Team{ID: team.ID})
  70. }
  71. func TestUpdateTeam2(t *testing.T) {
  72. // update to already-existing team
  73. assert.NoError(t, unittest.PrepareTestDatabase())
  74. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 2})
  75. team.LowerName = "owners"
  76. team.Name = "Owners"
  77. team.Description = strings.Repeat("A long description!", 100)
  78. err := UpdateTeam(db.DefaultContext, team, true, false)
  79. assert.True(t, organization.IsErrTeamAlreadyExist(err))
  80. unittest.CheckConsistencyFor(t, &organization.Team{ID: team.ID})
  81. }
  82. func TestDeleteTeam(t *testing.T) {
  83. assert.NoError(t, unittest.PrepareTestDatabase())
  84. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 2})
  85. assert.NoError(t, DeleteTeam(db.DefaultContext, team))
  86. unittest.AssertNotExistsBean(t, &organization.Team{ID: team.ID})
  87. unittest.AssertNotExistsBean(t, &organization.TeamRepo{TeamID: team.ID})
  88. unittest.AssertNotExistsBean(t, &organization.TeamUser{TeamID: team.ID})
  89. // check that team members don't have "leftover" access to repos
  90. user := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 4})
  91. repo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3})
  92. accessMode, err := access_model.AccessLevel(db.DefaultContext, user, repo)
  93. assert.NoError(t, err)
  94. assert.True(t, accessMode < perm.AccessModeWrite)
  95. }
  96. func TestAddTeamMember(t *testing.T) {
  97. assert.NoError(t, unittest.PrepareTestDatabase())
  98. test := func(teamID, userID int64) {
  99. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
  100. assert.NoError(t, AddTeamMember(db.DefaultContext, team, userID))
  101. unittest.AssertExistsAndLoadBean(t, &organization.TeamUser{UID: userID, TeamID: teamID})
  102. unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID}, &user_model.User{ID: team.OrgID})
  103. }
  104. test(1, 2)
  105. test(1, 4)
  106. test(3, 2)
  107. }
  108. func TestRemoveTeamMember(t *testing.T) {
  109. assert.NoError(t, unittest.PrepareTestDatabase())
  110. testSuccess := func(teamID, userID int64) {
  111. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID})
  112. assert.NoError(t, RemoveTeamMember(db.DefaultContext, team, userID))
  113. unittest.AssertNotExistsBean(t, &organization.TeamUser{UID: userID, TeamID: teamID})
  114. unittest.CheckConsistencyFor(t, &organization.Team{ID: teamID})
  115. }
  116. testSuccess(1, 4)
  117. testSuccess(2, 2)
  118. testSuccess(3, 2)
  119. testSuccess(3, unittest.NonexistentID)
  120. team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 1})
  121. err := RemoveTeamMember(db.DefaultContext, team, 2)
  122. assert.True(t, organization.IsErrLastOrgOwner(err))
  123. }
  124. func TestRepository_RecalculateAccesses3(t *testing.T) {
  125. assert.NoError(t, unittest.PrepareTestDatabase())
  126. team5 := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: 5})
  127. user29 := unittest.AssertExistsAndLoadBean(t, &user_model.User{ID: 29})
  128. has, err := db.GetEngine(db.DefaultContext).Get(&access_model.Access{UserID: 29, RepoID: 23})
  129. assert.NoError(t, err)
  130. assert.False(t, has)
  131. // adding user29 to team5 should add an explicit access row for repo 23
  132. // even though repo 23 is public
  133. assert.NoError(t, AddTeamMember(db.DefaultContext, team5, user29.ID))
  134. has, err = db.GetEngine(db.DefaultContext).Get(&access_model.Access{UserID: 29, RepoID: 23})
  135. assert.NoError(t, err)
  136. assert.True(t, has)
  137. }