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)
}
})
}