autogits/workflow-direct/links_test.go
2025-03-07 17:40:59 +01:00

115 lines
2.7 KiB
Go

package main
import (
"strings"
"testing"
)
func TestLinkParsing(t *testing.T) {
tests := []struct {
name string
data []byte
links []*OrgLinks
expected_err string
}{
{
name: "No links file",
},
{
name: "Empty links file",
data: []byte("[]"),
},
{
name: "Single package linked",
data: []byte(`[{"Source": "pool/foo", "Target": "pkg"}]`),
links: []*OrgLinks{
&OrgLinks{
Source: "pool/foo",
Target: "pkg",
},
},
},
{
name: "Multiple packages linked, resorted",
data: []byte(`[{"Source": "pool/foo", "Target": "pkg"}, {"Source": "pool/abc", "Target": "abc"}, {"Source": "abc/aaa", "Target": "zzz"}]`),
links: []*OrgLinks{
&OrgLinks{
Source: "pool/abc",
Target: "abc",
},
&OrgLinks{
Source: "pool/foo",
Target: "pkg",
},
&OrgLinks{
Source: "abc/aaa",
Target: "zzz",
},
},
},
{
name: "Broken source file",
data: []byte(`[{"Source": "pool/foo"}, Source": "pool/abc", "Target": "abc"}, {"Source": "abc/aaa", "Target": "zzz"}]`),
expected_err: "invalid character 'S' looking for beginning of value",
},
{
name: "Missing target",
data: []byte(`[{"Source": "abc/aaa"}]`),
expected_err: "Missing Target for Source link: abc/aaa",
},
{
name: "Bad source link",
data: []byte(`[{"Source": "abc"}]`),
expected_err: "Invalid Source: abc",
},
{
name: "Bad source link",
data: []byte(`[{"Source": "/foo"}]`),
expected_err: "Invalid Source: /foo",
},
{
name: "Bad source link",
data: []byte(`[{"Source": "foo/"}]`),
expected_err: "Invalid Source: foo/",
},
}
for _, test := range tests {
t.Run(test.name, func(t *testing.T) {
res, err := ParseProjectLinks(test.data)
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()
}{
{
name: "no-op update",
},
}
for _, test := range tests {
}
}