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") } }