47 lines
1.4 KiB
Go
47 lines
1.4 KiB
Go
package seatlist
|
|
|
|
import (
|
|
"encoding/json"
|
|
"testing"
|
|
|
|
"github.com/nats-io/nats.go/jetstream"
|
|
)
|
|
|
|
type hubStub map[string]func(jetstream.Msg)
|
|
|
|
func (h hubStub) Handle(pattern string, f func(jetstream.Msg)) error { h[pattern] = f; return nil }
|
|
|
|
type msgStub struct {
|
|
jetstream.Msg
|
|
data []byte
|
|
acked *int
|
|
}
|
|
|
|
func (m msgStub) Data() []byte { return m.data }
|
|
func (m msgStub) Ack() error { *m.acked++; return nil }
|
|
|
|
func TestAProcessBusAsksByKeyAndHearsTheSeatsEventsOnTheHub(t *testing.T) {
|
|
var asked string
|
|
hub := hubStub{}
|
|
bus := ProcessBus(func(key string, body any) (json.RawMessage, error) { asked = key; return json.RawMessage(`{}`), nil }, hub)
|
|
if _, err := bus.Ask(Key(), nil); err != nil || asked != Key() {
|
|
t.Fatalf("asked %q, %v", asked, err)
|
|
}
|
|
var got []string
|
|
if err := bus.Subscribe(Pattern(ChangedEvent), func(key string, body json.RawMessage) error { got = append(got, key+" "+string(body)); return nil }); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
h := hub["mesh.seat."+Seat+".event."+ChangedEvent]
|
|
if h == nil {
|
|
t.Fatalf("handlers on %v, want the seat's own subject", hub)
|
|
}
|
|
acked := 0
|
|
h(msgStub{data: []byte(`{"seat":"x"}`), acked: &acked})
|
|
if len(got) != 1 || got[0] != Pattern(ChangedEvent)+` {"seat":"x"}` || acked != 1 {
|
|
t.Errorf("heard %v, acked %d", got, acked)
|
|
}
|
|
if err := bus.Subscribe("nodot", nil); err == nil {
|
|
t.Error("a pattern that names no seat event was taken")
|
|
}
|
|
}
|