2026-07-13 23:38:32 +08:00

44 lines
1.7 KiB
Go

package app
import (
"context"
"strings"
"testing"
"hyapp/pkg/outboxreplay"
"hyapp/services/wallet-service/internal/config"
)
func TestNormalizeWalletReplayEventTypes(t *testing.T) {
eventTypes, err := NormalizeWalletReplayEventTypes([]string{" GiftConfigChanged ", "WalletBalanceChanged", "GiftConfigChanged"})
if err != nil {
t.Fatalf("NormalizeWalletReplayEventTypes failed: %v", err)
}
if len(eventTypes) != 2 || eventTypes[0] != "GiftConfigChanged" || eventTypes[1] != "WalletBalanceChanged" {
t.Fatalf("normalized event types mismatch: %v", eventTypes)
}
if _, err := NormalizeWalletReplayEventTypes([]string{"bad || tag"}); err == nil {
t.Fatal("expected invalid RocketMQ tag rejection")
}
}
func TestRejectRealtimeReplayEventTypes(t *testing.T) {
if err := rejectRealtimeReplayEventTypes([]string{"GiftConfigChanged"}, []string{"WalletRedPacketCreated"}); err != nil {
t.Fatalf("normal event rejected: %v", err)
}
if err := rejectRealtimeReplayEventTypes([]string{"WalletRedPacketCreated"}, []string{"WalletRedPacketCreated"}); err == nil {
t.Fatal("expected realtime lane rejection")
}
}
func TestWalletReplayRejectsRealtimeTypeWhenLaneIsDisabled(t *testing.T) {
cfg := config.Default()
cfg.RealtimeOutboxWorker.Enabled = false
cfg.RocketMQ.RealtimeOutbox.Enabled = false
cfg.RealtimeOutboxWorker.EventTypes = []string{"WalletRedPacketCreated"}
_, err := ReplayWalletOutboxOnce(context.Background(), cfg, outboxreplay.Scope{AppCode: "huwaa", Limit: 1}, []string{"WalletRedPacketCreated"})
if err == nil || !strings.Contains(err.Error(), "realtime outbox lane") {
t.Fatalf("disabled realtime lane must retain event ownership, err=%v", err)
}
}