Files
BlockSeasons/test/services/analytics_service_test.dart
T
2026-06-18 12:24:02 +09:00

70 lines
1.9 KiB
Dart

import 'package:block_seasons/services/analytics_service.dart';
import 'package:flutter_test/flutter_test.dart';
class _RecordingBackend implements AnalyticsBackend {
final events = <(String, Map<String, Object>)>[];
@override
void logEvent(String name, Map<String, Object> 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});
});
}