Commit dbe3acc

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-08-07 07:34:46
test intake column
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 358af50
Changed files (4)
app
test
features
model
app/test/features/bluetooth/mock/fake_device.dart
@@ -70,7 +70,7 @@ class FakeDevice implements BluetoothDevice {
   }
 
   @override
-  Future<void> disconnect({int timeout = 35, bool queue = true}) async {
+  Future<void> disconnect({int timeout = 35, bool queue = true, int androidDelay = 2000,}) async {
     print('CALLED DISCONNECT:');
     debugPrintStack();
     _connected = false;
app/test/features/export_import/import_preview_dialoge_test.dart
@@ -19,6 +19,7 @@ void main() {
         CsvConverter(
           CsvExportSettings(),
           ExportColumnsManager(),
+          [],
         ),
         'timestampUnixMs,systolic,diastolic,pulse,notes,needlePin\n1703175193324'
         ',123,45,67,note1,"{""color"":4285132974}"\n1703147206000,114,71,56,,null',
@@ -44,6 +45,7 @@ void main() {
         CsvConverter(
           CsvExportSettings(),
           ExportColumnsManager(),
+          [],
         ),
         csvTxt,
       ),
@@ -62,6 +64,7 @@ void main() {
         CsvConverter(
           CsvExportSettings(),
           ExportColumnsManager(),
+          [],
         ),
         'systolic,diastolic,pulse,notes,needlePin\n123,45,67,note1,'
             '"{""color"":4285132974}"\n114,71,56,,null',
@@ -81,6 +84,7 @@ void main() {
         CsvConverter(
           CsvExportSettings(),
           ExportColumnsManager(),
+          [],
         ),
         'line1\nline2\nline3',
       ),
@@ -114,6 +118,7 @@ void main() {
           CsvConverter(
             CsvExportSettings(),
             ExportColumnsManager(),
+            [],
           ),
           'timestampUnixMs,systolic,diastolic,pulse,notes,needlePin\n1703175193324'
               ',123,45,67,note1,"{""color"":4285132974}"\n1703147206000,114,71,56,,null',
@@ -142,4 +147,55 @@ void main() {
     expect(res[1].time.millisecondsSinceEpoch, 1703147206000);
     expect(res[1].dia?.mmHg, 71);
   });
+  testWidgets('should parse intakes data', (tester) async {
+    dynamic data = 1;
+
+    await loadDialoge(tester, (context) async {
+      data = await showImportPreview(
+        context,
+        CsvRecordParsingActor(
+          CsvConverter(
+            CsvExportSettings(),
+            ExportColumnsManager(),
+            [Medicine(designation: 'testMed1'), Medicine(designation: 'testMed2')],
+          ),
+          'timestampUnixMs,intakes\n'
+          '1703175193324,testMed1(123.5)\n'
+          '1703147206000,testMed2(12)|testMed1(15.0)\n',
+        ),
+        ExportColumnsManager(),
+        false,
+      );
+    },);
+
+    expect(find.byType(ImportPreviewDialoge), findsOneWidget);
+    expect(tester.takeException(), isNull);
+    expect(find.byType(DropdownButton), findsNWidgets(2), reason: '2 columns');
+    expect(find.textContaining('testMed1'), findsNWidgets(2));
+    expect(find.textContaining('testMed2'), findsOneWidget);
+    expect(find.byType(CustomBanner), findsNothing, reason: 'no error');
+
+    final localizations = await AppLocalizations.delegate.load(const Locale('en'));
+    expect(find.text(localizations.import), findsOneWidget);
+    await tester.tap(find.text(localizations.import));
+    await tester.pumpAndSettle();
+    expect(find.byType(ImportPreviewDialoge), findsNothing);
+
+    expect(data, isA<List<FullEntry>>());
+    final List<FullEntry> res = data;
+    expect(res, hasLength(2));
+    expect(res[0].$3, hasLength(1));
+    expect(res[0].$3[0].medicine.designation, 'testMed1');
+    expect(res[0].$3[0].dosis.mg, 123.5);
+    expect(res[1].time.millisecondsSinceEpoch, 1703147206000);
+    expect(res[1].$3, hasLength(2));
+    expect(res[1].$3, containsAll([
+      isA<MedicineIntake>()
+        .having((i) => i.medicine.designation, 'designation', 'testMed1')
+        .having((i) => i.dosis.mg, 'designation', 15.0),
+      isA<MedicineIntake>()
+        .having((i) => i.medicine.designation, 'designation', 'testMed2')
+        .having((i) => i.dosis.mg, 'designation', 12.0),
+    ]));
+  });
 }
app/test/model/export_import/column_test.dart
@@ -5,6 +5,8 @@ import 'package:flutter/material.dart';
 import 'package:flutter_test/flutter_test.dart';
 import 'package:health_data_store/health_data_store.dart';
 
+import '../../features/measurement_list/measurement_list_entry_test.dart';
+import '../../util.dart';
 import 'record_formatter_test.dart';
 
 void main() {
@@ -28,7 +30,7 @@ void main() {
     test('should encode into non-empty string', () {
       // Use BuildInColumn for utility columns
       for (final c in NativeColumn.allColumns) {
-        final r = _filledRecord();
+        final r = _filledRecord(true);
         expect(c.encode(r.$1, r.$2, r.$3), isNotEmpty, reason: '${c.internalIdentifier} is NativeColumn');
       }
     });
@@ -39,7 +41,7 @@ void main() {
       }
     });
     test('should decode correctly', () {
-      final r = _filledRecord();
+      final r = _filledRecord(true);
       for (final c in NativeColumn.allColumns) {
         final txt = c.encode(r.$1, r.$2, r.$3);
         final decoded = c.decode(txt);
@@ -49,26 +51,26 @@ void main() {
             expect(decoded.$2, isA<DateTime>().having(
               (p0) => p0.millisecondsSinceEpoch, 'milliseconds', r.$1.time.millisecondsSinceEpoch,),);
             break;
-          case RowDataFieldType.sys:
-            expect(decoded.$2, isA<int>().having(
-                    (p0) => p0, 'systolic', r.$1.sys?.mmHg,),);
-            break;
-          case RowDataFieldType.dia:
-            expect(decoded.$2, isA<int>().having(
-                    (p0) => p0, 'diastolic', r.$1.dia?.mmHg,),);
-            break;
-          case RowDataFieldType.pul:
-            expect(decoded.$2, isA<int>().having(
-                    (p0) => p0, 'pulse', r.$1.pul,),);
-            break;
-          case RowDataFieldType.notes:
-            expect(decoded.$2, isA<String>().having(
-                    (p0) => p0, 'pulse', r.$2.note,),);
-            break;
-          case RowDataFieldType.color:
-            expect(decoded.$2, isA<int>().having(
-                    (p0) => p0, 'color', r.$2.color,),);
-            break;
+        case RowDataFieldType.sys:
+          expect(decoded.$2, isA<int>()
+            .having((p0) => p0, 'systolic', r.$1.sys?.mmHg));
+        case RowDataFieldType.dia:
+          expect(decoded.$2, isA<int>()
+            .having((p0) => p0, 'diastolic', r.$1.dia?.mmHg));
+        case RowDataFieldType.pul:
+          expect(decoded.$2, isA<int>()
+            .having((p0) => p0, 'pulse', r.$1.pul));
+        case RowDataFieldType.notes:
+          expect(decoded.$2, isA<String>()
+            .having((p0) => p0, 'note', r.$2.note));
+        case RowDataFieldType.color:
+          expect(decoded.$2, isA<int>()
+            .having((p0) => p0, 'pin', r.$2.color));
+        case RowDataFieldType.intakes:
+          expect(decoded.$2, isA<List>()
+            .having((p0) => p0.length, 'length', 1,)
+            .having((p0) => p0[0].$1, 'designation', 'mockMed',)
+            .having((p0) => p0[0].$2, 'dosis', 123.4,));
         }
       }
     });
@@ -100,7 +102,7 @@ void main() {
       }
     });
     test('should decode correctly', () {
-      final r = _filledRecord();
+      final r = _filledRecord(true);
       for (final c in BuildInColumn.allColumns) {
         final txt = c.encode(r.$1, r.$2, r.$3);
         final decoded = c.decode(txt);
@@ -116,29 +118,28 @@ void main() {
               expect(decoded?.$2, isA<DateTime>().having(
                   (p0) => p0.millisecondsSinceEpoch, 'milliseconds', r.$1.time.millisecondsSinceEpoch,),);
             }
-            break;
           case RowDataFieldType.sys:
-            expect(decoded?.$2, isA<int>().having(
-                    (p0) => p0, 'systolic', r.$1.sys?.mmHg,),);
-            break;
+            expect(decoded?.$2, isA<int>()
+              .having((p0) => p0, 'systolic', r.$1.sys?.mmHg));
           case RowDataFieldType.dia:
-            expect(decoded?.$2, isA<int>().having(
-                    (p0) => p0, 'diastolic', r.$1.dia?.mmHg,),);
-            break;
+            expect(decoded?.$2, isA<int>()
+              .having((p0) => p0, 'diastolic', r.$1.dia?.mmHg));
           case RowDataFieldType.pul:
-            expect(decoded?.$2, isA<int>().having(
-                    (p0) => p0, 'pulse', r.$1.pul,),);
-            break;
+            expect(decoded?.$2, isA<int>()
+              .having((p0) => p0, 'pulse', r.$1.pul));
           case RowDataFieldType.notes:
-            expect(decoded?.$2, isA<String>().having(
-                    (p0) => p0, 'note', r.$2.note,),);
-            break;
+            expect(decoded?.$2, isA<String>()
+              .having((p0) => p0, 'note', r.$2.note));
           case RowDataFieldType.color:
-            expect(decoded?.$2, isA<int>().having(
-                    (p0) => p0, 'pin', r.$2.color,),);
-            break;
+            expect(decoded?.$2, isA<int>()
+              .having((p0) => p0, 'pin', r.$2.color));
+          case RowDataFieldType.intakes:
+            expect(decoded?.$2, isA<List<(String, double)>>()
+              .having((p0) => p0.length, 'length', 1,)
+              .having((p0) => p0[0].$1, 'designation', 'mockMed',)
+              .having((p0) => p0[0].$2, 'dosis', 123.4,));
           case null:
-            break;
+            // no-op
         }
       }
     });
