Issue 1585, S19: the strict parser, every manifest problem function and the judge's tables (192 declarations, about 5,200 lines) and their 244 tests leave; composition keeps its own refusals and the helpers it uses. The catalogue's tests decode the manifests they build. ParseManifest, ParseManifestWith, ParseManifestForInputs, CatalogueProblems and the rest are gone; mesh-delivery-indexer/judge holds them. Claude-Session: https://claude.ai/code/session_01NcbgfJ9Gum47zkFKWRaovL
25 lines
1.0 KiB
Go
25 lines
1.0 KiB
Go
package catalogue
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// 1279/AC4 (ADR 0443 §4): no module is given a way to ask where its consumer starts. A consumes entry is an event's
|
|
// name; one that carries a key asking for the stream's history is refused by name, so the safe start is the only one.
|
|
func TestAConsumesEntryAskingWhereItStartsIsRefused(t *testing.T) { // 1279/AC4
|
|
for _, key := range []string{"from", "start", "deliver"} {
|
|
raw := `{"module":"audit","version":"1","consumes":[{"event":"shop.order.placed","` + key + `":"beginning"}]}`
|
|
_, err := decodeForTest([]byte(raw))
|
|
if err == nil {
|
|
t.Fatalf("a consumes entry with %q was accepted", key)
|
|
}
|
|
if !strings.Contains(err.Error(), `"`+key+`"`) || !strings.Contains(err.Error(), "consumes") {
|
|
t.Errorf("the refusal for %q does not name the key and the field: %v", key, err)
|
|
}
|
|
}
|
|
if _, err := decodeForTest([]byte(`{"module":"audit","version":"1","consumes":["shop.order.placed"]}`)); err != nil {
|
|
t.Errorf("a plain consumes entry was refused: %v", err)
|
|
}
|
|
}
|