package catalogue import ( "strings" "testing" ) // A manifest may say which tools its module calls (novox/hq ADR 0152), and the parser accepts the // two shapes the grant has: a named tool, and every tool. func TestAManifestMaySayWhatItInvokes(t *testing.T) { m, err := ParseManifest([]byte(`{"module":"mesh-console","version":"1",` + `"invokes":["mesh-catalog.catalog_modules","*"]}`)) if err != nil { t.Fatal(err) } if len(m.Invokes) != 2 || m.Invokes[1] != "*" { t.Fatalf("invokes not read: %v", m.Invokes) } } // An entry that names a module and no tool is refused at parse, in the manifest's words, rather than // at the composition of the bus's user list where it would stop the file for everybody. func TestAnInvokeThatNamesNoToolIsRefusedAtParse(t *testing.T) { _, err := ParseManifest([]byte(`{"module":"mesh-console","version":"1","invokes":["shop"]}`)) if err == nil { t.Fatal("an invoke naming no tool was accepted") } if !strings.Contains(err.Error(), `invokes "shop", which does not name a tool`) { t.Fatalf("refused for the wrong reason: %v", err) } }