Commit 3148095

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-05-17 07:18:04
extract and test measurement success UI
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent da5114d
Changed files (6)
app/lib/components/bluetooth_input/measurement_failure.dart
@@ -9,8 +9,6 @@ class MeasurementFailure extends StatelessWidget {
 
   /// Called when the user requests closing.
   final void Function() onTap;
-
-  // TODO: test
   
   @override
   Widget build(BuildContext context) => GestureDetector(
app/lib/components/bluetooth_input/measurement_success.dart
@@ -0,0 +1,32 @@
+import 'package:blood_pressure_app/components/bluetooth_input/input_card.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+
+/// Indication of a successful bluetooth measurement.
+class MeasurementSuccess extends StatelessWidget {
+  /// Indicate a successful while taking a bluetooth measurement.
+  const MeasurementSuccess({super.key, required this.onTap});
+
+  /// Called when the user requests closing.
+  final void Function() onTap;
+  
+  @override
+  Widget build(BuildContext context) => GestureDetector(
+    onTap: onTap,
+    child: InputCard(
+      onClosed: onTap,
+      child: Center(
+        child: Column(
+          mainAxisAlignment: MainAxisAlignment.center,
+          children: [
+            const Icon(Icons.done, color: Colors.green),
+            const SizedBox(height: 8,),
+            Text(AppLocalizations.of(context)!.measurementSuccess),
+            const SizedBox(height: 8,),
+          ],
+        ),
+      ),
+    ),
+  );
+  
+}
app/lib/components/bluetooth_input.dart
@@ -7,6 +7,7 @@ import 'package:blood_pressure_app/components/bluetooth_input/closed_bluetooth_i
 import 'package:blood_pressure_app/components/bluetooth_input/device_selection.dart';
 import 'package:blood_pressure_app/components/bluetooth_input/input_card.dart';
 import 'package:blood_pressure_app/components/bluetooth_input/measurement_failure.dart';
+import 'package:blood_pressure_app/components/bluetooth_input/measurement_success.dart';
 import 'package:blood_pressure_app/model/storage/storage.dart';
 import 'package:flutter/material.dart';
 import 'package:flutter_bloc/flutter_bloc.dart';
@@ -81,17 +82,8 @@ class _BluetoothInputState extends State<BluetoothInput> {
             BleReadFailure() => MeasurementFailure(
               onTap: _returnToIdle,
             ),
-            BleReadSuccess() => _buildMainCard(context,
-              child: Center(
-                child: Column(
-                  mainAxisAlignment: MainAxisAlignment.center,
-                  children: [
-                    const Icon(Icons.done, color: Colors.green),
-                    const SizedBox(height: 8,),
-                    Text(AppLocalizations.of(context)!.measurementSuccess),
-                  ],
-                ),
-              ),
+            BleReadSuccess() => MeasurementSuccess(
+              onTap: _returnToIdle,
             ),
           },
         ),
app/lib/l10n/app_en.arb
@@ -509,9 +509,9 @@
   "@errBleNoPerms": {},
   "bluetoothDisabled": "Bluetooth disabled",
   "@bluetoothDisabled": {},
-  "errMeasurementRead": "Error reading measurement!",
+  "errMeasurementRead": "Error while taking measurement!",
   "@errBluetooth": {},
-  "measurementSuccess": "Measurement taken successfully",
+  "measurementSuccess": "Measurement taken successfully!",
   "@measurementSuccess": {},
   "connect": "Connect",
   "@connect": {},
app/test/ui/components/bluetooth_input/measurement_failure_test.dart
@@ -8,7 +8,7 @@ import '../util.dart';
 
 
 void main() {
-  testWidgets('should show states correctly', (WidgetTester tester) async {
+  testWidgets('should show everything and be interactive', (WidgetTester tester) async {
     int tapCount = 0;
     await tester.pumpWidget(materialApp(MeasurementFailure(
       onTap: () => tapCount++,
app/test/ui/components/bluetooth_input/measurement_success_test.dart
@@ -0,0 +1,30 @@
+
+import 'package:blood_pressure_app/components/bluetooth_input/measurement_success.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import '../util.dart';
+
+
+void main() {
+  testWidgets('should show everything and be interactive', (WidgetTester tester) async {
+    int tapCount = 0;
+    await tester.pumpWidget(materialApp(MeasurementSuccess(
+      onTap: () => tapCount++,
+    )));
+
+    expect(find.byIcon(Icons.done), findsOneWidget);
+    expect(find.byIcon(Icons.close), findsOneWidget);
+    final localizations = await AppLocalizations.delegate.load(const Locale('en'));
+    expect(find.text(localizations.measurementSuccess), findsOneWidget);
+
+    expect(tapCount, 0);
+    await tester.tap(find.text(localizations.measurementSuccess));
+    await tester.pump();
+    expect(tapCount, 1);
+    await tester.tap(find.byIcon(Icons.close));
+    await tester.pump();
+    expect(tapCount, 2);
+  });
+}