SHA256
1
0
forked from adamm/autogits
Files
autogits/workflow-direct/links_test.go
2025-03-13 08:46:21 +01:00

121 lines
3.0 KiB
Go

package main
import (
"strings"
"testing"
"go.uber.org/mock/gomock"
"src.opensuse.org/autogits/common"
mock_common "src.opensuse.org/autogits/common/mock"
)
func TestLinkParsing(t *testing.T) {
tests := []struct {
name string
data []byte
links []*PackageRebaseLink
expected_err string
}{
{
name: "No links file",
},
{
name: "Empty links file",
data: []byte("[]"),
},
{
name: "Single package linked",
data: []byte(`[{"Pkg": "foo"}]`),
links: []*PackageRebaseLink{
&PackageRebaseLink{
Pkg: "foo",
},
},
},
{
name: "Multiple packages linked, resorted",
data: []byte(`[{"Pkg": "foo"}, {"Pkg": "abc"}, {"Pkg": "aaa", "SourceBranch": "q"}]`),
links: []*PackageRebaseLink{
&PackageRebaseLink{
Pkg: "aaa",
SourceBranch: "q",
},
&PackageRebaseLink{
Pkg: "abc",
},
&PackageRebaseLink{
Pkg: "foo",
},
},
},
{
name: "Broken source file",
data: []byte(`[{"Pkg": "pool"}, SourceBranch": "pool", "TargetBranch": "abc"}, {"Pkg": "abc"}]`),
expected_err: "invalid character 'S' looking for beginning of value",
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
ctl := gomock.NewController(t)
gitea_mock := mock_common.NewMockGitea(ctl)
gitea_mock.EXPECT().GetRepositoryFileContent("org", "repo", "branch", common.PrjLinksFile).Return(test.data, "", nil)
res, _, err := ProcessProjectLinks(gitea_mock, "org", "repo", "branch")
if len(test.expected_err) > 0 && err == nil {
t.Error("Expected an error:", test.expected_err, "; but got nothing")
} else if err != nil && len(test.expected_err) == 0 {
t.Fatal("Unexpected error:", err)
} else if err != nil && !strings.Contains(err.Error(), test.expected_err) {
t.Fatal("Expected an error:", test.expected_err, "; but got:", err)
}
if len(res) != len(test.links) {
t.Fatal("len of result", len(res), "vs. expected", len(test.links))
}
// verify that returned data is present and in expected order
for i := range test.links {
if *test.links[i] != *res[i] {
t.Error("index", i, "expected", *test.links[i], "received", *res[i])
}
}
})
}
}
/*
func TestLinkUpdater(t *testing.T) {
tests := []struct {
name string
mock_setup func(*mock_common.MockGit, *mock_common.MockGitea)
link *OrgLinks
}{
{
name: "no-op update",
mock_setup: func(git *mock_common.MockGit, gitea *mock_common.MockGitea) {
git.EXPECT().GitExecWithOutputOrPanic(gomock.Any(), "rev-list", "upstream/main", "^pkg_hash").Return("")
},
link: &OrgLinks{
Pkg: "pkg",
// parentOrg: "rorg",
// parentRepo: "rpkg",
},
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
ctl := gomock.NewController(t)
git := mock_common.NewMockGit(ctl)
gitea := mock_common.NewMockGitea(ctl)
test.mock_setup(git, gitea)
test.link.StateUpdater(git, gitea)
})
}
}
*/