Files
go-sip/internal/contract/event_mq_test.go
T

48 lines
1.4 KiB
Go

package contract
import (
"encoding/json"
"testing"
"time"
"git.ipao.vip/rogee/go-sip/contracts"
)
func TestMQEventBuilderUsesStrictDispatcherEnvelope(t *testing.T) {
raw, err := contracts.Files.ReadFile("upstream/" + MQSourceCommit + "/examples/event-command-result.json")
if err != nil {
t.Fatal(err)
}
var event EventEnvelope
if err := json.Unmarshal(raw, &event); err != nil {
t.Fatal(err)
}
builder := EventBuilder{TenantID: event.TenantID, TenantKey: event.TenantKey, TraceID: event.TraceID, EventType: event.EventType, Aggregate: event.AggregateType, AggregateID: event.AggregateID, Version: event.AggregateVersion, Payload: event.Payload}
now, err := time.Parse(time.RFC3339Nano, event.OccurredAt)
if err != nil {
t.Fatal(err)
}
const id = "11111111-1111-4111-8111-111111111111"
result, err := builder.MarshalMQ(id, now, event.EventID)
if err != nil {
t.Fatal(err)
}
if err := ValidateMQMessage(result); err != nil {
t.Fatal(err)
}
var values map[string]any
if err := json.Unmarshal(result, &values); err != nil {
t.Fatal(err)
}
if values["schema_version"] != "2.0" || values["dispatcher_id"] != id {
t.Fatal("missing v2 identity")
}
if _, err := builder.MarshalMQ("", now, event.EventID); err == nil {
t.Fatal("missing dispatcher accepted")
}
builder.Payload["unexpected"] = true
if _, err := builder.MarshalMQ(id, now, event.EventID); err == nil {
t.Fatal("unknown payload field accepted")
}
}