main
 1
 2import 'package:blood_pressure_app/features/bluetooth/logic/characteristics/ble_measurement_data.dart';
 3import 'package:blood_pressure_app/features/bluetooth/logic/characteristics/ble_measurement_status.dart';
 4import 'package:blood_pressure_app/features/bluetooth/ui/measurement_multiple.dart';
 5import 'package:flutter/material.dart';
 6import 'package:blood_pressure_app/l10n/app_localizations.dart';
 7import 'package:flutter_test/flutter_test.dart';
 8
 9import '../../../util.dart';
10
11
12void main() {
13  testWidgets('should show everything and be interactive', (WidgetTester tester) async {
14    int tapCount = 0;
15    final List<BleMeasurementData> selected = [];
16    final measurements = [
17      BleMeasurementData(
18        systolic: 123,
19        diastolic: 456,
20        pulse: 67,
21        meanArterialPressure: 123456,
22        isMMHG: true,
23        userID: 3,
24        status: BleMeasurementStatus(
25          bodyMovementDetected: true,
26          cuffTooLose: true,
27          irregularPulseDetected: true,
28          pulseRateInRange: true,
29          pulseRateExceedsUpperLimit: true,
30          pulseRateIsLessThenLowerLimit: true,
31          improperMeasurementPosition: true,
32        ),
33        timestamp: DateTime.now().subtract(const Duration(minutes: 1)),
34      ),
35      BleMeasurementData(
36        systolic: 124,
37        diastolic: 457,
38        pulse: null,
39        meanArterialPressure: 123457,
40        isMMHG: true,
41        userID: null,
42        status: BleMeasurementStatus(
43          bodyMovementDetected: true,
44          cuffTooLose: true,
45          irregularPulseDetected: true,
46          pulseRateInRange: true,
47          pulseRateExceedsUpperLimit: true,
48          pulseRateIsLessThenLowerLimit: true,
49          improperMeasurementPosition: true,
50        ),
51        timestamp: null,
52      ),
53    ];
54
55    await tester.pumpWidget(materialApp(MeasurementMultiple(
56      onClosed: () => tapCount++,
57      onSelect: selected.add,
58      measurements: measurements,
59    )));
60
61    final localizations = await AppLocalizations.delegate.load(const Locale('en'));
62    expect(find.text(localizations.selectMeasurementTitle), findsOneWidget);
63    expect(find.byIcon(Icons.close), findsOneWidget);
64
65    expect(find.byType(ListTile), findsNWidgets(2));
66
67    expect(find.textContaining(localizations.userID), findsOneWidget); // one measurement has UserID: null
68    expect(find.textContaining(localizations.bloodPressure), findsNWidgets(2));
69    for (final measurement in measurements) {
70      expect(find.textContaining(measurement.systolic.toInt().toString()), findsOneWidget);
71    }
72
73    expect(find.text(localizations.measurementIndex(2)), findsOneWidget);
74    expect(find.text(localizations.select), findsNWidgets(2));
75
76    expect(selected, isEmpty);
77    await tester.tap(find.text(localizations.select).first);
78    expect(selected.length, 1);
79    expect(selected, contains(measurements[0]));
80
81    expect(tapCount, 0);
82    await tester.tap(find.byIcon(Icons.close));
83    await tester.pump();
84    expect(tapCount, 1);
85  });
86}