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 5package models 6 7import ( 8 "testing" 9 10 "code.gitea.io/gitea/models/db" 11 repo_model "code.gitea.io/gitea/models/repo" 12 "code.gitea.io/gitea/models/unit" 13 "code.gitea.io/gitea/models/unittest" 14 user_model "code.gitea.io/gitea/models/user" 15 "code.gitea.io/gitea/modules/markup" 16 17 "github.com/stretchr/testify/assert" 18) 19 20func TestCheckRepoStats(t *testing.T) { 21 assert.NoError(t, unittest.PrepareTestDatabase()) 22 assert.NoError(t, CheckRepoStats(db.DefaultContext)) 23} 24 25func TestWatchRepo(t *testing.T) { 26 assert.NoError(t, unittest.PrepareTestDatabase()) 27 const repoID = 3 28 const userID = 2 29 30 assert.NoError(t, repo_model.WatchRepo(userID, repoID, true)) 31 unittest.AssertExistsAndLoadBean(t, &repo_model.Watch{RepoID: repoID, UserID: userID}) 32 unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: repoID}) 33 34 assert.NoError(t, repo_model.WatchRepo(userID, repoID, false)) 35 unittest.AssertNotExistsBean(t, &repo_model.Watch{RepoID: repoID, UserID: userID}) 36 unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: repoID}) 37} 38 39func TestMetas(t *testing.T) { 40 assert.NoError(t, unittest.PrepareTestDatabase()) 41 42 repo := &repo_model.Repository{Name: "testRepo"} 43 repo.Owner = &user_model.User{Name: "testOwner"} 44 repo.OwnerName = repo.Owner.Name 45 46 repo.Units = nil 47 48 metas := repo.ComposeMetas() 49 assert.Equal(t, "testRepo", metas["repo"]) 50 assert.Equal(t, "testOwner", metas["user"]) 51 52 externalTracker := repo_model.RepoUnit{ 53 Type: unit.TypeExternalTracker, 54 Config: &repo_model.ExternalTrackerConfig{ 55 ExternalTrackerFormat: "https://someurl.com/{user}/{repo}/{issue}", 56 }, 57 } 58 59 testSuccess := func(expectedStyle string) { 60 repo.Units = []*repo_model.RepoUnit{&externalTracker} 61 repo.RenderingMetas = nil 62 metas := repo.ComposeMetas() 63 assert.Equal(t, expectedStyle, metas["style"]) 64 assert.Equal(t, "testRepo", metas["repo"]) 65 assert.Equal(t, "testOwner", metas["user"]) 66 assert.Equal(t, "https://someurl.com/{user}/{repo}/{issue}", metas["format"]) 67 } 68 69 testSuccess(markup.IssueNameStyleNumeric) 70 71 externalTracker.ExternalTrackerConfig().ExternalTrackerStyle = markup.IssueNameStyleAlphanumeric 72 testSuccess(markup.IssueNameStyleAlphanumeric) 73 74 externalTracker.ExternalTrackerConfig().ExternalTrackerStyle = markup.IssueNameStyleNumeric 75 testSuccess(markup.IssueNameStyleNumeric) 76 77 repo, err := repo_model.GetRepositoryByID(3) 78 assert.NoError(t, err) 79 80 metas = repo.ComposeMetas() 81 assert.Contains(t, metas, "org") 82 assert.Contains(t, metas, "teams") 83 assert.Equal(t, "user3", metas["org"]) 84 assert.Equal(t, ",owners,team1,", metas["teams"]) 85} 86 87func TestUpdateRepositoryVisibilityChanged(t *testing.T) { 88 assert.NoError(t, unittest.PrepareTestDatabase()) 89 90 // Get sample repo and change visibility 91 repo, err := repo_model.GetRepositoryByID(9) 92 assert.NoError(t, err) 93 repo.IsPrivate = true 94 95 // Update it 96 err = UpdateRepository(repo, true) 97 assert.NoError(t, err) 98 99 // Check visibility of action has become private 100 act := Action{} 101 _, err = db.GetEngine(db.DefaultContext).ID(3).Get(&act) 102 103 assert.NoError(t, err) 104 assert.True(t, act.IsPrivate) 105} 106 107func TestDoctorUserStarNum(t *testing.T) { 108 assert.NoError(t, unittest.PrepareTestDatabase()) 109 110 assert.NoError(t, DoctorUserStarNum()) 111} 112 113func TestRepoGetReviewers(t *testing.T) { 114 assert.NoError(t, unittest.PrepareTestDatabase()) 115 116 // test public repo 117 repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository) 118 119 reviewers, err := GetReviewers(repo1, 2, 2) 120 assert.NoError(t, err) 121 assert.Len(t, reviewers, 4) 122 123 // test private repo 124 repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}).(*repo_model.Repository) 125 reviewers, err = GetReviewers(repo2, 2, 2) 126 assert.NoError(t, err) 127 assert.Empty(t, reviewers) 128} 129 130func TestRepoGetReviewerTeams(t *testing.T) { 131 assert.NoError(t, unittest.PrepareTestDatabase()) 132 133 repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}).(*repo_model.Repository) 134 teams, err := GetReviewerTeams(repo2) 135 assert.NoError(t, err) 136 assert.Empty(t, teams) 137 138 repo3 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3}).(*repo_model.Repository) 139 teams, err = GetReviewerTeams(repo3) 140 assert.NoError(t, err) 141 assert.Len(t, teams, 2) 142} 143 144func TestLinkedRepository(t *testing.T) { 145 assert.NoError(t, unittest.PrepareTestDatabase()) 146 testCases := []struct { 147 name string 148 attachID int64 149 expectedRepo *repo_model.Repository 150 expectedUnitType unit.Type 151 }{ 152 {"LinkedIssue", 1, &repo_model.Repository{ID: 1}, unit.TypeIssues}, 153 {"LinkedComment", 3, &repo_model.Repository{ID: 1}, unit.TypePullRequests}, 154 {"LinkedRelease", 9, &repo_model.Repository{ID: 1}, unit.TypeReleases}, 155 {"Notlinked", 10, nil, -1}, 156 } 157 for _, tc := range testCases { 158 t.Run(tc.name, func(t *testing.T) { 159 attach, err := repo_model.GetAttachmentByID(tc.attachID) 160 assert.NoError(t, err) 161 repo, unitType, err := LinkedRepository(attach) 162 assert.NoError(t, err) 163 if tc.expectedRepo != nil { 164 assert.Equal(t, tc.expectedRepo.ID, repo.ID) 165 } 166 assert.Equal(t, tc.expectedUnitType, unitType) 167 }) 168 } 169} 170 171func TestRepoAssignees(t *testing.T) { 172 assert.NoError(t, unittest.PrepareTestDatabase()) 173 174 repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}).(*repo_model.Repository) 175 users, err := GetRepoAssignees(repo2) 176 assert.NoError(t, err) 177 assert.Len(t, users, 1) 178 assert.Equal(t, users[0].ID, int64(2)) 179 180 repo21 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 21}).(*repo_model.Repository) 181 users, err = GetRepoAssignees(repo21) 182 assert.NoError(t, err) 183 assert.Len(t, users, 3) 184 assert.Equal(t, users[0].ID, int64(15)) 185 assert.Equal(t, users[1].ID, int64(18)) 186 assert.Equal(t, users[2].ID, int64(16)) 187} 188