51 lines
1.9 KiB
Go

package mysql
import (
"testing"
"time"
"hyapp/services/wallet-service/internal/domain/ledger"
)
func TestVipActivationWindowReplaceFromNowDropsUpgradeRemainder(t *testing.T) {
nowMS := time.Now().UnixMilli()
durationMS := int64(30 * 24 * time.Hour / time.Millisecond)
current := ledger.UserVip{
Level: 3,
Active: true,
StartedAtMS: nowMS - durationMS,
ExpiresAtMS: nowMS + int64(15*24*time.Hour/time.Millisecond),
}
startedAtMS, expiresAtMS, err := vipActivationWindow(current, ledger.VipLevel{Level: 4, DurationMS: durationMS}, ledger.VipExpiryPolicyReplaceFromNow, nowMS)
if err != nil {
t.Fatalf("vipActivationWindow failed: %v", err)
}
if startedAtMS != nowMS || expiresAtMS != nowMS+durationMS {
t.Fatalf("higher Fami VIP must replace from now: started=%d expires=%d now=%d duration=%d", startedAtMS, expiresAtMS, nowMS, durationMS)
}
}
func TestVipActivationWindowKeepsSameLevelRenewalAndLegacyUpgrade(t *testing.T) {
nowMS := time.Now().UnixMilli()
durationMS := int64(7 * 24 * time.Hour / time.Millisecond)
current := ledger.UserVip{Level: 3, Active: true, StartedAtMS: nowMS - durationMS, ExpiresAtMS: nowMS + durationMS}
for _, testCase := range []struct {
name string
level int32
policy string
}{
{name: "same level in P1", level: 3, policy: ledger.VipExpiryPolicyReplaceFromNow},
{name: "legacy upgrade", level: 4, policy: ledger.VipExpiryPolicyExtendRemaining},
} {
t.Run(testCase.name, func(t *testing.T) {
startedAtMS, expiresAtMS, err := vipActivationWindow(current, ledger.VipLevel{Level: testCase.level, DurationMS: durationMS}, testCase.policy, nowMS)
if err != nil {
t.Fatalf("vipActivationWindow failed: %v", err)
}
if startedAtMS != current.StartedAtMS || expiresAtMS != current.ExpiresAtMS+durationMS {
t.Fatalf("renew/legacy must extend remaining time: started=%d expires=%d", startedAtMS, expiresAtMS)
}
})
}
}