import 'dart:convert';
import 'dart:io';
import 'package:flutter/material.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:machweis/features/reports/data/demo_report_store.dart';
import 'package:machweis/features/reports/domain/flutter_pdf_report_renderer.dart';
import 'package:machweis/features/reports/domain/report_export.dart';
void main() {
TestWidgetsFlutterBinding.ensureInitialized();
test('PDF-Renderer erzeugt ein gültig gerahmtes Dokument', () async {
final report = DemoReport(
id: 'pdf-test',
customer: 'Müller GmbH',
site: 'Werkhalle Süd',
activity: 'Unterverteilung geprüft',
material: 'NYM-J',
quantity: '25',
date: DateTime(2026, 8, 29),
start: const TimeOfDay(hour: 7, minute: 30),
end: const TimeOfDay(hour: 10, minute: 15),
breakMinutes: 15,
participantIds: const ['max'],
activityItems: const [
'Unterverteilung geprüft und beschriftet',
'Messwerte dokumentiert',
],
materialItems: const [
MaterialEntry(name: 'NYM-J 3×1,5', quantity: '25', unit: 'm'),
],
isFinalized: true,
finalizedAt: DateTime(2026, 8, 29, 10, 20),
signature: const [
[0.1, 0.7],
[0.3, 0.2],
[0.5, 0.75],
[-1, -1],
[0.55, 0.6],
[0.8, 0.3],
],
version: 3,
);
final document = ReportDocument(
report: report,
companyName: 'Elektro Muster GmbH',
companyAddress: 'Hauptstraße 12, 10115 Berlin',
companyContact: 'service@elektro-muster.de · 030 123456',
reportFooter: 'Vielen Dank für Ihren Auftrag.',
participantNames: const ['Max Mustermann'],
);
const renderer = FlutterPdfReportRenderer();
final bytes = await renderer.export(document);
expect(bytes.length, greaterThan(2500));
expect(ascii.decode(bytes.take(5).toList()), '%PDF-');
expect(
ascii.decode(bytes.skip(bytes.length - 6).toList()),
contains('%%EOF'),
);
expect(
renderer.fileName(document),
'MACHWEIS_2026-08-29_Werkhalle_Süd.pdf',
);
if (const bool.fromEnvironment('MACHWEIS_WRITE_PDF')) {
final directory = Directory('tmp/pdfs');
await directory.create(recursive: true);
await File(
'${directory.path}/machweis-reference.pdf',
).writeAsBytes(bytes, flush: true);
}
});
}
