feat(daily): pure 7-day login-calendar logic + reward table
This commit is contained in:
@@ -0,0 +1,51 @@
|
||||
import 'package:block_seasons/game/daily/daily_reward.dart';
|
||||
import 'package:block_seasons/game/models/booster.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
|
||||
void main() {
|
||||
final cal = DailyRewardCalendar();
|
||||
|
||||
DateTime d(int day) => DateTime(2026, 6, day);
|
||||
|
||||
test('first ever claim is day 1', () {
|
||||
final r = cal.resolve(lastClaimedYmd: null, storedDay: 0, today: d(18));
|
||||
expect(r.claimable, isTrue);
|
||||
expect(r.day, 1);
|
||||
});
|
||||
|
||||
test('claiming again the same day is not claimable', () {
|
||||
final r = cal.resolve(
|
||||
lastClaimedYmd: '2026-06-18', storedDay: 1, today: d(18));
|
||||
expect(r.claimable, isFalse);
|
||||
});
|
||||
|
||||
test('a consecutive day advances the calendar', () {
|
||||
final r = cal.resolve(
|
||||
lastClaimedYmd: '2026-06-18', storedDay: 3, today: d(19));
|
||||
expect(r.claimable, isTrue);
|
||||
expect(r.day, 4);
|
||||
});
|
||||
|
||||
test('day 7 wraps back to day 1', () {
|
||||
final r = cal.resolve(
|
||||
lastClaimedYmd: '2026-06-18', storedDay: 7, today: d(19));
|
||||
expect(r.day, 1);
|
||||
});
|
||||
|
||||
test('a missed day resets to day 1', () {
|
||||
final r = cal.resolve(
|
||||
lastClaimedYmd: '2026-06-18', storedDay: 4, today: d(20));
|
||||
expect(r.claimable, isTrue);
|
||||
expect(r.day, 1);
|
||||
});
|
||||
|
||||
test('reward table covers days 1..7 and day 7 is the jackpot', () {
|
||||
expect(cal.rewardFor(1), {BoosterType.hammer: 1});
|
||||
expect(cal.rewardFor(7),
|
||||
{BoosterType.hammer: 2, BoosterType.shuffle: 2, BoosterType.lineBomb: 2});
|
||||
});
|
||||
|
||||
test('ymd formats a date as YYYY-MM-DD', () {
|
||||
expect(cal.ymd(DateTime(2026, 6, 7)), '2026-06-07');
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user