Commit 90bc857

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-07-30 12:53:48
test compact measurement list
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent 66ff014
Changed files (3)
app
lib
features
screens
test
features
app/lib/features/measurement_list/legacy_measurement_list.dart → app/lib/features/measurement_list/compact_measurement_list.dart
@@ -8,11 +8,10 @@ import 'package:health_data_store/health_data_store.dart';
 import 'package:intl/intl.dart';
 import 'package:provider/provider.dart';
 
-/// A old more compact [BloodPressureRecord] list, that lacks some of the new
-/// features.
-class LegacyMeasurementsList extends StatefulWidget {
-  /// Create a more compact measurement list without all new features.
-  const LegacyMeasurementsList({super.key,
+/// A more compact [BloodPressureRecord] list that is less verbose.
+class CompactMeasurementList extends StatefulWidget {
+  /// Create a more compact, less verbose measurement list.
+  const CompactMeasurementList({super.key,
     required this.data,
   });
 
@@ -20,10 +19,10 @@ class LegacyMeasurementsList extends StatefulWidget {
   final List<FullEntry> data;
 
   @override
-  State<LegacyMeasurementsList> createState() => _LegacyMeasurementsListState();
+  State<CompactMeasurementList> createState() => _CompactMeasurementListState();
 }
 
-class _LegacyMeasurementsListState extends State<LegacyMeasurementsList> {
+class _CompactMeasurementListState extends State<CompactMeasurementList> {
 
   late final List<int> _tableElementsSizes;
 
app/lib/screens/home_screen.dart
@@ -1,7 +1,7 @@
 import 'package:blood_pressure_app/data_util/blood_pressure_builder.dart';
 import 'package:blood_pressure_app/data_util/entry_context.dart';
 import 'package:blood_pressure_app/data_util/repository_builder.dart';
-import 'package:blood_pressure_app/features/measurement_list/legacy_measurement_list.dart';
+import 'package:blood_pressure_app/features/measurement_list/compact_measurement_list.dart';
 import 'package:blood_pressure_app/features/measurement_list/measurement_list.dart';
 import 'package:blood_pressure_app/features/statistics/measurement_graph.dart';
 import 'package:blood_pressure_app/model/storage/intervall_store.dart';
@@ -63,7 +63,7 @@ class AppHome extends StatelessWidget {
                           final entries = FullEntryList.merged(records, notes, intakes);
                           entries.sort((a, b) => b.time.compareTo(a.time)); // newest first
                           if (context.select<Settings, bool>((s) => s.compactList)) {
-                            return LegacyMeasurementsList(
+                            return CompactMeasurementList(
                               data: entries,
                             );
                           }
app/test/features/measurement_list/compact_measurement_list_test.dart
@@ -0,0 +1,58 @@
+import 'package:blood_pressure_app/features/measurement_list/compact_measurement_list.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import '../../model/export_import/record_formatter_test.dart';
+import '../../util.dart';
+
+void main() {
+  testWidgets('shows header and no data when empty', (WidgetTester tester) async {
+    await tester.pumpWidget(materialApp(const CompactMeasurementList(data: [])));
+    final localizations = await AppLocalizations.delegate.load(const Locale('en'));
+
+    expect(find.text(localizations.time), findsOneWidget);
+    expect(find.text(localizations.sysShort), findsOneWidget);
+    expect(find.text(localizations.diaShort), findsOneWidget);
+    expect(find.text(localizations.pulShort), findsOneWidget);
+    expect(find.text(localizations.notes), findsOneWidget);
+
+    expect(find.text(localizations.errNoData), findsOneWidget);
+  });
+
+  testWidgets('shows passed tiles', (WidgetTester tester) async {
+    await tester.pumpWidget(materialApp(CompactMeasurementList(data: [
+      mockEntry(sys: 123, dia: 45, pul: 67, note: 'testnote'),
+    ])));
+    final localizations = await AppLocalizations.delegate.load(const Locale('en'));
+
+    expect(find.text(localizations.time), findsOneWidget);
+    expect(find.text(localizations.sysShort), findsOneWidget);
+    expect(find.text(localizations.diaShort), findsOneWidget);
+    expect(find.text(localizations.pulShort), findsOneWidget);
+    expect(find.text(localizations.notes), findsOneWidget);
+
+    expect(find.text(localizations.errNoData), findsNothing);
+    expect(find.byType(Dismissible), findsOneWidget);
+    expect(find.text('123'), findsOneWidget);
+    expect(find.text('45'), findsOneWidget);
+    expect(find.text('67'), findsOneWidget);
+    expect(find.text('testnote'), findsOneWidget);
+  });
+
+  // TODO: test delete once storage logic is mockable (extract add and delete to
+  // object in context)
+  /*testWidgets('initializes deletion when swiping from right to left', (WidgetTester tester) async {
+    await tester.pumpWidget(materialApp(CompactMeasurementList(data: [
+      mockEntry(sys: 123, dia: 45, pul: 67, note: 'testnote'),
+    ])));
+
+    expect(find.byType(AddEntryDialoge), findsNothing);
+    expect(find.byIcon(Icons.delete), findsNothing);
+
+    await tester.drag(find.text('45'), const Offset(-500.0, 0));
+    await tester.pumpAndSettle();
+    expect(find.text('Confirm deletion'), findsOneWidget);
+  });*/
+  // TODO: opens edit when swiping from left to right
+}