Commit 2e9b1e8
Changed files (2)
app
lib
components
test
ui
components
bluetooth_input
app/lib/components/bluetooth_input.dart
@@ -70,7 +70,7 @@ class _BluetoothInputState extends State<BluetoothInput> {
SingleDeviceAvailable() => DeviceSelection(
scanResults: [ state.device ],
onAccepted: (dev) => _deviceScanCubit!.acceptDevice(dev),
- ), // TODO: remove DeviceListAvailable and SingleDeviceAvailable
+ ),
// distinction
DeviceSelected() => BlocBuilder<BleReadCubit, BleReadState>(
bloc: BleReadCubit(state.device),
app/test/ui/components/bluetooth_input/device_selection_test.dart
@@ -0,0 +1,72 @@
+import 'dart:ui';
+
+import 'package:blood_pressure_app/components/bluetooth_input/device_selection.dart';
+import 'package:flutter_blue_plus/flutter_blue_plus.dart';
+import 'package:flutter_gen/gen_l10n/app_localizations.dart';
+import 'package:flutter_test/flutter_test.dart';
+import 'package:mockito/annotations.dart';
+import 'package:mockito/mockito.dart';
+
+import '../util.dart';
+@GenerateNiceMocks([
+ MockSpec<BluetoothDevice>(),
+ MockSpec<ScanResult>(),
+])
+import 'device_selection_test.mocks.dart';
+
+void main() {
+ testWidgets('Connects with one element', (WidgetTester tester) async {
+ final dev = MockBluetoothDevice();
+ when(dev.platformName).thenReturn('Test device with long name (No.124356)');
+
+ final scanRes = MockScanResult();
+ when(scanRes.device).thenReturn(dev);
+
+ final List<BluetoothDevice> accepted = [];
+ await tester.pumpWidget(materialApp(DeviceSelection(
+ scanResults: [ scanRes ],
+ onAccepted: accepted.add,
+ )));
+
+ expect(find.text('Test device with long name (No.124356)'), findsOneWidget);
+ final localizations = await AppLocalizations.delegate.load(const Locale('en'));
+ expect(find.text(localizations.connect), findsOneWidget);
+
+ expect(accepted, isEmpty);
+ await tester.tap(find.text(localizations.connect));
+ expect(accepted.length, 1);
+ expect(accepted, contains(dev));
+
+
+ await tester.tap(find.text('Test device with long name (No.124356)'));
+ expect(accepted.length, 2);
+ expect(accepted, containsAllInOrder([dev, dev]));
+ });
+
+ testWidgets('Shows multiple elements', (WidgetTester tester) async {
+ ScanResult getDev(String name) {
+ final dev = MockBluetoothDevice();
+ when(dev.platformName).thenReturn(name);
+
+ final scanRes = MockScanResult();
+ when(scanRes.device).thenReturn(dev);
+
+ return scanRes;
+ }
+
+ await tester.pumpWidget(materialApp(DeviceSelection(
+ scanResults: [
+ getDev('dev1'),
+ getDev('dev2'),
+ getDev('dev3'),
+ ],
+ onAccepted: (dev) => fail('No entry tapped'),
+ )));
+
+ expect(find.text('dev1'), findsOneWidget);
+ expect(find.text('dev2'), findsOneWidget);
+ expect(find.text('dev3'), findsOneWidget);
+ final localizations = await AppLocalizations.delegate.load(const Locale('en'));
+ expect(find.text(localizations.connect), findsNWidgets(3));
+ });
+}