mirror of
https://github.com/dz0ny/meshcore-sar.git
synced 2026-08-11 16:30:28 +00:00
feat: Add repeater discovery onboarding flow
This commit is contained in:
@@ -38,6 +38,7 @@ Future<void> _pumpDiscoveryScreen(
|
||||
WidgetTester tester, {
|
||||
ContactsProvider? contactsProvider,
|
||||
ConnectionProvider? connectionProvider,
|
||||
DiscoveryScreen screen = const DiscoveryScreen(),
|
||||
}) async {
|
||||
final resolvedContactsProvider = contactsProvider ?? ContactsProvider();
|
||||
final resolvedConnectionProvider =
|
||||
@@ -56,7 +57,7 @@ Future<void> _pumpDiscoveryScreen(
|
||||
child: MaterialApp(
|
||||
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||
supportedLocales: AppLocalizations.supportedLocales,
|
||||
home: const DiscoveryScreen(),
|
||||
home: screen,
|
||||
),
|
||||
),
|
||||
);
|
||||
@@ -113,6 +114,21 @@ void main() {
|
||||
},
|
||||
);
|
||||
|
||||
testWidgets('auto discovery can trigger repeater discovery on open', (
|
||||
tester,
|
||||
) async {
|
||||
final connectionProvider = _FakeConnectionProvider(isConnected: true);
|
||||
|
||||
await _pumpDiscoveryScreen(
|
||||
tester,
|
||||
connectionProvider: connectionProvider,
|
||||
screen: const DiscoveryScreen(autoDiscoverRepeatersOnOpen: true),
|
||||
);
|
||||
|
||||
expect(connectionProvider.discoveredAdvertTypes, [2]);
|
||||
expect(find.text('Repeater discovery sent'), findsOneWidget);
|
||||
});
|
||||
|
||||
testWidgets('search and inline type filters narrow discovered nodes', (
|
||||
tester,
|
||||
) async {
|
||||
|
||||
67
test/widgets/connection_dialog_test.dart
Normal file
67
test/widgets/connection_dialog_test.dart
Normal file
@@ -0,0 +1,67 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter_test/flutter_test.dart';
|
||||
import 'package:meshcore_sar_app/l10n/app_localizations.dart';
|
||||
import 'package:meshcore_sar_app/providers/connection_provider.dart';
|
||||
import 'package:meshcore_sar_app/widgets/connection_dialog.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
|
||||
class _FakeConnectionProvider extends ConnectionProvider {
|
||||
int startScanCalls = 0;
|
||||
int stopScanCalls = 0;
|
||||
bool _isScanning = false;
|
||||
|
||||
@override
|
||||
bool get isScanning => _isScanning;
|
||||
|
||||
@override
|
||||
List<ScannedDevice> get scannedDevices => const [];
|
||||
|
||||
@override
|
||||
String? get error => null;
|
||||
|
||||
@override
|
||||
Future<void> startScan() async {
|
||||
startScanCalls += 1;
|
||||
_isScanning = true;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
@override
|
||||
Future<void> stopScan() async {
|
||||
stopScanCalls += 1;
|
||||
_isScanning = false;
|
||||
notifyListeners();
|
||||
}
|
||||
}
|
||||
|
||||
void main() {
|
||||
testWidgets('BLE scan waits for explicit user action', (tester) async {
|
||||
final connectionProvider = _FakeConnectionProvider();
|
||||
|
||||
await tester.pumpWidget(
|
||||
ChangeNotifierProvider<ConnectionProvider>.value(
|
||||
value: connectionProvider,
|
||||
child: MaterialApp(
|
||||
localizationsDelegates: AppLocalizations.localizationsDelegates,
|
||||
supportedLocales: AppLocalizations.supportedLocales,
|
||||
home: const Scaffold(body: ConnectionDialog()),
|
||||
),
|
||||
),
|
||||
);
|
||||
|
||||
await tester.pump();
|
||||
|
||||
expect(connectionProvider.startScanCalls, 0);
|
||||
expect(
|
||||
find.text('Press scan to search for nearby devices'),
|
||||
findsOneWidget,
|
||||
);
|
||||
expect(find.text('Scan'), findsOneWidget);
|
||||
|
||||
await tester.tap(find.widgetWithText(FilledButton, 'Scan'));
|
||||
await tester.pump();
|
||||
|
||||
expect(connectionProvider.stopScanCalls, 1);
|
||||
expect(connectionProvider.startScanCalls, 1);
|
||||
});
|
||||
}
|
||||
Reference in New Issue
Block a user