mirror of
				https://codeberg.org/forgejo/forgejo.git
				synced 2025-10-27 20:41:01 +00:00 
			
		
		
		
	The CheckRepoStats function missed the following counters: - label num_closed_issues & num_closed_pulls - milestone num_closed_issues & num_closed_pulls The update SQL statements for updating the repository num_closed_issues & num_closed_pulls fields were repeated in three functions (repo.CheckRepoStats, migrate.insertIssues and models.Issue.updateClosedNum) and were moved to a single helper. The UpdateRepoStats is implemented and called in the Finish migration method so that it happens immediately instead of wating for the CheckRepoStats to run. Signed-off-by: Loïc Dachary loic@dachary.org --- [source](https://lab.forgefriends.org/forgefriends/forgefriends/-/merge_requests/34)
		
			
				
	
	
		
			169 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			169 lines
		
	
	
	
		
			5.1 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| // Copyright 2017 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 models
 | |
| 
 | |
| import (
 | |
| 	"testing"
 | |
| 
 | |
| 	"code.gitea.io/gitea/models/db"
 | |
| 	repo_model "code.gitea.io/gitea/models/repo"
 | |
| 	"code.gitea.io/gitea/models/unit"
 | |
| 	"code.gitea.io/gitea/models/unittest"
 | |
| 	user_model "code.gitea.io/gitea/models/user"
 | |
| 	"code.gitea.io/gitea/modules/markup"
 | |
| 
 | |
| 	"github.com/stretchr/testify/assert"
 | |
| )
 | |
| 
 | |
| func TestCheckRepoStats(t *testing.T) {
 | |
| 	assert.NoError(t, unittest.PrepareTestDatabase())
 | |
| 	assert.NoError(t, CheckRepoStats(db.DefaultContext))
 | |
| }
 | |
| 
 | |
| func TestWatchRepo(t *testing.T) {
 | |
| 	assert.NoError(t, unittest.PrepareTestDatabase())
 | |
| 	const repoID = 3
 | |
| 	const userID = 2
 | |
| 
 | |
| 	assert.NoError(t, repo_model.WatchRepo(userID, repoID, true))
 | |
| 	unittest.AssertExistsAndLoadBean(t, &repo_model.Watch{RepoID: repoID, UserID: userID})
 | |
| 	unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: repoID})
 | |
| 
 | |
| 	assert.NoError(t, repo_model.WatchRepo(userID, repoID, false))
 | |
| 	unittest.AssertNotExistsBean(t, &repo_model.Watch{RepoID: repoID, UserID: userID})
 | |
| 	unittest.CheckConsistencyFor(t, &repo_model.Repository{ID: repoID})
 | |
| }
 | |
| 
 | |
