main
1import 'package:blood_pressure_app/features/measurement_list/weight_list.dart';
2import 'package:blood_pressure_app/model/storage/interval_store.dart';
3import 'package:blood_pressure_app/model/storage/settings_store.dart';
4import 'package:blood_pressure_app/model/weight_unit.dart';
5import 'package:flutter/material.dart';
6import 'package:blood_pressure_app/l10n/app_localizations.dart';
7import 'package:flutter_test/flutter_test.dart';
8import 'package:health_data_store/health_data_store.dart';
9
10import '../../util.dart';
11
12void main() {
13 testWidgets('shows all elements in time range in order', (tester) async {
14 final interval = IntervalStorage();
15 interval.changeStepSize(TimeStep.lifetime);
16
17 await tester.pumpWidget(await appBaseWithData(
18 weights: [
19 BodyweightRecord(time: DateTime(2001), weight: Weight.kg(123.0)),
20 BodyweightRecord(time: DateTime(2003), weight: Weight.kg(122.1)),
21 BodyweightRecord(time: DateTime(2000), weight: Weight.kg(70.0)),
22 BodyweightRecord(time: DateTime(2002), weight: Weight.kg(7000.12345)),
23 ],
24 intervallStoreManager: IntervalStoreManager(interval, IntervalStorage(), IntervalStorage()),
25 const WeightList(rangeType: IntervalStoreManagerLocation.mainPage),
26 ));
27 await tester.pumpAndSettle();
28
29 expect(find.byType(ListTile), findsNWidgets(4));
30 expect(find.text('123 kg'), findsOneWidget);
31 expect(find.text('122.1 kg'), findsOneWidget);
32 expect(find.text('70 kg'), findsOneWidget);
33 expect(find.text('7000.12 kg'), findsOneWidget);
34
35 expect(
36 tester.getCenter(find.textContaining('2003')).dy,
37 lessThan(tester.getCenter(find.textContaining('2002')).dy),
38 );
39 expect(
40 tester.getCenter(find.textContaining('2002')).dy,
41 lessThan(tester.getCenter(find.textContaining('2001')).dy),
42 );
43 expect(
44 tester.getCenter(find.textContaining('2001')).dy,
45 lessThan(tester.getCenter(find.textContaining('2000')).dy),
46 );
47 });
48 testWidgets('deletes elements from repo', (tester) async {
49 final interval = IntervalStorage();
50 interval.changeStepSize(TimeStep.lifetime);
51 final repo = MockBodyweightRepository();
52 await repo.add(BodyweightRecord(time: DateTime(2001), weight: Weight.kg(123.0)));
53
54 await tester.pumpWidget(appBase(
55 weightRepo: repo,
56 intervallStoreManager: IntervalStoreManager(interval, IntervalStorage(), IntervalStorage()),
57 const WeightList(rangeType: IntervalStoreManagerLocation.mainPage),
58 ));
59 final localizations = await AppLocalizations.delegate.load(const Locale('en'));
60 await tester.pumpAndSettle();
61
62 expect(find.text('123 kg'), findsOneWidget);
63 expect(find.byIcon(Icons.delete), findsOneWidget);
64 expect(find.text(localizations.confirmDelete), findsNothing);
65 expect(find.text(localizations.btnConfirm), findsNothing);
66
67 await tester.tap(find.byIcon(Icons.delete));
68 await tester.pumpAndSettle();
69
70 expect(find.text(localizations.confirmDelete), findsOneWidget);
71 expect(find.text(localizations.btnConfirm), findsOneWidget);
72
73 await tester.tap(find.text(localizations.btnConfirm));
74 await tester.pumpAndSettle();
75 await tester.pumpAndSettle();
76 await tester.pumpAndSettle();
77 await tester.pumpAndSettle();
78
79 expect(find.text('123 kg'), findsNothing);
80 expect(repo.data, isEmpty);
81 });
82 testWidgets('respects confirm deletion setting', (tester) async {
83 final interval = IntervalStorage();
84 interval.changeStepSize(TimeStep.lifetime);
85 final repo = MockBodyweightRepository();
86 await repo.add(BodyweightRecord(time: DateTime(2001), weight: Weight.kg(123.0)));
87
88 await tester.pumpWidget(appBase(
89 weightRepo: repo,
90 intervallStoreManager: IntervalStoreManager(interval, IntervalStorage(), IntervalStorage()),
91 settings: Settings(confirmDeletion: false),
92 const WeightList(rangeType: IntervalStoreManagerLocation.mainPage),
93 ));
94 final localizations = await AppLocalizations.delegate.load(const Locale('en'));
95 await tester.pumpAndSettle();
96
97 expect(find.text('123 kg'), findsOneWidget);
98 expect(find.text(localizations.confirmDelete), findsNothing);
99
100 await tester.tap(find.byIcon(Icons.delete));
101 await tester.pumpAndSettle();
102
103 expect(find.text(localizations.confirmDelete), findsNothing);
104 expect(find.text('123 kg'), findsNothing);
105 });
106 testWidgets('respects confirm weight unit setting', (tester) async {
107 final interval = IntervalStorage();
108 interval.changeStepSize(TimeStep.lifetime);
109 final repo = MockBodyweightRepository();
110 await repo.add(BodyweightRecord(time: DateTime(2001), weight: Weight.kg(123.0)));
111
112 await tester.pumpWidget(appBase(
113 weightRepo: repo,
114 intervallStoreManager: IntervalStoreManager(interval, IntervalStorage(), IntervalStorage()),
115 settings: Settings(weightUnit: WeightUnit.lbs),
116 const WeightList(rangeType: IntervalStoreManagerLocation.mainPage),
117 ));
118 await tester.pumpAndSettle();
119
120 expect(find.text('123 kg'), findsNothing);
121 expect(find.text('55.79 lbs'), findsOneWidget);
122 });
123}