Commit 1471843

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-06-24 13:49:57
fix measurement ordering
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent c9a0f07
Changed files (3)
app
lib
components
measurement_list
screens
subsettings
test
ui
components
app/lib/components/measurement_list/measurement_list.dart
@@ -33,6 +33,7 @@ class MeasurementList extends StatelessWidget {
   Widget build(BuildContext context) {
     final localizations = AppLocalizations.of(context)!;
     final entries = FullEntryList.merged(records, notes, intakes);
+    entries.sort((a, b) => a.time.compareTo(b.time)); // FIXme everywhere else
     return Column(
       mainAxisSize: MainAxisSize.min,
       children: [
app/lib/screens/subsettings/export_import/export_button_bar.dart
@@ -179,7 +179,9 @@ Future<List<FullEntry>> _getEntries(BuildContext context) async {
   final notes = await noteRepo.get(range);
   final intakes = await intakeRepo.get(range);
 
-  return FullEntryList.merged(records, notes, intakes);
+  final entries = FullEntryList.merged(records, notes, intakes);
+  entries.sort((a, b) => a.time.compareTo(b.time));
+  return entries;
 }
 
 /// Save to default export path or share by providing a path.
app/test/ui/components/measurement_list/measurement_list_test.dart
@@ -0,0 +1,50 @@
+import 'package:blood_pressure_app/components/measurement_list/measurement_list.dart';
+import 'package:blood_pressure_app/components/measurement_list/measurement_list_entry.dart';
+import 'package:blood_pressure_app/model/storage/settings_store.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import '../../../model/analyzer_test.dart';
+import '../util.dart';
+
+void main() {
+  testWidgets('contains all elements in time range', (tester) async {
+    await tester.pumpWidget(materialApp(
+      MeasurementList(
+        settings: Settings(),
+        records: [
+          mockRecord(time: DateTime(2020), sys: 2020),
+          mockRecord(time: DateTime(2021), sys: 2021),
+          mockRecord(time: DateTime(2022), sys: 2022),
+          mockRecord(time: DateTime(2023), sys: 2023),
+        ],
+        notes: [],
+        intakes: [],
+      ),
+    ));
+    expect(find.byType(MeasurementListRow), findsNWidgets(4));
+    expect(find.text('2020'), findsOneWidget);
+    expect(find.text('2021'), findsOneWidget);
+    expect(find.text('2022'), findsOneWidget);
+    expect(find.text('2023'), findsOneWidget);
+  });
+  testWidgets('entries are ordered in chronological order', (tester) async {
+    await tester.pumpWidget(materialApp(
+      MeasurementList(
+        settings: Settings(),
+        records: [
+          mockRecord(time: DateTime.fromMillisecondsSinceEpoch(2000), sys: 2),
+          mockRecord(time: DateTime.fromMillisecondsSinceEpoch(1000), sys: 1),
+          mockRecord(time: DateTime.fromMillisecondsSinceEpoch(4000), sys: 3),
+        ],
+        notes: [],
+        intakes: [],
+      ),
+    ));
+    expect(find.byType(MeasurementListRow), findsNWidgets(3));
+    final top = await tester.getCenter(find.text('1')).dy;
+    final center = await tester.getCenter(find.text('2')).dy;
+    final bottom = await tester.getCenter(find.text('3')).dy;
+    expect(bottom, greaterThan(center));
+    expect(center, greaterThan(top));
+  });
+}