main
 1import 'package:blood_pressure_app/app.dart';
 2import 'package:blood_pressure_app/features/input/add_entry_dialogue.dart';
 3import 'package:blood_pressure_app/features/measurement_list/measurement_list_entry.dart';
 4import 'package:blood_pressure_app/features/settings/tiles/color_picker_list_tile.dart';
 5import 'package:blood_pressure_app/screens/home_screen.dart';
 6import 'package:flutter/material.dart';
 7import 'package:blood_pressure_app/l10n/app_localizations.dart';
 8import 'package:flutter_test/flutter_test.dart';
 9import 'package:health_data_store/health_data_store.dart';
10import 'package:integration_test/integration_test.dart';
11
12import '../test/features/settings/tiles/color_picker_list_tile_test.dart';
13import 'util.dart';
14
15void main() {
16  IntegrationTestWidgetsFlutterBinding.ensureInitialized();
17  testWidgets('Can enter value only measurements', (WidgetTester tester) async {
18    final localizations = await AppLocalizations.delegate.load(const Locale('en'));
19    await tester.pumpWidget(App());
20    await tester.pumpAndSettle();
21    await tester.pumpUntil(() => find.byType(AppHome).hasFound);
22    expect(find.byType(AppHome), findsOneWidget);
23    expect(find.byType(AddEntryDialogue), findsNothing);
24    expect(find.byType(MeasurementListRow), findsNothing);
25
26    expect(find.byIcon(Icons.add), findsOneWidget);
27    await tester.tap(find.byIcon(Icons.add));
28    await tester.pumpAndSettle();
29    expect(find.byType(AddEntryDialogue), findsOneWidget);
30
31    await tester.enterText(find.byType(TextFormField).at(0), '123'); // sys
32    await tester.enterText(find.byType(TextFormField).at(1), '67'); // dia
33    await tester.enterText(find.byType(TextFormField).at(2), '56'); // pul
34
35    await tester.tap(find.text(localizations.btnSave));
36    await tester.pumpAndSettle();
37    expect(find.byType(AddEntryDialogue), findsNothing);
38
39    await tester.pumpUntil(() => !find.text(localizations.loading).hasFound);
40    expect(find.text(localizations.loading), findsNothing);
41
42    expect(find.byType(MeasurementListRow), findsOneWidget);
43    expect(find.descendant(
44      of: find.byType(MeasurementListRow),
45      matching: find.text('123'),
46    ), findsOneWidget,);
47    expect(find.descendant(
48      of: find.byType(MeasurementListRow),
49      matching: find.text('67'),
50    ), findsOneWidget,);
51    expect(find.descendant(
52      of: find.byType(MeasurementListRow),
53      matching: find.text('56'),
54    ), findsOneWidget,);
55
56  });
57
58  testWidgets('Can enter complex measurements', (WidgetTester tester) async {
59    final localizations = await AppLocalizations.delegate.load(const Locale('en'));
60    await tester.pumpWidget(App());
61    await tester.pumpAndSettle();
62    await tester.pumpUntil(() => find.byType(AppHome).hasFound);
63    expect(find.byType(AppHome), findsOneWidget);
64
65    await tester.tap(find.byIcon(Icons.add));
66    await tester.pumpAndSettle();
67    expect(find.byType(AddEntryDialogue), findsOneWidget);
68
69    await tester.enterText(find.byType(TextFormField).at(0), '123'); // sys
70    await tester.enterText(find.byType(TextFormField).at(1), '67'); // dia
71    await tester.enterText(find.byType(TextFormField).at(2), '56'); // pul
72    await tester.enterText(find.byType(TextFormField).at(3), 'some test sample note'); // note
73    await tester.tap(find.byType(ColorSelectionListTile));
74    await tester.pumpAndSettle();
75    await tester.tap(find.byElementPredicate(findColored(Colors.red)));
76    await tester.pumpAndSettle();
77
78    await tester.tap(find.text(localizations.btnSave));
79    await tester.pumpAndSettle();
80    expect(find.byType(AddEntryDialogue), findsNothing);
81
82    await tester.pumpUntil(() => !find.text(localizations.loading).hasFound);
83    expect(find.text(localizations.loading), findsNothing);
84
85    expect(find.byType(MeasurementListRow), findsOneWidget);
86    final submittedRecord = tester.widget<MeasurementListRow>(find.byType(MeasurementListRow)).data;
87    expect(submittedRecord.sys?.mmHg, 123);
88    expect(submittedRecord.dia?.mmHg, 67);
89    expect(submittedRecord.pul, 56);
90    expect(submittedRecord.color, Colors.red.toARGB32());
91    expect(submittedRecord.note, 'some test sample note');
92
93    expect(find.text('some test sample note'), findsNothing);
94    await tester.tap(find.byType(MeasurementListRow));
95    await tester.pumpAndSettle();
96    expect(find.text('some test sample note'), findsOneWidget);
97  });
98}