import 'package:block_seasons/data/content_repository.dart'; import 'package:block_seasons/game/models/season.dart'; import 'package:block_seasons/game/models/stage.dart'; import 'package:block_seasons/state/providers.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:flutter_test/flutter_test.dart'; class _FakeRepo extends ContentRepository { _FakeRepo(this.result); final bool result; int calls = 0; @override Future refresh() async { calls++; return result; } } SeasonPack _pack(String id) => SeasonPack( schemaVersion: 1, seasonId: id, version: 1, title: const {'en': 'Test Season', 'ko': '테스트 시즌'}, theme: SeasonTheme.fallback, stages: [ StageConfig( id: 's1', seed: 1, moveLimit: 10, preset: const [], objectives: const [], stars: const StarThresholds(twoMovesLeft: 2, threeMovesLeft: 4), generatorProfile: 'mid', ), ], ); void main() { test('seasonRefreshProvider runs refresh once and exposes the result', () async { final repo = _FakeRepo(true); final container = ProviderContainer( overrides: [contentRepositoryProvider.overrideWithValue(repo)], ); addTearDown(container.dispose); expect(await container.read(seasonRefreshProvider.future), isTrue); // Re-reading does not re-run (FutureProvider caches). expect(await container.read(seasonRefreshProvider.future), isTrue); expect(repo.calls, 1); }); test('activeSeason picks the newest by id', () { final p1 = _pack('season_001'); final p2 = _pack('season_002'); expect(activeSeason([p1, p2]).seasonId, 'season_002'); }); }