hyapp-server/pkg/walletmq/messages_test.go

89 lines
2.7 KiB
Go

package walletmq
import (
"strings"
"testing"
)
func TestWalletOutboxMessageRoundTrip(t *testing.T) {
encoded, err := EncodeWalletOutboxMessage(WalletOutboxMessage{
AppCode: "lalu",
EventID: "event-1",
EventType: "WalletRechargeRecorded",
TransactionID: "tx-1",
CommandID: "cmd-1",
UserID: 1001,
AssetType: "COIN",
AvailableDelta: 100,
PayloadJSON: `{"recharge_sequence":1}`,
OccurredAtMS: 1_700_000_000_000,
})
if err != nil {
t.Fatalf("EncodeWalletOutboxMessage failed: %v", err)
}
decoded, err := DecodeWalletOutboxMessage(encoded)
if err != nil {
t.Fatalf("DecodeWalletOutboxMessage failed: %v", err)
}
if decoded.MessageType != MessageTypeWalletOutboxEvent || decoded.EventID != "event-1" || decoded.PayloadJSON == "" {
t.Fatalf("decoded message mismatch: %+v", decoded)
}
}
func TestEventTypeTagUsesExactTrimmedEventType(t *testing.T) {
tag, err := EventTypeTag(" WalletRechargeRecorded ")
if err != nil {
t.Fatalf("EventTypeTag failed: %v", err)
}
if tag != EventTypeWalletRechargeRecorded {
t.Fatalf("event tag = %q, want %q", tag, EventTypeWalletRechargeRecorded)
}
for _, invalid := range []string{"", TagWalletOutboxEvent, "Wallet RechargeRecorded", "WalletRechargeRecorded || *", "Wallet.RechargeRecorded"} {
if _, err := EventTypeTag(invalid); err == nil {
t.Fatalf("EventTypeTag(%q) unexpectedly succeeded", invalid)
}
}
}
func TestLegacyCompatibleTagExpressionIsDeterministicAndDeduplicated(t *testing.T) {
first, err := LegacyCompatibleTagExpression(
EventTypeWalletGiftDebited,
EventTypeWalletRechargeRecorded,
EventTypeWalletGiftDebited,
)
if err != nil {
t.Fatalf("LegacyCompatibleTagExpression failed: %v", err)
}
second, err := LegacyCompatibleTagExpression(
EventTypeWalletRechargeRecorded,
EventTypeWalletGiftDebited,
)
if err != nil {
t.Fatalf("LegacyCompatibleTagExpression failed: %v", err)
}
if first != second {
t.Fatalf("expressions differ by input order: first=%q second=%q", first, second)
}
want := TagWalletOutboxEvent + " || " + EventTypeWalletGiftDebited + " || " + EventTypeWalletRechargeRecorded
if first != want {
t.Fatalf("expression = %q, want %q", first, want)
}
if strings.Count(first, EventTypeWalletGiftDebited) != 1 {
t.Fatalf("typed tag was not deduplicated: %q", first)
}
}
func TestLegacyCompatibleTagExpressionRejectsUnsafeOrMissingTypedTags(t *testing.T) {
for _, eventTypes := range [][]string{
nil,
{TagWalletOutboxEvent},
{"WalletRechargeRecorded || *"},
} {
if _, err := LegacyCompatibleTagExpression(eventTypes...); err == nil {
t.Fatalf("LegacyCompatibleTagExpression(%v) unexpectedly succeeded", eventTypes)
}
}
}