mirror of
https://github.com/go-gitea/gitea.git
synced 2025-09-20 08:28:18 +02:00
492 lines
13 KiB
Go
492 lines
13 KiB
Go
// Copyright 2024 The Gitea Authors. All rights reserved.
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
package common
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
|
|
"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"
|
|
)
|
|
|
|
func TestCompareRouters(t *testing.T) {
|
|
kases := []struct {
|
|
router string
|
|
compareRouter *CompareRouter
|
|
}{
|
|
{
|
|
router: "",
|
|
compareRouter: &CompareRouter{
|
|
BaseOriRef: "",
|
|
HeadOriRef: "",
|
|
DotTimes: 3,
|
|
},
|
|
},
|
|
{
|
|
router: "main...develop",
|
|
compareRouter: &CompareRouter{
|
|
BaseOriRef: "main",
|
|
HeadOriRef: "develop",
|
|
DotTimes: 3,
|
|
},
|
|
},
|
|
{
|
|
router: "main..develop",
|
|
compareRouter: &CompareRouter{
|
|
BaseOriRef: "main",
|
|
HeadOriRef: "develop",
|
|
DotTimes: 2,
|
|
},
|
|
},
|
|
{
|
|
router: "main^...develop",
|
|
compareRouter: &CompareRouter{
|
|
BaseOriRef: "main",
|
|
HeadOriRef: "develop",
|
|
CaretTimes: 1,
|
|
DotTimes: 3,
|
|
},
|
|
},
|
|
{
|
|
router: "main^^^^^...develop",
|
|
compareRouter: &CompareRouter{
|
|
BaseOriRef: "main",
|
|
HeadOriRef: "develop",
|
|
CaretTimes: 5,
|
|
DotTimes: 3,
|
|
},
|
|
},
|
|
{
|
|
router: "develop",
|
|
compareRouter: &CompareRouter{
|
|
HeadOriRef: "develop",
|
|
DotTimes: 3,
|
|
},
|
|
},
|
|
{
|
|
router: "lunny/forked_repo:develop",
|
|
compareRouter: &CompareRouter{
|
|
HeadOwnerName: "lunny",
|
|
HeadRepoName: "forked_repo",
|
|
HeadOriRef: "develop",
|
|
DotTimes: 3,
|
|
},
|
|
},
|
|
{
|
|
router: "main...lunny/forked_repo:develop",
|
|
compareRouter: &CompareRouter{
|
|
BaseOriRef: "main",
|
|
HeadOwnerName: "lunny",
|
|
HeadRepoName: "forked_repo",
|
|
HeadOriRef: "develop",
|
|
DotTimes: 3,
|
|
},
|
|
},
|
|
{
|
|
router: "main...lunny/forked_repo:develop",
|
|
compareRouter: &CompareRouter{
|
|
BaseOriRef: "main",
|
|
HeadOwnerName: "lunny",
|
|
HeadRepoName: "forked_repo",
|
|
HeadOriRef: "develop",
|
|
DotTimes: 3,
|
|
},
|
|
},
|
|
{
|
|
router: "main^...lunny/forked_repo:develop",
|
|
compareRouter: &CompareRouter{
|
|
BaseOriRef: "main",
|
|
HeadOwnerName: "lunny",
|
|
HeadRepoName: "forked_repo",
|
|
HeadOriRef: "develop",
|
|
DotTimes: 3,
|
|
CaretTimes: 1,
|
|
},
|
|
},
|
|
{
|
|
router: "v1.0...v1.1",
|
|
compareRouter: &CompareRouter{
|
|
BaseOriRef: "v1.0",
|
|
HeadOriRef: "v1.1",
|
|
DotTimes: 3,
|
|
},
|
|
},
|
|
{
|
|
router: "teabot-patch-1...v0.0.1",
|
|
compareRouter: &CompareRouter{
|
|
BaseOriRef: "teabot-patch-1",
|
|
HeadOriRef: "v0.0.1",
|
|
DotTimes: 3,
|
|
},
|
|
},
|
|
{
|
|
router: "teabot:feature1",
|
|
compareRouter: &CompareRouter{
|
|
HeadOwnerName: "teabot",
|
|
HeadOriRef: "feature1",
|
|
DotTimes: 3,
|
|
},
|
|
},
|
|
{
|
|
router: "8eb19a5ae19abae15c0666d4ab98906139a7f439...283c030497b455ecfa759d4649f9f8b45158742e",
|
|
compareRouter: &CompareRouter{
|
|
BaseOriRef: "8eb19a5ae19abae15c0666d4ab98906139a7f439",
|
|
HeadOriRef: "283c030497b455ecfa759d4649f9f8b45158742e",
|
|
DotTimes: 3,
|
|
},
|
|
},
|
|
}
|
|
for _, kase := range kases {
|
|
t.Run(kase.router, func(t *testing.T) {
|
|
r, err := parseCompareRouter(kase.router)
|
|
assert.NoError(t, err)
|
|
assert.EqualValues(t, kase.compareRouter, r)
|
|
})
|
|
}
|
|
}
|
|
|
|
func Test_ParseComparePathParams(t *testing.T) {
|
|
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 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
|
|
}{
|
|
{
|
|
repoName: "repo1",
|
|
router: "",
|
|
compareInfo: &CompareInfo{
|
|
CompareRouter: &CompareRouter{
|
|
BaseOriRef: "master",
|
|
BaseFullRef: git.RefNameFromBranch("master"),
|
|
HeadOriRef: "master",
|
|
HeadFullRef: git.RefNameFromBranch("master"),
|
|
HeadOwnerName: repo1.OwnerName,
|
|
HeadRepoName: repo1.Name,
|
|
DotTimes: 3,
|
|
},
|
|
BaseRepo: repo1,
|
|
HeadUser: repo1.Owner,
|
|
HeadRepo: repo1,
|
|
HeadGitRepo: gitRepo1,
|
|
},
|
|
},
|
|
{
|
|
repoName: "repo1",
|
|
router: "master...branch2",
|
|
compareInfo: &CompareInfo{
|
|
CompareRouter: &CompareRouter{
|
|
BaseOriRef: "master",
|
|
BaseFullRef: git.RefNameFromBranch("master"),
|
|
HeadOriRef: "branch2",
|
|
HeadFullRef: git.RefNameFromBranch("branch2"),
|
|
HeadOwnerName: repo1.OwnerName,
|
|
HeadRepoName: repo1.Name,
|
|
DotTimes: 3,
|
|
},
|
|
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,
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
repoName: "repo1",
|
|
router: "branch2",
|
|
compareInfo: &CompareInfo{
|
|
CompareRouter: &CompareRouter{
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
repoName: "repo10",
|
|
hasClose: true,
|
|
router: "user13/repo11:develop",
|
|
compareInfo: &CompareInfo{
|
|
CompareRouter: &CompareRouter{
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
repoName: "repo11",
|
|
hasClose: true,
|
|
router: "user12/repo10:master",
|
|
compareInfo: &CompareInfo{
|
|
CompareRouter: &CompareRouter{
|
|
BaseOriRef: repo11.DefaultBranch,
|
|
BaseFullRef: git.RefNameFromBranch(repo11.DefaultBranch),
|
|
HeadOwnerName: "user12",
|
|
HeadRepoName: "repo10",
|
|
HeadOriRef: "master",
|
|
HeadFullRef: git.RefNameFromBranch("master"),
|
|
DotTimes: 3,
|
|
},
|
|
BaseRepo: repo11,
|
|
HeadUser: repo10.Owner,
|
|
HeadRepo: repo10,
|
|
HeadGitRepo: gitRepo10,
|
|
},
|
|
},
|
|
{
|
|
repoName: "repo1",
|
|
router: "master...v1.1",
|
|
compareInfo: &CompareInfo{
|
|
CompareRouter: &CompareRouter{
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
repoName: "repo10",
|
|
hasClose: true,
|
|
router: "user13:develop",
|
|
compareInfo: &CompareInfo{
|
|
CompareRouter: &CompareRouter{
|
|
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,
|
|
},
|
|
},
|
|
{
|
|
repoName: "repo1",
|
|
hasClose: true,
|
|
router: "user12/repo10:master",
|
|
compareInfo: &CompareInfo{
|
|
CompareRouter: &CompareRouter{
|
|
BaseOriRef: repo11.DefaultBranch,
|
|
BaseFullRef: git.RefNameFromBranch(repo11.DefaultBranch),
|
|
HeadOwnerName: "user12",
|
|
HeadRepoName: "repo10",
|
|
HeadOriRef: "master",
|
|
HeadFullRef: git.RefNameFromBranch("master"),
|
|
DotTimes: 3,
|
|
},
|
|
BaseRepo: repo1,
|
|
HeadUser: repo10.Owner,
|
|
HeadRepo: repo10,
|
|
HeadGitRepo: gitRepo10,
|
|
},
|
|
},
|
|
}
|
|
|
|
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
|
|
} else if kase.repoName == "repo11" {
|
|
baseRepo = repo11
|
|
baseGitRepo = gitRepo11
|
|
} else {
|
|
t.Fatalf("unknown repo name: %s", kase.router)
|
|
}
|
|
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)
|
|
})
|
|
}
|
|
}
|