autoconnect on fly mode (does not work yet)
This commit is contained in:
@@ -117,4 +117,23 @@ void main() {
|
||||
|
||||
expect(await repository.loadConnectionWifiSsidPrefix(), 'mLRS-1234');
|
||||
});
|
||||
|
||||
test('gemerkte SSID: Standard ist null (noch nie verbunden)', () async {
|
||||
final settings = await repository.load();
|
||||
expect(settings.connectionWifiLastSsid, isNull);
|
||||
});
|
||||
|
||||
test('setConnectionWifiLastSsid merkt sich die verbundene SSID', () async {
|
||||
await repository.setConnectionWifiLastSsid('mLRS-ABCD');
|
||||
|
||||
expect(await repository.loadConnectionWifiLastSsid(), 'mLRS-ABCD');
|
||||
});
|
||||
|
||||
test('setConnectionWifiLastSsid(null) loescht die Erinnerung wieder',
|
||||
() async {
|
||||
await repository.setConnectionWifiLastSsid('mLRS-ABCD');
|
||||
await repository.setConnectionWifiLastSsid(null);
|
||||
|
||||
expect(await repository.loadConnectionWifiLastSsid(), isNull);
|
||||
});
|
||||
}
|
||||
|
||||
@@ -19,7 +19,9 @@ class FakeMlrsNetworkController implements MlrsNetworkController {
|
||||
final _packetsController = StreamController<MlrsSocketPacket>.broadcast();
|
||||
|
||||
final List<String> requestedSsidPrefixes = [];
|
||||
final List<String?> requestedPreferredSsids = [];
|
||||
final List<({Uint8List data, String host, int port})> sentPackets = [];
|
||||
final List<String> rememberedSsids = [];
|
||||
int releaseCount = 0;
|
||||
int openSocketCount = 0;
|
||||
int closeSocketCount = 0;
|
||||
@@ -38,8 +40,9 @@ class FakeMlrsNetworkController implements MlrsNetworkController {
|
||||
void emitPacket(MlrsSocketPacket packet) => _packetsController.add(packet);
|
||||
|
||||
@override
|
||||
Future<void> requestNetwork(String ssidPrefix) async {
|
||||
Future<void> requestNetwork(String ssidPrefix, {String? preferredSsid}) async {
|
||||
requestedSsidPrefixes.add(ssidPrefix);
|
||||
requestedPreferredSsids.add(preferredSsid);
|
||||
}
|
||||
|
||||
@override
|
||||
@@ -88,12 +91,15 @@ void main() {
|
||||
String? host,
|
||||
int port = 0,
|
||||
String ssidPrefix = 'mLRS-',
|
||||
String? rememberedSsid,
|
||||
MlrsNetworkEvent event = const MlrsNetworkAvailable(),
|
||||
}) async {
|
||||
final transport = UdpTransport(
|
||||
getHost: () async => host,
|
||||
getPort: () async => port,
|
||||
getSsidPrefix: () async => ssidPrefix,
|
||||
getRememberedSsid: () async => rememberedSsid,
|
||||
rememberSsid: (ssid) async => fake.rememberedSsids.add(ssid),
|
||||
networkController: fake,
|
||||
);
|
||||
final connectFuture = transport.connect();
|
||||
@@ -133,6 +139,8 @@ void main() {
|
||||
getHost: () async => null,
|
||||
getPort: () async => 0,
|
||||
getSsidPrefix: () async => 'mLRS-',
|
||||
getRememberedSsid: () async => null,
|
||||
rememberSsid: (_) async {},
|
||||
networkController: fake,
|
||||
);
|
||||
|
||||
@@ -286,4 +294,44 @@ void main() {
|
||||
|
||||
transport.dispose();
|
||||
});
|
||||
|
||||
test('passes the remembered SSID to requestNetwork for a silent reconnect',
|
||||
() async {
|
||||
final fake = FakeMlrsNetworkController();
|
||||
final transport = await connectWithFake(
|
||||
fake,
|
||||
rememberedSsid: 'mLRS-1234',
|
||||
);
|
||||
|
||||
expect(fake.requestedPreferredSsids, ['mLRS-1234']);
|
||||
|
||||
transport.dispose();
|
||||
});
|
||||
|
||||
test('remembers the connected SSID reported by the platform', () async {
|
||||
final fake = FakeMlrsNetworkController();
|
||||
final transport = await connectWithFake(
|
||||
fake,
|
||||
event: const MlrsNetworkAvailable(ssid: 'mLRS-5678'),
|
||||
);
|
||||
|
||||
expect(transport.connectedSsid, 'mLRS-5678');
|
||||
expect(fake.rememberedSsids, ['mLRS-5678']);
|
||||
|
||||
transport.dispose();
|
||||
});
|
||||
|
||||
test('connectedSsid is cleared on disconnect and network loss', () async {
|
||||
final fake = FakeMlrsNetworkController();
|
||||
final transport = await connectWithFake(
|
||||
fake,
|
||||
event: const MlrsNetworkAvailable(ssid: 'mLRS-5678'),
|
||||
);
|
||||
expect(transport.connectedSsid, 'mLRS-5678');
|
||||
|
||||
await transport.disconnect();
|
||||
expect(transport.connectedSsid, isNull);
|
||||
|
||||
transport.dispose();
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import 'dart:convert';
|
||||
|
||||
import 'package:drift/native.dart';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:flutter/services.dart';
|
||||
import 'package:flutter_bloc/flutter_bloc.dart';
|
||||
import 'package:flutter_map/flutter_map.dart';
|
||||
import 'package:flutter_riverpod/flutter_riverpod.dart';
|
||||
@@ -103,6 +104,19 @@ Future<ProviderContainer> _pumpWithContainer(WidgetTester tester) async {
|
||||
}
|
||||
|
||||
void main() {
|
||||
// TopModeBar instanziiert beim Wechsel in den Fly-Modus wifiTransportProvider
|
||||
// (Fortschritts-Pille/Auto-Connect-Pruefung, siehe top_mode_bar.dart) - das
|
||||
// erzeugt standardmaessig einen echten MethodChannelMlrsNetworkController.
|
||||
// Ohne diesen Mock-Handler wirft schon der reine dispose()-Aufruf am
|
||||
// Testende MissingPluginException, weil kein natives Android-Plugin
|
||||
// existiert.
|
||||
TestWidgetsFlutterBinding.ensureInitialized();
|
||||
TestDefaultBinaryMessengerBinding.instance.defaultBinaryMessenger
|
||||
.setMockMethodCallHandler(
|
||||
const MethodChannel('com.dmc.dmc_app/mlrs_network'),
|
||||
(call) async => null,
|
||||
);
|
||||
|
||||
testWidgets('AppShell zeigt die Karte und den Plan/Fly-Umschalter im Startzustand',
|
||||
(tester) async {
|
||||
await tester.pumpWidget(_wrap(const AppShell()));
|
||||
|
||||
Reference in New Issue
Block a user