code.gitea.io/gitea@v1.19.3/modules/repository/create_test.go (about) 1 // Copyright 2019 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package repository 5 6 import ( 7 "fmt" 8 "testing" 9 10 "code.gitea.io/gitea/models" 11 activities_model "code.gitea.io/gitea/models/activities" 12 "code.gitea.io/gitea/models/db" 13 "code.gitea.io/gitea/models/organization" 14 "code.gitea.io/gitea/models/perm" 15 repo_model "code.gitea.io/gitea/models/repo" 16 "code.gitea.io/gitea/models/unittest" 17 user_model "code.gitea.io/gitea/models/user" 18 "code.gitea.io/gitea/modules/structs" 19 20 "github.com/stretchr/testify/assert" 21 ) 22 23 func TestIncludesAllRepositoriesTeams(t *testing.T) { 24 assert.NoError(t, unittest.PrepareTestDatabase()) 25 26 testTeamRepositories := func(teamID int64, repoIds []int64) { 27 team := unittest.AssertExistsAndLoadBean(t, &organization.Team{ID: teamID}) 28 assert.NoError(t, team.LoadRepositories(db.DefaultContext), "%s: GetRepositories", team.Name) 29 assert.Len(t, team.Repos, team.NumRepos, "%s: len repo", team.Name) 30 assert.Len(t, team.Repos, len(repoIds), "%s: repo count", team.Name) 31 for i, rid := range repoIds { 32 if rid > 0 { 33 assert.True(t, models.HasRepository(team, rid), "%s: HasRepository(%d) %d", rid, i) 34 } 35 } 36 } 37 38 // Get an admin user. 39 user, err := user_model.GetUserByID(db.DefaultContext, 1) 40 assert.NoError(t, err, "GetUserByID") 41 42 // Create org. 43 org := &organization.Organization{ 44 Name: "All_repo", 45 IsActive: true, 46 Type: user_model.UserTypeOrganization, 47 Visibility: structs.VisibleTypePublic, 48 } 49 assert.NoError(t, organization.CreateOrganization(org, user), "CreateOrganization") 50 51 // Check Owner team. 52 ownerTeam, err := org.GetOwnerTeam(db.DefaultContext) 53 assert.NoError(t, err, "GetOwnerTeam") 54 assert.True(t, ownerTeam.IncludesAllRepositories, "Owner team includes all repositories") 55 56 // Create repos. 57 repoIds := make([]int64, 0) 58 for i := 0; i < 3; i++ { 59 r, err := CreateRepository(user, org.AsUser(), CreateRepoOptions{Name: fmt.Sprintf("repo-%d", i)}) 60 assert.NoError(t, err, "CreateRepository %d", i) 61 if r != nil { 62 repoIds = append(repoIds, r.ID) 63 } 64 } 65 // Get fresh copy of Owner team after creating repos. 66 ownerTeam, err = org.GetOwnerTeam(db.DefaultContext) 67 assert.NoError(t, err, "GetOwnerTeam") 68 69 // Create teams and check repositories. 70 teams := []*organization.Team{ 71 ownerTeam, 72 { 73 OrgID: org.ID, 74 Name: "team one", 75 AccessMode: perm.AccessModeRead, 76 IncludesAllRepositories: true, 77 }, 78 { 79 OrgID: org.ID, 80 Name: "team 2", 81 AccessMode: perm.AccessModeRead, 82 IncludesAllRepositories: false, 83 }, 84 { 85 OrgID: org.ID, 86 Name: "team three", 87 AccessMode: perm.AccessModeWrite, 88 IncludesAllRepositories: true, 89 }, 90 { 91 OrgID: org.ID, 92 Name: "team 4", 93 AccessMode: perm.AccessModeWrite, 94 IncludesAllRepositories: false, 95 }, 96 } 97 teamRepos := [][]int64{ 98 repoIds, 99 repoIds, 100 {}, 101 repoIds, 102 {}, 103 } 104 for i, team := range teams { 105 if i > 0 { // first team is Owner. 106 assert.NoError(t, models.NewTeam(team), "%s: NewTeam", team.Name) 107 } 108 testTeamRepositories(team.ID, teamRepos[i]) 109 } 110 111 // Update teams and check repositories. 112 teams[3].IncludesAllRepositories = false 113 teams[4].IncludesAllRepositories = true 114 teamRepos[4] = repoIds 115 for i, team := range teams { 116 assert.NoError(t, models.UpdateTeam(team, false, true), "%s: UpdateTeam", team.Name) 117 testTeamRepositories(team.ID, teamRepos[i]) 118 } 119 120 // Create repo and check teams repositories. 121 r, err := CreateRepository(user, org.AsUser(), CreateRepoOptions{Name: "repo-last"}) 122 assert.NoError(t, err, "CreateRepository last") 123 if r != nil { 124 repoIds = append(repoIds, r.ID) 125 } 126 teamRepos[0] = repoIds 127 teamRepos[1] = repoIds 128 teamRepos[4] = repoIds 129 for i, team := range teams { 130 testTeamRepositories(team.ID, teamRepos[i]) 131 } 132 133 // Remove repo and check teams repositories. 134 assert.NoError(t, models.DeleteRepository(user, org.ID, repoIds[0]), "DeleteRepository") 135 teamRepos[0] = repoIds[1:] 136 teamRepos[1] = repoIds[1:] 137 teamRepos[3] = repoIds[1:3] 138 teamRepos[4] = repoIds[1:] 139 for i, team := range teams { 140 testTeamRepositories(team.ID, teamRepos[i]) 141 } 142 143 // Wipe created items. 144 for i, rid := range repoIds { 145 if i > 0 { // first repo already deleted. 146 assert.NoError(t, models.DeleteRepository(user, org.ID, rid), "DeleteRepository %d", i) 147 } 148 } 149 assert.NoError(t, organization.DeleteOrganization(db.DefaultContext, org), "DeleteOrganization") 150 } 151 152 func TestUpdateRepositoryVisibilityChanged(t *testing.T) { 153 assert.NoError(t, unittest.PrepareTestDatabase()) 154 155 // Get sample repo and change visibility 156 repo, err := repo_model.GetRepositoryByID(db.DefaultContext, 9) 157 assert.NoError(t, err) 158 repo.IsPrivate = true 159 160 // Update it 161 err = UpdateRepository(db.DefaultContext, repo, true) 162 assert.NoError(t, err) 163 164 // Check visibility of action has become private 165 act := activities_model.Action{} 166 _, err = db.GetEngine(db.DefaultContext).ID(3).Get(&act) 167 168 assert.NoError(t, err) 169 assert.True(t, act.IsPrivate) 170 } 171 172 func TestGetDirectorySize(t *testing.T) { 173 assert.NoError(t, unittest.PrepareTestDatabase()) 174 repo, err := repo_model.GetRepositoryByID(db.DefaultContext, 1) 175 assert.NoError(t, err) 176 177 size, err := getDirectorySize(repo.RepoPath()) 178 assert.NoError(t, err) 179 assert.EqualValues(t, size, repo.Size) 180 }