51 lines
1.9 KiB
Go
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)
|
|
}
|
|
})
|
|
}
|
|
}
|