main
 1import 'package:blood_pressure_app/features/data_picker/interval_picker.dart';
 2import 'package:blood_pressure_app/features/home/navigation_action_buttons.dart';
 3import 'package:blood_pressure_app/features/measurement_list/compact_measurement_list.dart';
 4import 'package:blood_pressure_app/features/measurement_list/measurement_list.dart';
 5import 'package:blood_pressure_app/features/statistics/value_graph.dart';
 6import 'package:blood_pressure_app/model/storage/settings_store.dart';
 7import 'package:blood_pressure_app/screens/home_screen.dart';
 8import 'package:flutter/material.dart';
 9import 'package:flutter_test/flutter_test.dart';
10
11import '../model/analyzer_test.dart';
12import '../util.dart';
13
14void main() {
15  final TestWidgetsFlutterBinding binding = TestWidgetsFlutterBinding.ensureInitialized();
16
17  testWidgets('shows graph above list in phone mode', (tester) async {
18    await binding.setSurfaceSize(const Size(400, 800));
19
20    await tester.pumpWidget(await appBaseWithData(const AppHome()));
21    await tester.pumpAndSettle();
22
23    expect(find.byType(NavigationActionButtons), findsOneWidget);
24
25    expect(find.byType(BloodPressureValueGraph), findsOneWidget);
26    expect(find.byType(IntervalPicker), findsOneWidget);
27    expect(find.byType(MeasurementList), findsOneWidget);
28
29    expect(
30      tester.getCenter(find.byType(BloodPressureValueGraph)).dy,
31      lessThan(tester.getCenter(find.byType(IntervalPicker)).dy)
32    );
33    expect(
34        tester.getCenter(find.byType(IntervalPicker)).dy,
35        lessThan(tester.getCenter(find.byType(MeasurementList)).dy)
36    );
37  });
38
39  testWidgets('only shows graph in landscape more', (tester) async {
40    await binding.setSurfaceSize(const Size(800, 400));
41
42    await tester.pumpWidget(await appBaseWithData(const AppHome(),
43      records: [mockRecord(sys: 123)],
44    ));
45    await tester.pumpAndSettle();
46
47    expect(find.byType(BloodPressureValueGraph), findsOneWidget);
48    expect(find.byType(SafeArea), findsAtLeast(1));
49    expect(find.byType(Scaffold), findsAtLeast(1));
50    expect(find.byType(NavigationActionButtons), findsNothing);
51    expect(find.byType(IntervalPicker), findsOneWidget);
52    expect(find.byType(MeasurementList), findsNothing);
53  });
54
55  testWidgets('respects compact list setting', (tester) async {
56    await binding.setSurfaceSize(const Size(400, 800));
57
58    final s = Settings(useLegacyList: false);
59    await tester.pumpWidget(await appBaseWithData(const AppHome(), settings: s));
60    await tester.pumpAndSettle();
61
62    expect(find.byType(MeasurementList), findsOneWidget);
63    expect(find.byType(CompactMeasurementList), findsNothing);
64
65    s.compactList = true;
66    await tester.pump();
67
68    expect(find.byType(MeasurementList), findsNothing);
69    expect(find.byType(CompactMeasurementList), findsOneWidget);
70  });
71
72  testWidgets('landscape graph is wrapped in theming', (tester) async {
73    await binding.setSurfaceSize(const Size(800, 400));
74
75    await tester.pumpWidget(appBaseForScreen(const AppHome()));
76    await tester.pumpAndSettle();
77
78    expect(find.byType(BloodPressureValueGraph), findsOneWidget);
79    expect(find.ancestor(of: find.byType(BloodPressureValueGraph), matching: find.byType(Scaffold)), findsOneWidget);
80    expect(find.ancestor(of: find.byType(BloodPressureValueGraph), matching: find.byType(MaterialApp)), findsOneWidget);
81  });
82
83  testWidgets('includes safe area in phone mode', (tester) async {
84    await binding.setSurfaceSize(const Size(400, 800));
85
86    await tester.pumpWidget(await appBaseWithData(const AppHome()));
87    await tester.pumpAndSettle();
88
89    expect(find.byType(SafeArea), findsOneWidget);
90  });
91}