package model import ( "testing" "time" ) func TestApplyBuffQuotaRollover_RefillsWhenWindowPassed(t *testing.T) { end := time.Date(2026, 3, 1, 12, 0, 0, 0, time.UTC) h := &Hero{ BuffFreeChargesRemaining: 0, BuffQuotaPeriodEnd: &end, } now := end.Add(time.Hour) if !h.ApplyBuffQuotaRollover(now) { t.Fatal("expected rollover to mutate hero") } if h.BuffFreeChargesRemaining != FreeBuffActivationsPerPeriod { t.Fatalf("charges: want %d, got %d", FreeBuffActivationsPerPeriod, h.BuffFreeChargesRemaining) } if !h.BuffQuotaPeriodEnd.After(end) { t.Fatalf("expected period end to advance, got %v", h.BuffQuotaPeriodEnd) } } func TestApplyBuffQuotaRollover_NoOpWhenSubscribed(t *testing.T) { end := time.Date(2026, 3, 1, 12, 0, 0, 0, time.UTC) h := &Hero{ SubscriptionActive: true, BuffFreeChargesRemaining: 0, BuffQuotaPeriodEnd: &end, } if h.ApplyBuffQuotaRollover(end.Add(48 * time.Hour)) { t.Fatal("subscription should skip rollover") } }