| func TestMetas(t *testing.T) {
 | |
| 	assert.NoError(t, unittest.PrepareTestDatabase())
 | |
| 
 | |
| 	repo := &repo_model.Repository{Name: "testRepo"}
 | |
| 	repo.Owner = &user_model.User{Name: "testOwner"}
 | |
| 	repo.OwnerName = repo.Owner.Name
 | |
| 
 | |
| 	repo.Units = nil
 | |
| 
 | |
| 	metas := repo.ComposeMetas()
 | |
| 	assert.Equal(t, "testRepo", metas["repo"])
 | |
| 	assert.Equal(t, "testOwner", metas["user"])
 | |
| 
 | |
| 	externalTracker := repo_model.RepoUnit{
 | |
| 		Type: unit.TypeExternalTracker,
 | |
| 		Config: &repo_model.ExternalTrackerConfig{
 | |
| 			ExternalTrackerFormat: "https://someurl.com/{user}/{repo}/{issue}",
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	testSuccess := func(expectedStyle string) {
 | |
| 		repo.Units = []*repo_model.RepoUnit{&externalTracker}
 | |
| 		repo.RenderingMetas = nil
 | |
| 		metas := repo.ComposeMetas()
 | |
| 		assert.Equal(t, expectedStyle, metas["style"])
 | |
| 		assert.Equal(t, "testRepo", metas["repo"])
 | |
| 		assert.Equal(t, "testOwner", metas["user"])
 | |
| 		assert.Equal(t, "https://someurl.com/{user}/{repo}/{issue}", metas["format"])
 | |
| 	}
 | |
| 
 | |
| 	testSuccess(markup.IssueNameStyleNumeric)
 | |
| 
 | |
| 	externalTracker.ExternalTrackerConfig().ExternalTrackerStyle = markup.IssueNameStyleAlphanumeric
 | |
| 	testSuccess(markup.IssueNameStyleAlphanumeric)
 | |
| 
 | |
| 	externalTracker.ExternalTrackerConfig().ExternalTrackerStyle = markup.IssueNameStyleNumeric
 | |
| 	testSuccess(markup.IssueNameStyleNumeric)
 | |
| 
 | |
| 	repo, err := repo_model.GetRepositoryByID(3)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	metas = repo.ComposeMetas()
 | |
| 	assert.Contains(t, metas, "org")
 | |
| 	assert.Contains(t, metas, "teams")
 | |
| 	assert.Equal(t, "user3", metas["org"])
 | |
| 	assert.Equal(t, ",owners,team1,", metas["teams"])
 | |
| }
 | |
| 
 | |
| func TestUpdateRepositoryVisibilityChanged(t *testing.T) {
 | |
| 	assert.NoError(t, unittest.PrepareTestDatabase())
 | |
| 
 | |
| 	// Get sample repo and change visibility
 | |
| 	repo, err := repo_model.GetRepositoryByID(9)
 | |
| 	assert.NoError(t, err)
 | |
| 	repo.IsPrivate = true
 | |
| 
 | |
| 	// Update it
 | |
| 	err = UpdateRepository(repo, true)
 | |
| 	assert.NoError(t, err)
 | |
| 
 | |
| 	// Check visibility of action has become private
 | |
| 	act := Action{}
 | |
| 	_, err = db.GetEngine(db.DefaultContext).ID(3).Get(&act)
 | |
| 
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.True(t, act.IsPrivate)
 | |
| }
 | |
| 
 | |
| func TestDoctorUserStarNum(t *testing.T) {
 | |
| 	assert.NoError(t, unittest.PrepareTestDatabase())
 | |
| 
 | |
| 	assert.NoError(t, DoctorUserStarNum())
 | |
| }
 | |
| 
 | |
| func TestRepoGetReviewers(t *testing.T) {
 | |
| 	assert.NoError(t, unittest.PrepareTestDatabase())
 | |
| 
 | |
| 	// test public repo
 | |
| 	repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}).(*repo_model.Repository)
 | |
| 
 | |
| 	reviewers, err := GetReviewers(repo1, 2, 2)
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.Len(t, reviewers, 4)
 | |
| 
 | |
| 	// test private repo
 | |
| 	repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}).(*repo_model.Repository)
 | |
| 	reviewers, err = GetReviewers(repo2, 2, 2)
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.Empty(t, reviewers)
 | |
| }
 | |
| 
 | |
| func TestRepoGetReviewerTeams(t *testing.T) {
 | |
| 	assert.NoError(t, unittest.PrepareTestDatabase())
 | |
| 
 | |
| 	repo2 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 2}).(*repo_model.Repository)
 | |
| 	teams, err := GetReviewerTeams(repo2)
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.Empty(t, teams)
 | |
| 
 | |
| 	repo3 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 3}).(*repo_model.Repository)
 | |
| 	teams, err = GetReviewerTeams(repo3)
 | |
| 	assert.NoError(t, err)
 | |
| 	assert.Len(t, teams, 2)
 | |
| }
 | |
| 
 | |
| func TestLinkedRepository(t *testing.T) {
 | |
| 	assert.NoError(t, unittest.PrepareTestDatabase())
 | |
| 	testCases := []struct {
 | |
| 		name             string
 | |
| 		attachID         int64
 | |
| 		expectedRepo     *repo_model.Repository
 | |
| 		expectedUnitType unit.Type
 | |
| 	}{
 | |
| 		{"LinkedIssue", 1, &repo_model.Repository{ID: 1}, unit.TypeIssues},
 | |
| 		{"LinkedComment", 3, &repo_model.Repository{ID: 1}, unit.TypePullRequests},
 | |
| 		{"LinkedRelease", 9, &repo_model.Repository{ID: 1}, unit.TypeReleases},
 | |
| 		{"Notlinked", 10, nil, -1},
 | |
| 	}
 | |
| 	for _, tc := range testCases {
 | |
| 		t.Run(tc.name, func(t *testing.T) {
 | |
| 			attach, err := repo_model.GetAttachmentByID(tc.attachID)
 | |
| 			assert.NoError(t, err)
 | |
| 			repo, unitType, err := LinkedRepository(attach)
 | |
| 			assert.NoError(t, err)
 | |
| 			if tc.expectedRepo != nil {
 | |
| 				assert.Equal(t, tc.expectedRepo.ID, repo.ID)
 | |
| 			}
 | |
| 			assert.Equal(t, tc.expectedUnitType, unitType)
 | |
| 		})
 | |
| 	}
 | |
| }
 |