Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.

create_test.go 4.3KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. // Copyright 2019 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 repository
  5. import (
  6. "fmt"
  7. "testing"
  8. "code.gitea.io/gitea/models"
  9. "code.gitea.io/gitea/models/db"
  10. "code.gitea.io/gitea/models/unittest"
  11. "code.gitea.io/gitea/modules/structs"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func TestIncludesAllRepositoriesTeams(t *testing.T) {
  15. assert.NoError(t, unittest.PrepareTestDatabase())
  16. testTeamRepositories := func(teamID int64, repoIds []int64) {
  17. team := db.AssertExistsAndLoadBean(t, &models.Team{ID: teamID}).(*models.Team)
  18. assert.NoError(t, team.GetRepositories(&models.SearchTeamOptions{}), "%s: GetRepositories", team.Name)
  19. assert.Len(t, team.Repos, team.NumRepos, "%s: len repo", team.Name)
  20. assert.Len(t, team.Repos, len(repoIds), "%s: repo count", team.Name)
  21. for i, rid := range repoIds {
  22. if rid > 0 {
  23. assert.True(t, team.HasRepository(rid), "%s: HasRepository(%d) %d", rid, i)
  24. }
  25. }
  26. }
  27. // Get an admin user.
  28. user, err := models.GetUserByID(1)
  29. assert.NoError(t, err, "GetUserByID")
  30. // Create org.
  31. org := &models.User{
  32. Name: "All_repo",
  33. IsActive: true,
  34. Type: models.UserTypeOrganization,
  35. Visibility: structs.VisibleTypePublic,
  36. }
  37. assert.NoError(t, models.CreateOrganization(org, user), "CreateOrganization")
  38. // Check Owner team.
  39. ownerTeam, err := org.GetOwnerTeam()
  40. assert.NoError(t, err, "GetOwnerTeam")
  41. assert.True(t, ownerTeam.IncludesAllRepositories, "Owner team includes all repositories")
  42. // Create repos.
  43. repoIds := make([]int64, 0)
  44. for i := 0; i < 3; i++ {
  45. r, err := CreateRepository(user, org, models.CreateRepoOptions{Name: fmt.Sprintf("repo-%d", i)})
  46. assert.NoError(t, err, "CreateRepository %d", i)
  47. if r != nil {
  48. repoIds = append(repoIds, r.ID)
  49. }
  50. }
  51. // Get fresh copy of Owner team after creating repos.
  52. ownerTeam, err = org.GetOwnerTeam()
  53. assert.NoError(t, err, "GetOwnerTeam")
  54. // Create teams and check repositories.
  55. teams := []*models.Team{
  56. ownerTeam,
  57. {
  58. OrgID: org.ID,
  59. Name: "team one",
  60. Authorize: models.AccessModeRead,
  61. IncludesAllRepositories: true,
  62. },
  63. {
  64. OrgID: org.ID,
  65. Name: "team 2",
  66. Authorize: models.AccessModeRead,
  67. IncludesAllRepositories: false,
  68. },
  69. {
  70. OrgID: org.ID,
  71. Name: "team three",
  72. Authorize: models.AccessModeWrite,
  73. IncludesAllRepositories: true,
  74. },
  75. {
  76. OrgID: org.ID,
  77. Name: "team 4",
  78. Authorize: models.AccessModeWrite,
  79. IncludesAllRepositories: false,
  80. },
  81. }
  82. teamRepos := [][]int64{
  83. repoIds,
  84. repoIds,
  85. {},
  86. repoIds,
  87. {},
  88. }
  89. for i, team := range teams {
  90. if i > 0 { // first team is Owner.
  91. assert.NoError(t, models.NewTeam(team), "%s: NewTeam", team.Name)
  92. }
  93. testTeamRepositories(team.ID, teamRepos[i])
  94. }
  95. // Update teams and check repositories.
  96. teams[3].IncludesAllRepositories = false
  97. teams[4].IncludesAllRepositories = true
  98. teamRepos[4] = repoIds
  99. for i, team := range teams {
  100. assert.NoError(t, models.UpdateTeam(team, false, true), "%s: UpdateTeam", team.Name)
  101. testTeamRepositories(team.ID, teamRepos[i])
  102. }
  103. // Create repo and check teams repositories.
  104. org.Teams = nil // Reset teams to allow their reloading.
  105. r, err := CreateRepository(user, org, models.CreateRepoOptions{Name: "repo-last"})
  106. assert.NoError(t, err, "CreateRepository last")
  107. if r != nil {
  108. repoIds = append(repoIds, r.ID)
  109. }
  110. teamRepos[0] = repoIds
  111. teamRepos[1] = repoIds
  112. teamRepos[4] = repoIds
  113. for i, team := range teams {
  114. testTeamRepositories(team.ID, teamRepos[i])
  115. }
  116. // Remove repo and check teams repositories.
  117. assert.NoError(t, models.DeleteRepository(user, org.ID, repoIds[0]), "DeleteRepository")
  118. teamRepos[0] = repoIds[1:]
  119. teamRepos[1] = repoIds[1:]
  120. teamRepos[3] = repoIds[1:3]
  121. teamRepos[4] = repoIds[1:]
  122. for i, team := range teams {
  123. testTeamRepositories(team.ID, teamRepos[i])
  124. }
  125. // Wipe created items.
  126. for i, rid := range repoIds {
  127. if i > 0 { // first repo already deleted.
  128. assert.NoError(t, models.DeleteRepository(user, org.ID, rid), "DeleteRepository %d", i)
  129. }
  130. }
  131. assert.NoError(t, models.DeleteOrganization(org), "DeleteOrganization")
  132. }