Commit c9f8581

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2023-12-16 14:11:43
test pdf creation
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 087633f
Changed files (2)
lib
model
export_import
test
model
lib/model/export_import/pdf_converter.dart
@@ -30,7 +30,7 @@ class PdfConverter {
 
   /// Create a pdf from a record list.
   Future<Uint8List> create(List<BloodPressureRecord> records) async {
-    pw.Document pdf = pw.Document();
+    final pdf = pw.Document();
     final analyzer = BloodPressureAnalyser(records.toList());
 
     pdf.addPage(pw.MultiPage(
test/model/export_import/pdf_converter_test.dart
@@ -0,0 +1,63 @@
+
+import 'package:blood_pressure_app/model/blood_pressure.dart';
+import 'package:blood_pressure_app/model/export_import/pdf_converter.dart';
+import 'package:blood_pressure_app/model/storage/export_columns_store.dart';
+import 'package:blood_pressure_app/model/storage/export_pdf_settings_store.dart';
+import 'package:blood_pressure_app/model/storage/settings_store.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+void main() {
+  group('PdfConverter', () {
+    test('should not return empty data', () async {
+      final localizations = await AppLocalizations.delegate.load(const Locale('en'));
+      final converter = PdfConverter(PdfExportSettings(), localizations, Settings(), ExportColumnsManager());
+      final pdf = await converter.create(createRecords());
+      expect(pdf.length, isNonZero);
+    });
+    test('generated data length should be consistent', () async {
+      final localizations = await AppLocalizations.delegate.load(const Locale('en'));
+      final converter = PdfConverter(PdfExportSettings(), localizations, Settings(), ExportColumnsManager());
+      final pdf = await converter.create(createRecords());
+      final converter2 = PdfConverter(PdfExportSettings(), localizations, Settings(), ExportColumnsManager());
+      final pdf2 = await converter2.create(createRecords());
+      expect(pdf.length, pdf2.length);
+    });
+
+    test('generated data should change on settings change', () async {
+      final localizations = await AppLocalizations.delegate.load(const Locale('en'));
+      final pdfSettings = PdfExportSettings(
+        exportData: true,
+        exportStatistics: true,
+        exportTitle: true,
+      );
+
+      final converter = PdfConverter(pdfSettings, localizations, Settings(), ExportColumnsManager());
+      final pdf1 = await converter.create(createRecords());
+
+      pdfSettings.exportData = false;
+      final pdf2 = await converter.create(createRecords());
+      expect(pdf1.length, isNot(pdf2.length));
+      expect(pdf1.length, greaterThan(pdf2.length));
+
+      pdfSettings.exportStatistics = false;
+      final pdf3 = await converter.create(createRecords());
+      expect(pdf3.length, isNot(pdf2.length));
+      expect(pdf3.length, isNot(pdf1.length));
+      expect(pdf2.length, greaterThan(pdf3.length));
+
+      pdfSettings.exportTitle = false;
+      pdfSettings.exportData = true;
+      final pdf4 = await converter.create(createRecords());
+      expect(pdf4.length, isNot(pdf1.length));
+      expect(pdf1.length, greaterThan(pdf4.length));
+    });
+  });
+}
+
+List<BloodPressureRecord> createRecords([int count = 20]) => [
+  for (int i = 0; i<count; i++)
+    BloodPressureRecord(DateTime.fromMillisecondsSinceEpoch(123456 + i), 
+        i, 100+i, 200+1, 'note $i', needlePin: MeasurementNeedlePin(Color(123+i))),
+];