package planhands import ( "os" "path/filepath" "strings" "testing" ) // A line that takes a plan existing for its module handed is refused and named; one that asks Hands, one marked "not // handing" and any test file pass; and the real catalogue is clean. func TestNoModuleTakesAPlanExistingForItsModuleHanded(t *testing.T) { root := t.TempDir() for f, body := range map[string]string{ "modules/vault/own.go": "if a.Provisioning != nil {\n", "modules/client/plan.go": "if len(a.Provisioning) == 0 {\n", "modules/vault/rule.go": "return a.Provisioning != nil && a.Provisioning.Hands(), nil\n", "modules/client/binds.go": "if a.Provisioning != nil { // binds, not handing\n", "modules/vault/own_test.go": "if a.Provisioning == nil {\n", "modules/client/notgo/plan.md": "if a.Provisioning == nil {\n", } { p := filepath.Join(root, f) if err := os.MkdirAll(filepath.Dir(p), 0o755); err != nil { t.Fatal(err) } if err := os.WriteFile(p, []byte(body), 0o644); err != nil { t.Fatal(err) } } got, err := Problems(root) if err != nil { t.Fatal(err) } if len(got) != 2 || !strings.HasPrefix(got[0], "modules/client/plan.go:1:") || !strings.HasPrefix(got[1], "modules/vault/own.go:1:") { t.Fatalf("refused %v, wanted the client's and the vault's existence tests alone", got) } real, err := Problems(filepath.Join("..", "..")) if err != nil { t.Fatal(err) } if len(real) > 0 { t.Errorf("a module takes a plan existing for its module handed; ask catalogue.Plan.Hands, or mark a line that reads "+ "only who binds whom \"not handing\":\n%s", strings.Join(real, "\n")) } }