- // Copyright 2019 The Gitea Authors. All rights reserved.
- // Use of this source code is governed by a MIT-style
- // license that can be found in the LICENSE file.
-
- package repository
-
- import (
- "fmt"
- "testing"
-
- "code.gitea.io/gitea/models"
- "code.gitea.io/gitea/modules/structs"
-
- "github.com/stretchr/testify/assert"
- )
-
- func TestIncludesAllRepositoriesTeams(t *testing.T) {
- assert.NoError(t, models.PrepareTestDatabase())
-
- testTeamRepositories := func(teamID int64, repoIds []int64) {
- team := models.AssertExistsAndLoadBean(t, &models.Team{ID: teamID}).(*models.Team)
- assert.NoError(t, team.GetRepositories(&models.SearchTeamOptions{}), "%s: GetRepositories", team.Name)
- assert.Len(t, team.Repos, team.NumRepos, "%s: len repo", team.Name)
- assert.Equal(t, len(repoIds), len(team.Repos), "%s: repo count", team.Name)
- for i, rid := range repoIds {
- if rid > 0 {
- assert.True(t, team.HasRepository(rid), "%s: HasRepository(%d) %d", rid, i)
- }
- }
- }
-
- // Get an admin user.
- user, err := models.GetUserByID(1)
- assert.NoError(t, err, "GetUserByID")
-
- // Create org.
- org := &models.User{
- Name: "All_repo",
- IsActive: true,
- Type: models.UserTypeOrganization,
- Visibility: structs.VisibleTypePublic,
- }
- assert.NoError(t, models.CreateOrganization(org, user), "CreateOrganization")
-
- // Check Owner team.
- ownerTeam, err := org.GetOwnerTeam()
- assert.NoError(t, err, "GetOwnerTeam")
- assert.True(t, ownerTeam.IncludesAllRepositories, "Owner team includes all repositories")
-
- // Create repos.
- repoIds := make([]int64, 0)
- for i := 0; i < 3; i++ {
- r, err := CreateRepository(user, org, models.CreateRepoOptions{Name: fmt.Sprintf("repo-%d", i)})
- assert.NoError(t, err, "CreateRepository %d", i)
- if r != nil {
- repoIds = append(repoIds, r.ID)
- }
- }
- // Get fresh copy of Owner team after creating repos.
- ownerTeam, err = org.GetOwnerTeam()
- assert.NoError(t, err, "GetOwnerTeam")
-
- // Create teams and check repositories.
- teams := []*models.Team{
- ownerTeam,
- {
- OrgID: org.ID,
- Name: "team one",
- Authorize: models.AccessModeRead,
- IncludesAllRepositories: true,
- },
- {
- OrgID: org.ID,
- Name: "team 2",
- Authorize: models.AccessModeRead,
- IncludesAllRepositories: false,
- },
- {
- OrgID: org.ID,
- Name: "team three",
- Authorize: models.AccessModeWrite,
- IncludesAllRepositories: true,
- },
- {
- OrgID: org.ID,
- Name: "team 4",
- Authorize: models.AccessModeWrite,
- IncludesAllRepositories: false,
- },
- }
- teamRepos := [][]int64{
- repoIds,
- repoIds,
- {},
- repoIds,
- {},
- }
- for i, team := range teams {
- if i > 0 { // first team is Owner.
- assert.NoError(t, models.NewTeam(team), "%s: NewTeam", team.Name)
- }
- testTeamRepositories(team.ID, teamRepos[i])
- }
-
- // Update teams and check repositories.
- teams[3].IncludesAllRepositories = false
- teams[4].IncludesAllRepositories = true
- teamRepos[4] = repoIds
- for i, team := range teams {
- assert.NoError(t, models.UpdateTeam(team, false, true), "%s: UpdateTeam", team.Name)
- testTeamRepositories(team.ID, teamRepos[i])
- }
-
- // Create repo and check teams repositories.
- org.Teams = nil // Reset teams to allow their reloading.
- r, err := CreateRepository(user, org, models.CreateRepoOptions{Name: "repo-last"})
- assert.NoError(t, err, "CreateRepository last")
- if r != nil {
- repoIds = append(repoIds, r.ID)
- }
- teamRepos[0] = repoIds
- teamRepos[1] = repoIds
- teamRepos[4] = repoIds
- for i, team := range teams {
- testTeamRepositories(team.ID, teamRepos[i])
- }
-
- // Remove repo and check teams repositories.
- assert.NoError(t, models.DeleteRepository(user, org.ID, repoIds[0]), "DeleteRepository")
- teamRepos[0] = repoIds[1:]
- teamRepos[1] = repoIds[1:]
- teamRepos[3] = repoIds[1:3]
- teamRepos[4] = repoIds[1:]
- for i, team := range teams {
- testTeamRepositories(team.ID, teamRepos[i])
- }
-
- // Wipe created items.
- for i, rid := range repoIds {
- if i > 0 { // first repo already deleted.
- assert.NoError(t, models.DeleteRepository(user, org.ID, rid), "DeleteRepository %d", i)
- }
- }
- assert.NoError(t, models.DeleteOrganization(org), "DeleteOrganization")
- }
|