Files

54 lines
1.5 KiB
Go

package store
import (
"testing"
"time"
"git.ipao.vip/rogee/go-sip/contracts"
"git.ipao.vip/rogee/go-sip/internal/contract"
"git.ipao.vip/rogee/go-sip/internal/mq"
"git.ipao.vip/rogee/go-sip/internal/tenant"
)
func TestExecuteMQPersistsScopedV2Receipt(t *testing.T) {
s, err := Open(":memory:")
if err != nil {
t.Fatal(err)
}
defer s.Close()
s.now = func() time.Time { return time.Date(2026, 9, 21, 0, 0, 1, 0, time.UTC) }
if err := s.BindDispatcherID(identityA); err != nil {
t.Fatal(err)
}
raw, err := contracts.Files.ReadFile("upstream/v1/examples/call-execute.json")
if err != nil {
t.Fatal(err)
}
route, err := tenant.NewDispatcherRoute(identityA, "tenant-a")
if err != nil {
t.Fatal(err)
}
if _, err := s.IngestCommand(raw, route.InboundKey); err != nil {
t.Fatal(err)
}
var exchange, key string
var body []byte
if err := s.DB().QueryRow(`SELECT exchange,routing_key,body FROM outbox`).Scan(&exchange, &key, &body); err != nil {
t.Fatal(err)
}
if exchange != mq.EventExchange || key != route.OutboundKey {
t.Fatal("receipt does not target this Dispatcher and tenant")
}
if err := contract.ValidateMQMessage(body); err != nil {
t.Fatal(err)
}
duplicate, err := s.IngestCommand(raw, route.InboundKey)
if err != nil || !duplicate.Duplicate {
t.Fatalf("duplicate: %+v %v", duplicate, err)
}
other, _ := tenant.NewDispatcherRoute(identityB, "tenant-a")
if _, err := s.IngestCommand(raw, other.InboundKey); err == nil {
t.Fatal("foreign Dispatcher route accepted")
}
}