hyapp-server/services/activity-service/internal/app/wallet_events_first_recharge_test.go
2026-06-26 22:14:11 +08:00

63 lines
2.4 KiB
Go
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

package app
import (
"testing"
"hyapp/pkg/walletmq"
firstrechargedomain "hyapp/services/activity-service/internal/domain/firstrecharge"
)
func TestFirstRechargeEventFromWalletMessageSkipsNonGoogleRecharge(t *testing.T) {
// 币商充值是合法钱包事实,但它没有 Google 商品 ID首充 consumer 必须确认后跳过,避免 MQ 持续重投。
body, err := walletmq.EncodeWalletOutboxMessage(walletmq.WalletOutboxMessage{
AppCode: "lalu",
EventID: "wev-coin-seller",
EventType: firstrechargedomain.RechargeEventWalletRecorded,
TransactionID: "wtx-coin-seller",
CommandID: "coin-seller-transfer-1",
UserID: 42001,
AssetType: "COIN",
AvailableDelta: 10000,
PayloadJSON: `{"recharge_type":"coin_seller_transfer","amount":10000,"recharge_sequence":1}`,
OccurredAtMS: 1710000000000,
})
if err != nil {
t.Fatalf("EncodeWalletOutboxMessage failed: %v", err)
}
event, ok, err := firstRechargeEventFromWalletMessage(body)
if err != nil {
t.Fatalf("firstRechargeEventFromWalletMessage returned error for non-google recharge: %v", err)
}
if ok || event.EventID != "" {
t.Fatalf("non-google recharge should be acknowledged without first-recharge handling, ok=%v event=%+v", ok, event)
}
}
func TestFirstRechargeEventFromWalletMessageKeepsGoogleRecharge(t *testing.T) {
// Google 充值仍按商品 ID 进入首充奖励链路,缺商品字段应由 wallet outbox 事实修正,而不是泛化吞掉。
body, err := walletmq.EncodeWalletOutboxMessage(walletmq.WalletOutboxMessage{
AppCode: "lalu",
EventID: "wev-google",
EventType: firstrechargedomain.RechargeEventWalletRecorded,
TransactionID: "wtx-google",
CommandID: "google-pay-1",
UserID: 42001,
AssetType: "COIN",
AvailableDelta: 160000,
PayloadJSON: `{"recharge_type":"google","google_product_id":"coins_160000","recharge_usd_minor":199,"recharge_sequence":1}`,
OccurredAtMS: 1710000000000,
})
if err != nil {
t.Fatalf("EncodeWalletOutboxMessage failed: %v", err)
}
event, ok, err := firstRechargeEventFromWalletMessage(body)
if err != nil {
t.Fatalf("firstRechargeEventFromWalletMessage returned error: %v", err)
}
if !ok || event.RechargeType != "google" || event.GoogleProductID != "coins_160000" {
t.Fatalf("google recharge should be routed to first-recharge handling, ok=%v event=%+v", ok, event)
}
}