89 lines
2.7 KiB
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)
|
|
}
|
|
}
|
|
}
|