84 lines
3.0 KiB
Go
84 lines
3.0 KiB
Go
package registerreward
|
|
|
|
import (
|
|
"chatapp3-golang/internal/model"
|
|
"testing"
|
|
"time"
|
|
)
|
|
|
|
func TestDeriveRegisterRewardStatus(t *testing.T) {
|
|
t.Run("old register date defaults to success", func(t *testing.T) {
|
|
record := &model.ResidentRegisterRewardLog{Status: registerRewardStatusSuccess}
|
|
if got := deriveRegisterRewardStatus(record, false, true); got != registerRewardStatusSuccess {
|
|
t.Fatalf("deriveRegisterRewardStatus() = %s, want %s", got, registerRewardStatusSuccess)
|
|
}
|
|
})
|
|
|
|
t.Run("same day register uses log status when present", func(t *testing.T) {
|
|
record := &model.ResidentRegisterRewardLog{Status: registerRewardStatusFailed}
|
|
if got := deriveRegisterRewardStatus(record, true, true); got != registerRewardStatusFailed {
|
|
t.Fatalf("deriveRegisterRewardStatus() = %s, want %s", got, registerRewardStatusFailed)
|
|
}
|
|
})
|
|
|
|
t.Run("same day register falls back to processing when activity enabled", func(t *testing.T) {
|
|
if got := deriveRegisterRewardStatus(nil, true, true); got != registerRewardStatusProcessing {
|
|
t.Fatalf("deriveRegisterRewardStatus() = %s, want %s", got, registerRewardStatusProcessing)
|
|
}
|
|
})
|
|
|
|
t.Run("same day register falls back to not triggered when activity disabled", func(t *testing.T) {
|
|
if got := deriveRegisterRewardStatus(nil, true, false); got != registerRewardStatusNotTriggered {
|
|
t.Fatalf("deriveRegisterRewardStatus() = %s, want %s", got, registerRewardStatusNotTriggered)
|
|
}
|
|
})
|
|
}
|
|
|
|
func TestIsRegisterRewardCurrentServerDate(t *testing.T) {
|
|
location, err := time.LoadLocation(registerRewardDailyQuotaTimezone)
|
|
if err != nil {
|
|
t.Fatalf("LoadLocation() error = %v", err)
|
|
}
|
|
|
|
now := time.Now().In(location)
|
|
if !isRegisterRewardCurrentServerDate(now) {
|
|
t.Fatalf("isRegisterRewardCurrentServerDate(now) = false, want true")
|
|
}
|
|
|
|
yesterday := now.AddDate(0, 0, -1)
|
|
if isRegisterRewardCurrentServerDate(yesterday) {
|
|
t.Fatalf("isRegisterRewardCurrentServerDate(yesterday) = true, want false")
|
|
}
|
|
}
|
|
|
|
func TestResolveRegisterRewardPayload(t *testing.T) {
|
|
configRewardGroupID := int64(2001)
|
|
logRewardGroupID := int64(3001)
|
|
|
|
t.Run("prefer log payload", func(t *testing.T) {
|
|
goldAmount, rewardGroupID := resolveRegisterRewardPayload(
|
|
&model.ResidentRegisterRewardConfig{GoldAmount: 100, RewardGroupID: &configRewardGroupID},
|
|
&model.ResidentRegisterRewardLog{GoldAmount: 200, RewardGroupID: &logRewardGroupID},
|
|
)
|
|
if goldAmount != 200 {
|
|
t.Fatalf("goldAmount = %d, want 200", goldAmount)
|
|
}
|
|
if rewardGroupID == nil || *rewardGroupID != logRewardGroupID {
|
|
t.Fatalf("rewardGroupID = %v, want %d", rewardGroupID, logRewardGroupID)
|
|
}
|
|
})
|
|
|
|
t.Run("fallback to config payload", func(t *testing.T) {
|
|
goldAmount, rewardGroupID := resolveRegisterRewardPayload(
|
|
&model.ResidentRegisterRewardConfig{GoldAmount: 100, RewardGroupID: &configRewardGroupID},
|
|
nil,
|
|
)
|
|
if goldAmount != 100 {
|
|
t.Fatalf("goldAmount = %d, want 100", goldAmount)
|
|
}
|
|
if rewardGroupID == nil || *rewardGroupID != configRewardGroupID {
|
|
t.Fatalf("rewardGroupID = %v, want %d", rewardGroupID, configRewardGroupID)
|
|
}
|
|
})
|
|
}
|