From 33286791a2f1ed033479bc35abc254f86422e8e2 Mon Sep 17 00:00:00 2001 From: Lunny Xiao Date: Thu, 2 Jan 2025 21:11:17 -0800 Subject: [PATCH] Fix test --- models/fixtures/branch.yml | 38 ++++ routers/common/compare.go | 2 +- routers/common/compare_test.go | 338 +++++++++++++++++++++------------ 3 files changed, 253 insertions(+), 125 deletions(-) diff --git a/models/fixtures/branch.yml b/models/fixtures/branch.yml index 17b1869ab6..78eac8f9a1 100644 --- a/models/fixtures/branch.yml +++ b/models/fixtures/branch.yml @@ -93,3 +93,41 @@ is_deleted: false deleted_by_id: 0 deleted_unix: 0 + +- + id: 16 + repo_id: 1 + name: 'DefaultBranch' + commit_id: '90c1019714259b24fb81711d4416ac0f18667dfa' + commit_message: 'add license' + commit_time: 1709259547 + pusher_id: 1 + is_deleted: false + +- + id: 17 + repo_id: 1 + name: 'develop' + commit_id: '65f1bf27bc3bf70f64657658635e66094edbcb4d' + commit_message: 'first commit' + commit_time: 978307100 + pusher_id: 1 + +- + id: 18 + repo_id: 11 + name: 'develop' + commit_id: '65f1bf27bc3bf70f64657658635e66094edbcb4d' + commit_message: 'Initial commit' + commit_time: 1489956479 + pusher_id: 1 + +- + id: 19 + repo_id: 10 + name: 'DefaultBranch' + commit_id: '65f1bf27bc3bf70f64657658635e66094edbcb4d' + commit_message: 'Initial commit' + commit_time: 1489956479 + pusher_id: 1 + is_deleted: false \ No newline at end of file diff --git a/routers/common/compare.go b/routers/common/compare.go index 84576bc3fd..e73bd077c9 100644 --- a/routers/common/compare.go +++ b/routers/common/compare.go @@ -169,7 +169,7 @@ func findHeadRepoFromRootBase(ctx context.Context, baseRepo *repo_model.Reposito return nil, nil } // test if we are lucky - repo, err := repo_model.GetUserFork(ctx, headUserID, baseRepo.ID) + repo, err := repo_model.GetUserFork(ctx, baseRepo.ID, headUserID) if err != nil { return nil, err } diff --git a/routers/common/compare_test.go b/routers/common/compare_test.go index 2717866b36..88d20a88f9 100644 --- a/routers/common/compare_test.go +++ b/routers/common/compare_test.go @@ -10,6 +10,7 @@ import ( "code.gitea.io/gitea/models/db" repo_model "code.gitea.io/gitea/models/repo" "code.gitea.io/gitea/models/unittest" + "code.gitea.io/gitea/modules/git" "code.gitea.io/gitea/modules/gitrepo" "github.com/stretchr/testify/assert" @@ -144,185 +145,274 @@ func TestCompareRouters(t *testing.T) { } func Test_ParseComparePathParams(t *testing.T) { - baseRepo := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) - assert.NotNil(t, baseRepo) - assert.NoError(t, baseRepo.LoadOwner(db.DefaultContext)) - baseGitRepo, err := gitrepo.OpenRepository(context.Background(), baseRepo) + assert.NoError(t, unittest.PrepareTestDatabase()) + + repo1 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 1}) + assert.NotNil(t, repo1) + assert.NoError(t, repo1.LoadOwner(db.DefaultContext)) + gitRepo1, err := gitrepo.OpenRepository(context.Background(), repo1) assert.NoError(t, err) - defer baseGitRepo.Close() + defer gitRepo1.Close() + + repo10 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 10}) + assert.NotNil(t, repo10) + assert.NoError(t, repo10.LoadOwner(db.DefaultContext)) + gitRepo10, err := gitrepo.OpenRepository(context.Background(), repo10) + assert.NoError(t, err) + defer gitRepo10.Close() + + repo11 := unittest.AssertExistsAndLoadBean(t, &repo_model.Repository{ID: 11}) + assert.NotNil(t, repo11) + assert.NoError(t, repo11.LoadOwner(db.DefaultContext)) + gitRepo11, err := gitrepo.OpenRepository(context.Background(), repo11) + assert.NoError(t, err) + defer gitRepo11.Close() + assert.True(t, repo11.IsFork) // repo11 is a fork of repo10 kases := []struct { + repoName string + hasClose bool router string compareInfo *CompareInfo }{ { - router: "main...develop", + repoName: "repo1", + router: "master...branch2", compareInfo: &CompareInfo{ CompareRouter: &CompareRouter{ - BaseOriRef: "main", - HeadOriRef: "develop", - DotTimes: 3, - }, - BaseRepo: baseRepo, - HeadUser: baseRepo.Owner, - HeadRepo: baseRepo, - HeadGitRepo: baseGitRepo, - }, - }, - { - router: "main..develop", - compareInfo: &CompareInfo{ - CompareRouter: &CompareRouter{ - BaseOriRef: "main", - HeadOriRef: "develop", - DotTimes: 2, - }, - BaseRepo: baseRepo, - HeadUser: baseRepo.Owner, - HeadRepo: baseRepo, - HeadGitRepo: baseGitRepo, - }, - }, - { - router: "main^...develop", - compareInfo: &CompareInfo{ - CompareRouter: &CompareRouter{ - BaseOriRef: "main", - HeadOriRef: "develop", - CaretTimes: 1, - DotTimes: 3, - }, - BaseRepo: baseRepo, - HeadUser: baseRepo.Owner, - HeadRepo: baseRepo, - HeadGitRepo: baseGitRepo, - }, - }, - { - router: "main^^^^^...develop", - compareInfo: &CompareInfo{ - CompareRouter: &CompareRouter{ - BaseOriRef: "main", - HeadOriRef: "develop", - CaretTimes: 5, - DotTimes: 3, - }, - BaseRepo: baseRepo, - HeadUser: baseRepo.Owner, - HeadRepo: baseRepo, - HeadGitRepo: baseGitRepo, - }, - }, - { - router: "develop", - compareInfo: &CompareInfo{ - CompareRouter: &CompareRouter{ - BaseOriRef: baseRepo.DefaultBranch, - HeadOriRef: "develop", - DotTimes: 3, - }, - BaseRepo: baseRepo, - HeadUser: baseRepo.Owner, - HeadRepo: baseRepo, - HeadGitRepo: baseGitRepo, - }, - }, - { - router: "lunny/forked_repo:develop", - compareInfo: &CompareInfo{ - CompareRouter: &CompareRouter{ - BaseOriRef: baseRepo.DefaultBranch, - HeadOwnerName: "lunny", - HeadRepoName: "forked_repo", - HeadOriRef: "develop", + BaseOriRef: "master", + BaseFullRef: git.RefNameFromBranch("master"), + HeadOriRef: "branch2", + HeadFullRef: git.RefNameFromBranch("branch2"), + HeadOwnerName: repo1.OwnerName, + HeadRepoName: repo1.Name, DotTimes: 3, }, - BaseRepo: baseRepo, + BaseRepo: repo1, + HeadUser: repo1.Owner, + HeadRepo: repo1, + HeadGitRepo: gitRepo1, }, }, { - router: "main...lunny/forked_repo:develop", + repoName: "repo1", + router: "DefaultBranch..branch2", compareInfo: &CompareInfo{ CompareRouter: &CompareRouter{ - BaseOriRef: "main", - HeadOwnerName: "lunny", - HeadRepoName: "forked_repo", - HeadOriRef: "develop", + BaseOriRef: "DefaultBranch", + BaseFullRef: git.RefNameFromBranch("DefaultBranch"), + HeadOriRef: "branch2", + HeadFullRef: git.RefNameFromBranch("branch2"), + HeadOwnerName: repo1.Owner.Name, + HeadRepoName: repo1.Name, + DotTimes: 2, + }, + BaseRepo: repo1, + HeadUser: repo1.Owner, + HeadRepo: repo1, + HeadGitRepo: gitRepo1, + }, + }, + { + repoName: "repo1", + router: "DefaultBranch^...branch2", + compareInfo: &CompareInfo{ + CompareRouter: &CompareRouter{ + BaseOriRef: "DefaultBranch", + BaseFullRef: git.RefNameFromBranch("DefaultBranch"), + HeadOriRef: "branch2", + HeadFullRef: git.RefNameFromBranch("branch2"), + HeadOwnerName: repo1.Owner.Name, + HeadRepoName: repo1.Name, + CaretTimes: 1, DotTimes: 3, }, + BaseRepo: repo1, + HeadUser: repo1.Owner, + HeadRepo: repo1, + HeadGitRepo: gitRepo1, }, }, { - router: "main...lunny/forked_repo:develop", + repoName: "repo1", + router: "branch2", compareInfo: &CompareInfo{ CompareRouter: &CompareRouter{ - BaseOriRef: "main", - HeadOwnerName: "lunny", - HeadRepoName: "forked_repo", - HeadOriRef: "develop", + BaseOriRef: repo1.DefaultBranch, + BaseFullRef: git.RefNameFromBranch(repo1.DefaultBranch), + HeadOriRef: "branch2", + HeadOwnerName: repo1.Owner.Name, + HeadRepoName: repo1.Name, + HeadFullRef: git.RefNameFromBranch("branch2"), DotTimes: 3, }, + BaseRepo: repo1, + HeadUser: repo1.Owner, + HeadRepo: repo1, + HeadGitRepo: gitRepo1, }, }, { - router: "main^...lunny/forked_repo:develop", + repoName: "repo10", + hasClose: true, + router: "user13/repo11:develop", compareInfo: &CompareInfo{ CompareRouter: &CompareRouter{ - BaseOriRef: "main", - HeadOwnerName: "lunny", - HeadRepoName: "forked_repo", + BaseOriRef: repo10.DefaultBranch, + BaseFullRef: git.RefNameFromBranch(repo10.DefaultBranch), + HeadOwnerName: "user13", + HeadRepoName: "repo11", HeadOriRef: "develop", + HeadFullRef: git.RefNameFromBranch("develop"), + DotTimes: 3, + }, + BaseRepo: repo10, + HeadUser: repo11.Owner, + HeadRepo: repo11, + HeadGitRepo: gitRepo11, + }, + }, + { + repoName: "repo10", + hasClose: true, + router: "master...user13/repo11:develop", + compareInfo: &CompareInfo{ + CompareRouter: &CompareRouter{ + BaseOriRef: "master", + BaseFullRef: git.RefNameFromBranch("master"), + HeadOwnerName: "user13", + HeadRepoName: "repo11", + HeadOriRef: "develop", + HeadFullRef: git.RefNameFromBranch("develop"), + DotTimes: 3, + }, + BaseRepo: repo10, + HeadUser: repo11.Owner, + HeadRepo: repo11, + HeadGitRepo: gitRepo11, + }, + }, + { + repoName: "repo10", + hasClose: true, + router: "DefaultBranch^...user13/repo11:develop", + compareInfo: &CompareInfo{ + CompareRouter: &CompareRouter{ + BaseOriRef: "DefaultBranch", + BaseFullRef: git.RefNameFromBranch("DefaultBranch"), + HeadOwnerName: "user13", + HeadRepoName: "repo11", + HeadOriRef: "develop", + HeadFullRef: git.RefNameFromBranch("develop"), DotTimes: 3, CaretTimes: 1, }, + BaseRepo: repo10, + HeadUser: repo11.Owner, + HeadRepo: repo11, + HeadGitRepo: gitRepo11, }, }, { - router: "v1.0...v1.1", + repoName: "repo1", + router: "master...v1.1", compareInfo: &CompareInfo{ CompareRouter: &CompareRouter{ - BaseOriRef: "v1.0", - HeadOriRef: "v1.1", - DotTimes: 3, - }, - }, - }, - { - router: "teabot-patch-1...v0.0.1", - compareInfo: &CompareInfo{ - CompareRouter: &CompareRouter{ - BaseOriRef: "teabot-patch-1", - HeadOriRef: "v0.0.1", - DotTimes: 3, - }, - }, - }, - { - router: "teabot:feature1", - compareInfo: &CompareInfo{ - CompareRouter: &CompareRouter{ - HeadOwnerName: "teabot", - HeadOriRef: "feature1", + BaseOriRef: "master", + BaseFullRef: git.RefNameFromBranch("master"), + HeadOwnerName: repo1.Owner.Name, + HeadRepoName: repo1.Name, + HeadOriRef: "v1.1", + HeadFullRef: git.RefNameFromTag("v1.1"), DotTimes: 3, }, + BaseRepo: repo1, + HeadUser: repo1.Owner, + HeadRepo: repo1, + HeadGitRepo: gitRepo1, }, }, { - router: "8eb19a5ae19abae15c0666d4ab98906139a7f439...283c030497b455ecfa759d4649f9f8b45158742e", + repoName: "repo10", + hasClose: true, + router: "user13:develop", compareInfo: &CompareInfo{ CompareRouter: &CompareRouter{ - BaseOriRef: "8eb19a5ae19abae15c0666d4ab98906139a7f439", - HeadOriRef: "283c030497b455ecfa759d4649f9f8b45158742e", - DotTimes: 3, + BaseOriRef: repo10.DefaultBranch, + BaseFullRef: git.RefNameFromBranch(repo10.DefaultBranch), + HeadOwnerName: "user13", + HeadOriRef: "develop", + HeadFullRef: git.RefNameFromBranch("develop"), + DotTimes: 3, }, + BaseRepo: repo10, + HeadUser: repo11.Owner, + HeadRepo: repo11, + HeadGitRepo: gitRepo11, + }, + }, + { + repoName: "repo1", + router: "65f1bf27bc3bf70f64657658635e66094edbcb4d...90c1019714259b24fb81711d4416ac0f18667dfa", + compareInfo: &CompareInfo{ + CompareRouter: &CompareRouter{ + BaseOriRef: "65f1bf27bc3bf70f64657658635e66094edbcb4d", + BaseFullRef: git.RefName("65f1bf27bc3bf70f64657658635e66094edbcb4d"), + HeadOwnerName: repo1.Owner.Name, + HeadRepoName: repo1.Name, + HeadOriRef: "90c1019714259b24fb81711d4416ac0f18667dfa", + HeadFullRef: git.RefName("90c1019714259b24fb81711d4416ac0f18667dfa"), + DotTimes: 3, + }, + BaseRepo: repo1, + HeadUser: repo1.Owner, + HeadRepo: repo1, + HeadGitRepo: gitRepo1, + IsBaseCommit: true, + IsHeadCommit: true, + }, + }, + { + repoName: "repo1", + router: "5c050d3b6d2db231ab1f64e324f1b6b9a0b181c2^...985f0301dba5e7b34be866819cd15ad3d8f508ee", + compareInfo: &CompareInfo{ + CompareRouter: &CompareRouter{ + BaseOriRef: "5c050d3b6d2db231ab1f64e324f1b6b9a0b181c2", + BaseFullRef: git.RefName("5c050d3b6d2db231ab1f64e324f1b6b9a0b181c2"), + HeadOwnerName: repo1.Owner.Name, + HeadRepoName: repo1.Name, + HeadOriRef: "985f0301dba5e7b34be866819cd15ad3d8f508ee", + HeadFullRef: git.RefName("985f0301dba5e7b34be866819cd15ad3d8f508ee"), + DotTimes: 3, + CaretTimes: 1, + }, + BaseRepo: repo1, + HeadUser: repo1.Owner, + HeadRepo: repo1, + HeadGitRepo: gitRepo1, + IsBaseCommit: true, + IsHeadCommit: true, }, }, } for _, kase := range kases { t.Run(kase.router, func(t *testing.T) { + var baseRepo *repo_model.Repository + var baseGitRepo *git.Repository + if kase.repoName == "repo1" { + baseRepo = repo1 + baseGitRepo = gitRepo1 + } else if kase.repoName == "repo10" { + baseRepo = repo10 + baseGitRepo = gitRepo10 + } r, err := ParseComparePathParams(context.Background(), kase.router, baseRepo, baseGitRepo) assert.NoError(t, err) + if kase.hasClose { + assert.NotNil(t, r.close) + r.close = nil // close is a function, so we can't compare it + } assert.EqualValues(t, kase.compareInfo, r) }) }