From 672047924cf2e6154dd20205682afb361aa15fd2 Mon Sep 17 00:00:00 2001 From: edde746 <86283021+edde746@users.noreply.github.com> Date: Sun, 9 Aug 2026 18:50:28 +0200 Subject: [PATCH] fix(test): stop the desktop prefs preflight deadlocking widget tests on Linux PrefsRecovery.assertStoreReadable reads the real on-disk store through path_provider, and on the hosts where it is active (Linux and Windows) that genuine file IO can never complete inside testWidgets' fake async zone. Since 7f0cad33 wired the preflight into shared-preference init, every widget test that initialises settings on the Linux CI runner hung for its full ten-minute timeout, turning the unit-test job into a six-hour cancellation. The hermetic prefs fixture swaps the backends for in-memory fakes anyway, so it now disables the preflight and restores it on teardown; the repair-flow suite keeps opting in explicitly. Verified in an ubuntu-24.04 container on Flutter 3.44.0: the full suite now completes in nine minutes with zero failures. --- test/test_helpers/prefs.dart | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/test_helpers/prefs.dart b/test/test_helpers/prefs.dart index b53b9c95..be8c5a25 100644 --- a/test/test_helpers/prefs.dart +++ b/test/test_helpers/prefs.dart @@ -1,5 +1,6 @@ import 'package:flutter_test/flutter_test.dart'; import 'package:plezy/services/base_shared_preferences_service.dart'; +import 'package:plezy/services/prefs_recovery.dart'; import 'package:plezy/services/settings_service.dart'; import 'package:shared_preferences/shared_preferences.dart'; import 'package:shared_preferences_platform_interface/in_memory_shared_preferences_async.dart'; @@ -17,8 +18,18 @@ void resetSharedPreferencesForTest({Map initialAsync = const {}} SharedPreferences.resetStatic(); SettingsService.resetForTesting(); BaseSharedPreferencesService.resetForTesting(); + PrefsRecovery.debugSetSupportedPlatformOverride(null); }); TestWidgetsFlutterBinding.ensureInitialized(); + // The desktop store preflight (`PrefsRecovery.assertStoreReadable`) reads + // the real on-disk store through path_provider. These fixtures replace the + // preference backends with in-memory fakes, so there is no real store to + // validate — and on the hosts where the preflight is active (Linux and + // Windows) its genuine file IO can never complete inside `testWidgets`' + // fake async zone, deadlocking every widget test that initialises settings + // until the ten-minute timeout. Suites that exercise the preflight itself + // (`prefs_store_repair_flow_test.dart`) opt back in explicitly. + PrefsRecovery.debugSetSupportedPlatformOverride(false); SharedPreferences.setMockInitialValues({}); SharedPreferencesAsyncPlatform.instance = initialAsync.isEmpty ? InMemorySharedPreferencesAsync.empty()