Builds: design 47 G A-115, A-127 Claude-Session: https://claude.ai/code/session_01NcbgfGKaxw984XyAPfLm4h
48 lines
1.6 KiB
Go
48 lines
1.6 KiB
Go
package catalogue
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
)
|
|
|
|
func strSliceEqual(a, b []string) bool {
|
|
if len(a) != len(b) {
|
|
return false
|
|
}
|
|
for i := range a {
|
|
if a[i] != b[i] {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
// Design 47 G A-115, A-127: `serves` is a field of the process beside its bus; inside the bus it is refused.
|
|
func TestProcessServesIsReadBesideTheBusAndRefusedInsideIt(t *testing.T) {
|
|
if err := json.Unmarshal([]byte(`{"serves":["seat:mesh-broker.list"]}`), &ProcessBus{}); err == nil {
|
|
t.Error("a serves inside bus was accepted")
|
|
}
|
|
if err := json.Unmarshal([]byte(`{"holds":["x"]}`), &ProcessBus{}); err == nil {
|
|
t.Error("an unknown key was accepted")
|
|
}
|
|
m := Manifest{Module: "nats", Resources: []map[string]any{
|
|
{"id": "keeper", "type": "process", "serves": []any{"seat:mesh-broker.snapshot-get", "seat:mesh-broker.list"},
|
|
"bus": map[string]any{"keeps": true}},
|
|
{"id": "plain", "type": "process", "serves": []any{"seat:mesh-broker.snapshot-remove"}},
|
|
{"id": "mute", "type": "process"},
|
|
}}
|
|
got := m.ProcessServes()
|
|
if !strSliceEqual(got["keeper"], []string{"seat:mesh-broker.snapshot-get", "seat:mesh-broker.list"}) ||
|
|
!strSliceEqual(got["plain"], []string{"seat:mesh-broker.snapshot-remove"}) || len(got) != 2 {
|
|
t.Errorf("process serves = %v", got)
|
|
}
|
|
accounts := m.BusAccounts()
|
|
if len(accounts) != 1 || !strSliceEqual(accounts[0].Serves, got["keeper"]) {
|
|
t.Errorf("the bus account's serves = %+v", accounts)
|
|
}
|
|
bad := Manifest{Resources: []map[string]any{{"id": "x", "type": "process", "serves": "seat:a.b"}}}
|
|
if _, err := ProcessServesOf(bad.Resources[0]); err == nil {
|
|
t.Error("a serves that is not a list was accepted")
|
|
}
|
|
}
|