53 lines
2.2 KiB
Go
53 lines
2.2 KiB
Go
//go:build integration
|
|
|
|
package main
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/novox/mesh-controller/internal/inventory"
|
|
)
|
|
|
|
func TestRelatedOpenNamesTheFirstOpenWalkAChangeIsRelatedTo(t *testing.T) {
|
|
edges := []inventory.Edge{{From: "nzbget", To: "base-image", Kind: inventory.EdgeStandsOn}}
|
|
walk := func(id, repo string, own bool, modules ...string) openWalk {
|
|
return openWalk{id: id, fp: footprintOfWalk(walkOf(repo, modules...), nil), own: own}
|
|
}
|
|
one, two := walk("plan-1", "novox/one", false, "notes"), walk("plan-2", "novox/two", false, "nzbget")
|
|
cand := func(repo, head string, moves ...string) footprint {
|
|
return footprintOfBatch([]inventory.BatchedMerge{heardMerge(repo, head, moves...)}, edges)
|
|
}
|
|
cases := []struct {
|
|
name string
|
|
fp footprint
|
|
own bool
|
|
open []openWalk
|
|
behind string
|
|
why string
|
|
}{
|
|
{"nothing open", cand("novox/x", "fix/a", "app"), false, nil, "", ""},
|
|
{"unrelated to every open walk", cand("novox/x", "fix/a", "app"), false, []openWalk{one, two}, "", ""},
|
|
{"a repository", cand("novox/ONE", "fix/a", "app"), false, []openWalk{two, one}, "plan-1", "both change novox/one"},
|
|
{"a module through its dependents", cand("novox/x", "fix/a", "base-image"), false, []openWalk{one, two},
|
|
"plan-2", "both move nzbget"},
|
|
{"a graph edge", cand("novox/x", "fix/a", "nzbget"),
|
|
false, []openWalk{one, walk("plan-3", "novox/y", false, "base-image")}, "plan-3",
|
|
"nzbget depends on base-image (stands-on)"},
|
|
{"moves not known", cand("novox/x", "fix/a"), false, []openWalk{one, two}, "plan-1",
|
|
"the modules a merge of novox/x moves are not known until its batch is cut"},
|
|
{"the candidate on the own path", cand("novox/x", "fix/a", "app"), true, []openWalk{one}, "plan-1",
|
|
"it is on the controller's own path"},
|
|
{"an open walk on the own path", cand("novox/x", "fix/a", "app"), false,
|
|
[]openWalk{one, walk("plan-4", "novox/mesh-controller", true, "mesh-controller")}, "plan-4",
|
|
"plan-4 is on the controller's own path"},
|
|
}
|
|
for _, c := range cases {
|
|
t.Run(c.name, func(t *testing.T) {
|
|
behind, why := relatedOpen(c.fp, c.own, c.open, edges)
|
|
if behind != c.behind || why != c.why {
|
|
t.Errorf("relatedOpen = %q, %q; want %q, %q", behind, why, c.behind, c.why)
|
|
}
|
|
})
|
|
}
|
|
}
|