94 lines
2.6 KiB
Go

package wallet
import (
"context"
"strings"
"testing"
"hyapp/pkg/xerr"
"hyapp/services/wallet-service/internal/domain/ledger"
)
// TestVipCommandStorageLengthsFailBeforeRepository keeps external strings within the VARCHAR
// boundaries used by transactions, outbox and entitlement identifiers; violations must be 4xx,
// never a MySQL data-too-long error surfaced as 5xx.
func TestVipCommandStorageLengthsFailBeforeRepository(t *testing.T) {
service := New(nil)
testCases := []struct {
name string
run func() error
}{
{
name: "purchase command id",
run: func() error {
_, err := service.PurchaseVip(context.Background(), ledger.PurchaseVipCommand{
CommandID: strings.Repeat("x", 129), UserID: 1, Level: 1,
})
return err
},
},
{
name: "direct grant command id",
run: func() error {
_, err := service.GrantVip(context.Background(), ledger.GrantVipCommand{
CommandID: strings.Repeat("x", 129), TargetUserID: 1, Level: 1,
GrantSource: ledger.VipGrantSourceAdmin, OperatorUserID: 1,
})
return err
},
},
{
name: "equip request id",
run: func() error {
_, _, err := service.EquipVipTrialCard(context.Background(), ledger.EquipVipTrialCardCommand{
RequestID: strings.Repeat("x", 129), UserID: 1, EntitlementID: "ent-1",
})
return err
},
},
{
name: "equip entitlement id",
run: func() error {
_, _, err := service.EquipVipTrialCard(context.Background(), ledger.EquipVipTrialCardCommand{
RequestID: "req-1", UserID: 1, EntitlementID: strings.Repeat("x", 97),
})
return err
},
},
{
name: "unequip request id",
run: func() error {
_, _, err := service.UnequipVipTrialCard(context.Background(), ledger.UnequipVipTrialCardCommand{
RequestID: strings.Repeat("x", 129), UserID: 1,
})
return err
},
},
{
name: "rebate claim command id",
run: func() error {
_, err := service.ClaimVipDailyCoinRebate(context.Background(), ledger.ClaimVipDailyCoinRebateCommand{
CommandID: strings.Repeat("x", 129), UserID: 1, RebateID: "vip_rebate_1",
})
return err
},
},
{
name: "rebate id",
run: func() error {
_, err := service.ClaimVipDailyCoinRebate(context.Background(), ledger.ClaimVipDailyCoinRebateCommand{
CommandID: "claim-rebate", UserID: 1, RebateID: strings.Repeat("x", 97),
})
return err
},
},
}
for _, testCase := range testCases {
t.Run(testCase.name, func(t *testing.T) {
if err := testCase.run(); !xerr.IsCode(err, xerr.InvalidArgument) {
t.Fatalf("oversized VIP identifier must be invalid argument, got %v", err)
}
})
}
}