@@ -195,10 +196,13 @@ void main() {
   });
 }
 
-FullEntry _filledRecord() => mockEntry(
+FullEntry _filledRecord([bool addIntakes = false]) => mockEntry(
   sys: 123,
   dia: 456,
   pul: 789,
   note: 'test',
   pin: Colors.pink,
+  intake: addIntakes
+    ? mockIntake(mockMedicine(designation: 'mockMed'), dosis: 123.4,)
+    : null,
 );
app/test/model/export_import/csv_converter_test.dart
@@ -15,13 +15,13 @@ import 'record_formatter_test.dart';
 
 void main() {
   test('should create csv string bigger than 0', () {
-    final converter = CsvConverter(CsvExportSettings(), ExportColumnsManager());
+    final converter = CsvConverter(CsvExportSettings(), ExportColumnsManager(), []);
     final csv = converter.create(createRecords());
     expect(csv.length, isNonZero);
   });
 
   test('should create first line', () {
-    final converter = CsvConverter(CsvExportSettings(), ExportColumnsManager());
+    final converter = CsvConverter(CsvExportSettings(), ExportColumnsManager(), []);
     final csv = converter.create([]);
     final columns = CsvExportSettings().exportFieldsConfiguration.getActiveColumns(ExportColumnsManager());
     expect(csv, stringContainsInOrder(columns.map((e) => e.csvTitle).toList()));
@@ -29,8 +29,9 @@ void main() {
 
   test('should not create first line when setting is off', () {
     final converter = CsvConverter(
-        CsvExportSettings(exportHeadline: false),
-        ExportColumnsManager(),
+      CsvExportSettings(exportHeadline: false),
+      ExportColumnsManager(),
+      [],
     );
     final csv = converter.create([]);
     final columns = CsvExportSettings().exportFieldsConfiguration.getActiveColumns(ExportColumnsManager());
@@ -38,7 +39,7 @@ void main() {
   });
 
   test('should be able to recreate records from csv in default configuration', () {
-    final converter = CsvConverter(CsvExportSettings(), ExportColumnsManager());
+    final converter = CsvConverter(CsvExportSettings(), ExportColumnsManager(), []);
     final initialRecords = createRecords();
     final csv = converter.create(initialRecords);
     final parsedRecords = converter.parse(csv).getOr(failParse);
@@ -57,8 +58,9 @@ void main() {
     final text = File('test/model/export_import/exported_formats/incomplete_export.csv').readAsStringSync();
 
     final converter = CsvConverter(
-        CsvExportSettings(),
-        ExportColumnsManager(),
+      CsvExportSettings(),
+      ExportColumnsManager(),
+      [],
     );
     final parsed = converter.parse(text);
     final records = parsed.getOr(failParse);
@@ -95,8 +97,9 @@ void main() {
     final text = File('test/model/export_import/exported_formats/v1.0.csv').readAsStringSync();
 
     final converter = CsvConverter(
-        CsvExportSettings(),
-        ExportColumnsManager(),
+      CsvExportSettings(),
+      ExportColumnsManager(),
+      [],
     );
     final parsed = converter.parse(text);
     final records = parsed.getOr(failParse);
@@ -122,8 +125,9 @@ void main() {
     final text = File('test/model/export_import/exported_formats/v1.1.0').readAsStringSync();
 
     final converter = CsvConverter(
-        CsvExportSettings(),
-        ExportColumnsManager(),
+      CsvExportSettings(),
+      ExportColumnsManager(),
+      [],
     );
     final parsed = converter.parse(text);
     final records = parsed.getOr(failParse);
@@ -149,8 +153,9 @@ void main() {
     final text = File('test/model/export_import/exported_formats/v1.4.0.CSV').readAsStringSync();
 
     final converter = CsvConverter(
-        CsvExportSettings(),
-        ExportColumnsManager(),
+      CsvExportSettings(),
+      ExportColumnsManager(),
+      [],
     );
     final parsed = converter.parse(text);
     final records = parsed.getOr(failParse);
@@ -183,8 +188,9 @@ void main() {
     final text = File('test/model/export_import/exported_formats/v1.5.1.csv').readAsStringSync();
 
     final converter = CsvConverter(
-        CsvExportSettings(),
-        ExportColumnsManager(),
+      CsvExportSettings(),
+      ExportColumnsManager(),
+      [],
     );
     final parsed = converter.parse(text);
     final records = parsed.getOr(failParse);
@@ -220,8 +226,9 @@ void main() {
     final text = File('test/model/export_import/exported_formats/v1.5.7.csv').readAsStringSync();
 
     final converter = CsvConverter(
-        CsvExportSettings(),
-        ExportColumnsManager(),
+      CsvExportSettings(),
+      ExportColumnsManager(),
+      [],
     );
     final parsed = converter.parse(text);
     final records = parsed.getOr(failParse);
@@ -260,6 +267,7 @@ void main() {
     final converter = CsvConverter(
       CsvExportSettings(),
       ExportColumnsManager(),
+      [],
     );
     final parsed = converter.parse(text);
     final records = parsed.getOr(failParse);
@@ -312,6 +320,7 @@ void main() {
         )
       ),
       cols,
+      [],
     );
     final parsed = converter.parse(text);