Split the unit level from the integration level in cmd, builder, link, catalogue, inventory; cheap fixtures for the archive-entry bound, the registry waits and the catalogue copy (issue 895)
This commit is contained in:
@@ -0,0 +1,52 @@
|
||||
//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)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user