import 'package:flutter_test/flutter_test.dart'; import 'package:manager_app/Screens/Statistics/statistics_report.dart'; StatisticsReportData _data({ List series = const [], List barGroups = const [], List tables = const [], List axisLabels = const [], }) { return StatisticsReportData( instanceName: 'Fort Saint Héribert', title: 'Votre rapport de fréquentation', periodLabel: 'Du 1 août au 31 août 2026', takeaways: const [ 'La fréquentation progresse de 18 % par rapport à la période précédente.', 'Le guide vocal représente 12 % des visites.', ], kpis: const [ ReportKpi('Visites', '3 847', '18 % vs période précédente'), ReportKpi('Durée moyenne', '14 min 20 s', '2 min 10 s'), ReportKpi('Contenus par visite', '5,2', null), ReportKpi('Part du guide vocal', '12 %', 'stable'), ], chartTitle: 'Visites par jour', chartSubtitle: 'Nombre de consultations sur la période', series: series, axisLabels: axisLabels, peakLabel: 'Pic le 22 août — 288 visites', barGroups: barGroups, tables: tables, generatedLabel: 'Rapport généré le 7 août avec MyInfoMate', brandArgb: 0xFF264863, logo: null, ); } void main() { TestWidgetsFlutterBinding.ensureInitialized(); test('le rapport complet produit un PDF', () async { final series = [ for (var day = 1; day <= 31; day++) ReportDayPoint('$day août', day % 7 == 0 ? 288 : 80 + day * 3), ]; final bytes = await buildStatisticsReport(_data( series: series, axisLabels: const [0, 6, 12, 18, 24, 30], barGroups: const [ ReportBarGroup('Contenus les plus consultés', 'Nombre de consultations', [ ReportBar('Histoire du fort', '1 284', 1), ReportBar('La vie quotidienne des soldats', '731', 0.569), ReportBar('Quiz « Connais-tu le fort ? »', '337', 0.262), ]), ReportBarGroup('Canaux', 'Visites par canal', [ ReportBar('Site web', '1 642', 1), ReportBar('Guide vocal', '463', 0.282), ]), ], tables: const [ ReportTable('Top POI', ['POI', 'Taps'], [ ['Casemate nord', '212'], ['Poudrière', '96'], ]), ], )); expect(bytes.length, greaterThan(1000)); expect(String.fromCharCodes(bytes.take(5)), '%PDF-'); }); test('le rapport tient sans courbe, sans barres et sans tableaux', () async { final bytes = await buildStatisticsReport(_data()); expect(bytes.length, greaterThan(1000)); expect(String.fromCharCodes(bytes.take(5)), '%PDF-'); }); test('une série d\'un seul point sort le rapport sans courbe', () async { final bytes = await buildStatisticsReport(_data( series: const [ReportDayPoint('7 août', 3)], axisLabels: const [0], )); expect(bytes.length, greaterThan(1000)); }); test('une série entièrement à zéro reste traçable', () async { final bytes = await buildStatisticsReport(_data( series: const [ ReportDayPoint('1 août', 0), ReportDayPoint('2 août', 0), ReportDayPoint('3 août', 0), ], axisLabels: const [0, 2], )); expect(bytes.length, greaterThan(1000)); }); }