// Package gitfixture reads the seat git's own fixtures (contracts/seats/git/fixtures/verbs.json), so the bridge's unit // fakes answer what the seat's holder answers and nothing the contract does not say (design 47 *The seat `git`*). package gitfixture import ( "encoding/json" "os" "path/filepath" "runtime" "testing" ) // All is every fixture's body named name of of (such as "file answers", "verb:file.answer"), in the file's order; a // name with none fails the test. func All(t testing.TB, name, of string) []json.RawMessage { t.Helper() return Seat(t, "git", "verbs", name, of) } // Seat is every fixture's body named name of of in a seat's fixtures file (such as "mesh-delivery", "events"), so the // bridge's fakes of the seats it hears say what those seats say. func Seat(t testing.TB, seat, file, name, of string) []json.RawMessage { t.Helper() _, here, _, _ := runtime.Caller(0) raw, err := os.ReadFile(filepath.Join(filepath.Dir(here), "../../../../contracts/seats", seat, "fixtures", file+".json")) if err != nil { t.Fatal(err) } var all []struct { Name, Of string Given json.RawMessage } if err := json.Unmarshal(raw, &all); err != nil { t.Fatal(err) } var out []json.RawMessage for _, f := range all { if f.Name == name && f.Of == of { out = append(out, f.Given) } } if len(out) == 0 { t.Fatalf("no fixture %q of %s", name, of) } return out } // Given is the first fixture's body named name of of. func Given(t testing.TB, name, of string) json.RawMessage { t.Helper(); return All(t, name, of)[0] }