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 { } }