Commit 9be766d

derdilla <82763757+NobodyForNothing@users.noreply.github.com>
2024-04-11 18:42:34
test ble input states
Signed-off-by: derdilla <82763757+NobodyForNothing@users.noreply.github.com>
1 parent e6e2712
Changed files (2)
app
lib
components
ble_input
test
ui
app/lib/components/ble_input/ble_input.dart
@@ -88,6 +88,7 @@ class _BleInputState extends State<BleInput> {
   );
 
   Widget _buildLoadSuccess(BleInputLoadSuccess state) {
+    // List of available ble devices
     final localizations = AppLocalizations.of(context)!;
     if (state.availableDevices.isEmpty) {
       return _buildTwoElementCard(context,
app/test/ui/components/ble_input_test.dart
@@ -0,0 +1,55 @@
+import 'dart:typed_data';
+
+import 'package:blood_pressure_app/components/ble_input/ble_input.dart';
+import 'package:blood_pressure_app/components/ble_input/ble_input_bloc.dart';
+import 'package:blood_pressure_app/components/ble_input/ble_input_events.dart';
+import 'package:blood_pressure_app/components/ble_input/ble_input_state.dart';
+import 'package:flutter/material.dart';
+import 'package:flutter_bloc/flutter_bloc.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:flutter_reactive_ble/flutter_reactive_ble.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'util.dart';
+
+class _MockBlock extends Bloc<BleInputEvent, BleInputState> implements BleInputBloc {
+  _MockBlock(super.initialState);
+}
+
+void main() {
+  testWidgets('should display closed state', (tester) async {
+    await tester.pumpWidget(materialApp(BleInput(bloc: _MockBlock(BleInputClosed()))));
+    expect(find.byIcon(Icons.bluetooth), findsOneWidget);
+    expect(find.byType(IconButton), findsOneWidget);
+    await tester.pumpAndSettle();
+    expect(tester.takeException(), isNull);
+  });
+  testWidgets('should display loaded state without devices', (tester) async {
+    await tester.pumpWidget(materialApp(BleInput(bloc: _MockBlock(BleInputLoadSuccess([])))));
+    final localizations = await AppLocalizations.delegate.load(const Locale('en'));
+    expect(find.text(localizations.errBleNoDev), findsOneWidget);
+    expect(find.byIcon(Icons.close), findsOneWidget);
+    await tester.pumpAndSettle();
+    expect(tester.takeException(), isNull);
+  });
+  testWidgets('should display loaded state with device', (tester) async {
+    await tester.pumpWidget(materialApp(BleInput(bloc: _MockBlock(BleInputLoadSuccess([
+      DiscoveredDevice(
+        id: 'id',
+        name: 'name',
+        serviceData: const {},
+        manufacturerData: Uint8List(2),
+        rssi: 123,
+        serviceUuids: [Uuid.parse('1810')],
+        connectable: Connectable.available,
+      ),
+    ])))));
+    expect(find.byType(ListView), findsOneWidget);
+    expect(find.byIcon(Icons.close), findsOneWidget);
+    expect(find.text('name'), findsOneWidget);
+    await tester.pumpAndSettle();
+    expect(tester.takeException(), isNull);
+  });
+
+  // BleInputLoadSuccess([DiscoveredDevice(id: 'id', name: 'name', serviceData: {}, manufacturerData: Uint8List(2), rssi: 123, serviceUuids: [], connectable: Connectable.available)])
+}