gitea/routers/common/compare_test.go
2024-12-24 21:52:13 -08:00

330 lines
7.3 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/gitrepo"
"github.com/stretchr/testify/assert"
)
func TestCompareRouters(t *testing.T) {
kases := []struct {
router string
compareRouter *CompareRouter
}{
{
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) {
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, err)
defer baseGitRepo.Close()
kases := []struct {
router string
compareInfo *CompareInfo
}{
{
router: "main...develop",
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",
DotTimes: 3,
},
BaseRepo: baseRepo,
},
},
{
router: "main...lunny/forked_repo:develop",
compareInfo: &CompareInfo{
CompareRouter: &CompareRouter{
BaseOriRef: "main",
HeadOwnerName: "lunny",
HeadRepoName: "forked_repo",
HeadOriRef: "develop",
DotTimes: 3,
},
},
},
{
router: "main...lunny/forked_repo:develop",
compareInfo: &CompareInfo{
CompareRouter: &CompareRouter{
BaseOriRef: "main",
HeadOwnerName: "lunny",
HeadRepoName: "forked_repo",
HeadOriRef: "develop",
DotTimes: 3,
},
},
},
{
router: "main^...lunny/forked_repo:develop",
compareInfo: &CompareInfo{
CompareRouter: &CompareRouter{
BaseOriRef: "main",
HeadOwnerName: "lunny",
HeadRepoName: "forked_repo",
HeadOriRef: "develop",
DotTimes: 3,
CaretTimes: 1,
},
},
},
{
router: "v1.0...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",
DotTimes: 3,
},
},
},
{
router: "8eb19a5ae19abae15c0666d4ab98906139a7f439...283c030497b455ecfa759d4649f9f8b45158742e",
compareInfo: &CompareInfo{
CompareRouter: &CompareRouter{
BaseOriRef: "8eb19a5ae19abae15c0666d4ab98906139a7f439",
HeadOriRef: "283c030497b455ecfa759d4649f9f8b45158742e",
DotTimes: 3,
},
},
},
}
for _, kase := range kases {
t.Run(kase.router, func(t *testing.T) {
r, err := ParseComparePathParams(context.Background(), kase.router, baseRepo, baseGitRepo)
assert.NoError(t, err)
assert.EqualValues(t, kase.compareInfo, r)
})
}
}