autogits/workflow-pr/maintainership_test.go

133 lines
3.6 KiB
Go
Raw Normal View History

2024-11-27 17:50:55 +01:00
package main
import (
"errors"
2024-12-10 19:03:54 +01:00
"slices"
2024-11-27 17:50:55 +01:00
"testing"
"go.uber.org/mock/gomock"
"src.opensuse.org/autogits/common"
2024-12-09 00:39:55 +01:00
mock_common "src.opensuse.org/autogits/common/mock"
2024-11-27 17:50:55 +01:00
)
func TestMaintainership(t *testing.T) {
2024-11-29 17:33:01 +01:00
config := common.AutogitConfig{
Branch: "bar",
Organization: "foo",
GitProjectName: common.DefaultGitPrj,
}
2024-12-09 18:20:56 +01:00
packageTests := []struct {
2024-12-10 19:03:54 +01:00
name string
maintainersFile []byte
maintainersFileErr error
maintainers []string
otherError bool
2024-12-11 14:41:51 +01:00
packageName string
2024-12-09 18:20:56 +01:00
}{
2024-12-11 14:41:51 +01:00
/* PACKAGE MAINTAINERS */
// package tests have packageName, projects do not
2024-12-09 18:20:56 +01:00
{
name: "No maintainer in empty package",
2024-12-11 14:41:51 +01:00
packageName: "foo",
2024-12-09 18:20:56 +01:00
},
2024-12-10 19:03:54 +01:00
{
name: "Error in MaintainerListForPackage when remote has an error",
maintainersFileErr: errors.New("some error here"),
2024-12-11 14:41:51 +01:00
packageName: "foo",
2024-12-10 19:03:54 +01:00
},
{
name: "Multiple package maintainers",
maintainersFile: []byte(`{"pkg": ["user1", "user2"], "": ["user1", "user3"]}`),
maintainers: []string{"user1", "user2", "user3"},
2024-12-11 14:41:51 +01:00
packageName: "pkg",
2024-12-10 19:03:54 +01:00
},
{
name: "No package maintainers and only project maintainer",
maintainersFile: []byte(`{"pkg2": ["user1", "user2"], "": ["user1", "user3"]}`),
maintainers: []string{"user1", "user3"},
2024-12-11 14:41:51 +01:00
packageName: "pkg",
2024-12-10 19:03:54 +01:00
},
{
name: "Invalid list of package maintainers",
maintainersFile: []byte(`{"pkg": 3,"": ["user", 4]}`),
otherError: true,
2024-12-11 14:41:51 +01:00
packageName: "pkg",
2024-12-10 19:03:54 +01:00
},
2024-11-27 17:50:55 +01:00
2024-12-11 14:41:51 +01:00
/* PROJECT MAINTAINERS */
2024-12-09 18:20:56 +01:00
{
name: "No maintainer for empty project",
},
{
name: "No maintainer for empty project maintainer file",
maintainersFile: []byte("{}"),
},
2024-12-10 19:03:54 +01:00
{
name: "Error in MaintainerListForProject when remote has an error",
maintainersFileErr: errors.New("some error here"),
},
{
name: "Multiple project maintainers",
maintainersFile: []byte(`{"": ["user1", "user2"]}`),
maintainers: []string{"user1", "user2"},
},
{
name: "Single project maintainer",
maintainersFile: []byte(`{"": ["user"]}`),
maintainers: []string{"user"},
},
{
name: "Invalid list of project maintainers",
maintainersFile: []byte(`{"": ["user", 4]}`),
otherError: true,
},
{
name: "Invalid list of project maintainers",
maintainersFile: []byte(`{"": 4}`),
otherError: true,
},
2024-12-09 18:20:56 +01:00
}
2024-11-28 00:15:32 +01:00
2024-12-11 14:41:51 +01:00
for _, test := range packageTests {
2024-12-09 18:20:56 +01:00
t.Run(test.name, func(t *testing.T) {
2024-12-10 19:03:54 +01:00
ctl := gomock.NewController(t)
mi := mock_common.NewMockGiteaMaintainershipInterface(ctl)
2024-11-28 00:15:32 +01:00
2024-12-10 19:03:54 +01:00
mi.EXPECT().FetchMaintainershipFile("foo", common.DefaultGitPrj, "bar").
Return(test.maintainersFile, test.maintainersFileErr)
2024-11-28 00:15:32 +01:00
2024-12-11 14:41:51 +01:00
maintainers, err := FetchProjectMaintainershipData(mi, config.Organization, config.GitProjectName, config.Branch)
2024-12-10 19:03:54 +01:00
if err != nil && !test.otherError {
if test.maintainersFileErr == nil {
t.Fatal("Unexpected error recieved", err)
} else if err != test.maintainersFileErr {
2024-12-11 14:41:51 +01:00
t.Error("Wrong error recieved", err)
2024-12-10 19:03:54 +01:00
}
} else if test.maintainersFileErr != nil {
t.Fatal("Expected an error...")
} else if test.otherError && err == nil {
t.Fatal("Expected an error...")
2024-11-28 17:10:26 +01:00
}
2024-12-11 14:41:51 +01:00
var m []string
if len(test.packageName) > 0 {
m = maintainers.ListPackageMaintainers(test.packageName)
} else {
m = maintainers.ListProjectMaintainers()
2024-11-28 17:10:26 +01:00
}
2024-12-11 14:41:51 +01:00
if len(m) != len(test.maintainers) {
t.Error("Invalid number of maintainers for package", err)
}
2024-12-10 19:03:54 +01:00
for i := range m {
2024-12-11 14:41:51 +01:00
if !slices.Contains(test.maintainers, m[i]) {
t.Fatal("Can't find expected users. Found:", m)
2024-12-10 19:03:54 +01:00
}
2024-11-28 17:10:26 +01:00
}
2024-12-10 19:03:54 +01:00
})
}
2024-12-09 18:20:56 +01:00
}