//go:build integration package main import ( "testing" "github.com/novox/mesh-controller/internal/catalogue" "github.com/novox/mesh-controller/internal/inventory" "github.com/novox/mesh-controller/internal/link" ) func TestAPlanStandingStillIsNotSavedAgain(t *testing.T) { open := aMesh(t) ctx := t.Context() inv := open.inventory asked := asksRecorded(t) if err := inv.RegisterModule(ctx, catalogue.Manifest{Module: "app", Version: "1"}, inventory.Source{Repository: "novox/mesh-catalog", Seat: "git", Path: "modules/app", Ref: "main", BuiltFrom: "c0", Head: "c0"}); err != nil { t.Fatal(err) } m := link.SourceMoved{Owner: "novox", Repo: "mesh-catalog", Base: "main", Commit: "c1aaaaaaaa", Paths: []string{"modules/app/index.ts"}, ModuleDirs: []string{"modules/app"}, ModuleDirsSaid: true} if err := (following{open: open}).SourceMoved(ctx, m); err != nil { t.Fatal(err) } advanceHeld(ctx, open) recent, err := inv.RecentPlans(ctx, 1) if err != nil || len(recent) != 1 || len(*asked) != 1 { t.Fatalf("no plan building: %v %v, asked %v", recent, err, *asked) } before := recent[0] if before.State != inventory.PlanBuilding || before.Modules["app"] == nil || before.Modules["app"].State != "asked" { t.Fatalf("the plan is not waiting on its build: %+v", before) } for range 3 { advanceHeld(ctx, open) } after, err := inv.PlanByID(ctx, before.ID) if err != nil { t.Fatal(err) } if after.Revision != before.Revision || !after.Updated.Equal(before.Updated) { t.Fatalf("a plan that did not move was saved again: revision %d → %d, saved %s → %s", before.Revision, after.Revision, before.Updated, after.Updated) } if len(*asked) != 1 { t.Fatalf("advancing asked again: %v", *asked) } }