import 'package:block_seasons/services/analytics_service.dart'; import 'package:flutter_test/flutter_test.dart'; class _RecordingBackend implements AnalyticsBackend { final events = <(String, Map)>[]; @override void logEvent(String name, Map params) { events.add((name, params)); } } void main() { test('typed helpers produce stable event names and params', () { final backend = _RecordingBackend(); final analytics = AnalyticsService(backend); analytics.stageStart(seasonId: 'season_001', stageId: 's1'); analytics.stageEnd( seasonId: 'season_001', stageId: 's1', won: true, stars: 3, score: 1200, movesUsed: 9, ); analytics.endlessStart(); analytics.endlessEnd(score: 500, isNewBest: true); analytics.rescueUsed(type: 'continue'); analytics.tutorialFinished(skipped: false); expect(backend.events.map((e) => e.$1).toList(), [ 'stage_start', 'stage_end', 'endless_start', 'endless_end', 'rescue_used', 'tutorial_finished', ]); expect(backend.events[1].$2, { 'season_id': 'season_001', 'stage_id': 's1', 'won': 1, 'stars': 3, 'score': 1200, 'moves_used': 9, }); expect(backend.events[3].$2, {'score': 500, 'new_best': 1}); }); test('booster + daily events carry their fields', () { final backend = _RecordingBackend(); final a = AnalyticsService(backend); a.boosterUsed(type: 'hammer'); a.boosterGranted(type: 'hammer', count: 2, source: 'daily'); a.dailyRewardClaimed(day: 7, doubled: true); expect(backend.events.map((e) => e.$1).toList(), [ 'booster_used', 'booster_granted', 'daily_reward_claimed', ]); expect(backend.events[0].$2, {'type': 'hammer'}); expect(backend.events[1].$2, {'type': 'hammer', 'count': 2, 'source': 'daily'}); expect(backend.events[2].$2, {'day': 7, 'doubled': 1}); }); }