feat: add streak
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"context"
|
||||
"path/filepath"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"hakemsho/internal/store"
|
||||
)
|
||||
@@ -87,10 +88,11 @@ func TestWalletInsufficient(t *testing.T) {
|
||||
func TestDailyCooldown(t *testing.T) {
|
||||
svc, id := setup(t)
|
||||
ctx := context.Background()
|
||||
if amt, err := svc.ClaimDaily(ctx, id); err != nil || amt != DailyReward {
|
||||
t.Fatalf("first claim: amt=%d err=%v", amt, err)
|
||||
// اولین دریافت: استریک ۱، جایزه = DailyReward.
|
||||
if amt, streak, _, err := svc.ClaimDaily(ctx, id); err != nil || amt != DailyReward || streak != 1 {
|
||||
t.Fatalf("first claim: amt=%d streak=%d err=%v", amt, streak, err)
|
||||
}
|
||||
if _, err := svc.ClaimDaily(ctx, id); err != ErrTooSoon {
|
||||
if _, _, _, err := svc.ClaimDaily(ctx, id); err != ErrTooSoon {
|
||||
t.Fatalf("want ErrTooSoon, got %v", err)
|
||||
}
|
||||
if c := coinsOf(t, svc, id); c != DailyReward {
|
||||
@@ -98,6 +100,33 @@ func TestDailyCooldown(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestDailyStreakContinuesAndResets(t *testing.T) {
|
||||
svc, id := setup(t)
|
||||
ctx := context.Background()
|
||||
// دیروز گرفته ⇒ امروز استریک به ۲ میرسد و جایزه بیشتر میشود.
|
||||
ySet := func(daysAgo int) {
|
||||
ts := nowUTC().Add(time.Duration(-daysAgo) * 24 * time.Hour).Format(tsLayout)
|
||||
if _, err := svc.db.Exec(`UPDATE users SET last_daily_at=?, daily_streak=1 WHERE id=?`, ts, id); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
}
|
||||
ySet(1)
|
||||
amt, streak, _, err := svc.ClaimDaily(ctx, id)
|
||||
if err != nil || streak != 2 || amt != streakReward(2) {
|
||||
t.Fatalf("continue: amt=%d streak=%d err=%v", amt, streak, err)
|
||||
}
|
||||
// دو روز فاصله ⇒ استریک ریست به ۱.
|
||||
if _, err := svc.db.Exec(
|
||||
`UPDATE users SET last_daily_at=?, daily_streak=5 WHERE id=?`,
|
||||
nowUTC().Add(-48*time.Hour).Format(tsLayout), id); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
_, streak, _, err = svc.ClaimDaily(ctx, id)
|
||||
if err != nil || streak != 1 {
|
||||
t.Fatalf("reset: streak=%d err=%v", streak, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestAdRewardDedupeAndCredit(t *testing.T) {
|
||||
svc, id := setup(t)
|
||||
ctx := context.Background()
|
||||
|
||||
Reference in New Issue
Block a user