Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion docs/state-management.md
Original file line number Diff line number Diff line change
Expand Up @@ -108,7 +108,7 @@ ProviderContainer(overrides: [
packageInfoProvider.overrideWithValue(packageInfo), // required if using App4Training
fileSystemProvider.overrideWith((ref) => MemoryFileSystem()), // optional
httpClientProvider.overrideWith((ref) => mockClient), // optional
languageProvider.overrideWith(() => TestLanguageController(...)), // optional
languageProvider.overrideWith2((languageCode) => TestLanguageController(...)), // optional
languageStatusProvider.overrideWith(() => TestLanguageStatus()), // optional
backgroundSchedulerProvider.overrideWith(() => TestBackgroundScheduler()), // for /startup tests
])
Expand Down
2 changes: 1 addition & 1 deletion docs/testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -92,7 +92,7 @@ testWidgets('...', (tester) async {
overrides: [
sharedPrefsProvider.overrideWithValue(prefs),
packageInfoProvider.overrideWithValue(...),
languageProvider.overrideWith(() => TestLanguageController(initReturns: true)),
languageProvider.overrideWith2((languageCode) => TestLanguageController(initReturns: true)),
],
child: const MaterialApp(
locale: Locale('de'),
Expand Down
60 changes: 40 additions & 20 deletions integration_test/background_interaction_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -31,14 +31,22 @@ void main() async {
// Waiting for the background task to finish its work
completer.complete(data);
});
await Workmanager().initialize(backgroundTask, isInDebugMode: false);
await Workmanager().registerOneOffTask("task-identifier", "testTask",
initialDelay: const Duration(seconds: 2));

await tester.pumpWidget(ProviderScope(overrides: [
sharedPrefsProvider.overrideWithValue(prefs),
packageInfoProvider.overrideWithValue(packageInfo)
], child: const App4Training()));
await Workmanager().initialize(backgroundTask);
await Workmanager().registerOneOffTask(
"task-identifier",
"testTask",
initialDelay: const Duration(seconds: 2),
);

await tester.pumpWidget(
ProviderScope(
overrides: [
sharedPrefsProvider.overrideWithValue(prefs),
packageInfoProvider.overrideWithValue(packageInfo),
],
child: const App4Training(),
),
);
expect(find.text('Loading'), findsOneWidget);

// Wait for the background isolate to finish
Expand All @@ -62,15 +70,24 @@ void main() async {
});
var fileSystem = await createTestFileSystem();

await tester.pumpWidget(ProviderScope(overrides: [
sharedPrefsProvider.overrideWithValue(prefs),
packageInfoProvider.overrideWithValue(packageInfo),
fileSystemProvider.overrideWith((ref) => fileSystem),
// We need to mock DownloadAssetsController because we can't use a memory
// file system to test it (it uses dart:io, not the file package)
languageProvider.overrideWith(() => LanguageController(
assetsController: createMockDownloadAssetsController())),
], child: const App4Training()));
await tester.pumpWidget(
ProviderScope(
overrides: [
sharedPrefsProvider.overrideWithValue(prefs),
packageInfoProvider.overrideWithValue(packageInfo),
fileSystemProvider.overrideWith((ref) => fileSystem),
// We need to mock DownloadAssetsController because we can't use a memory
// file system to test it (it uses dart:io, not the file package)
languageProvider.overrideWith2(
(languageCode) => LanguageController(
languageCode: languageCode,
assetsController: createMockDownloadAssetsController(),
),
),
],
child: const App4Training(),
),
);
expect(find.text('Loading'), findsOneWidget);
await tester.pumpAndSettle();

Expand All @@ -83,9 +100,12 @@ void main() async {
Navigator.of(tester.element(find.byType(Scaffold))).pop();
await tester.pumpAndSettle();

await Workmanager().initialize(backgroundTask, isInDebugMode: false);
await Workmanager().registerOneOffTask("task-identifier", "testTask",
initialDelay: const Duration(seconds: 2));
await Workmanager().initialize(backgroundTask);
await Workmanager().registerOneOffTask(
"task-identifier",
"testTask",
initialDelay: const Duration(seconds: 2),
);

// Wait for the background isolate to finish
final msg = await completer.future.timeout(const Duration(seconds: 10));
Expand Down
27 changes: 18 additions & 9 deletions lib/background/background_task.dart
Original file line number Diff line number Diff line change
Expand Up @@ -19,8 +19,10 @@ Future<void> writeLog(String message) async {
debugPrint(message);
final path = await getApplicationDocumentsDirectory();
final file = File('${path.path}/background.log');
await file.writeAsString('${DateTime.now().toIso8601String()}: $message\n',
mode: FileMode.append);
await file.writeAsString(
'${DateTime.now().toIso8601String()}: $message\n',
mode: FileMode.append,
);
} catch (e) {
debugPrint('Error writing message $message to file: $e');
}
Expand Down Expand Up @@ -52,7 +54,8 @@ Future<void> backgroundMain() async {
final prefs = await SharedPreferences.getInstance();

final ref = ProviderContainer(
overrides: [sharedPrefsProvider.overrideWithValue(prefs)]);
overrides: [sharedPrefsProvider.overrideWithValue(prefs)],
);
await backgroundCheck(ref);

// TODO: check automatic updates setting; if necessary check connectivity
Expand All @@ -66,12 +69,18 @@ Future<void> backgroundTestMain() async {
final prefs = await SharedPreferences.getInstance();
var fileSystem = await createTestFileSystem();

final ref = ProviderContainer(overrides: [
sharedPrefsProvider.overrideWithValue(prefs),
fileSystemProvider.overrideWith((ref) => fileSystem),
languageProvider.overrideWith(() => LanguageController(
assetsController: createMockDownloadAssetsController()))
]);
final ref = ProviderContainer(
overrides: [
sharedPrefsProvider.overrideWithValue(prefs),
fileSystemProvider.overrideWith((ref) => fileSystem),
languageProvider.overrideWith2(
(languageCode) => LanguageController(
languageCode: languageCode,
assetsController: createMockDownloadAssetsController(),
),
),
],
);
await backgroundCheck(ref);
}

Expand Down
2 changes: 1 addition & 1 deletion lib/data/globals.dart
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ final packageInfoProvider = MustOverrideProvider<PackageInfo>();
Provider<T> MustOverrideProvider<T>() {
return Provider<T>(
(_) => throw ProviderNotOverriddenException(),
retry: (_, __) => null, // Disable v3 automatic retry - must fail fast
retry: (_, _) => null, // Disable v3 automatic retry - must fail fast
);
}

Expand Down
Loading
Loading