summaryrefslogtreecommitdiff
path: root/player-android/test/screens
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-21 23:50:26 +0300
committerPaul Buetow <paul@buetow.org>2026-05-21 23:50:26 +0300
commit1b66b5f573c8de883947d712057ff85f5513e8ae (patch)
tree8e68cfbcc053adec35159b6e21f82b0bd2ade1e1 /player-android/test/screens
parent3e0aa0f0eb94d8a43d57a6d257206673a397aac3 (diff)
Implement offline progress queue with sqflite and connectivity_plus (3b)
Introduces ProgressQueue backed by SQLite for offline-capable progress tracking, with ProgressQueueBase (LSP+DIP), databaseFactory injection (DIP), and ProgressSyncClient narrow interface (ISP). Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Diffstat (limited to 'player-android/test/screens')
-rw-r--r--player-android/test/screens/audio_player_screen_test.dart26
-rw-r--r--player-android/test/screens/video_player_screen_test.dart30
2 files changed, 56 insertions, 0 deletions
diff --git a/player-android/test/screens/audio_player_screen_test.dart b/player-android/test/screens/audio_player_screen_test.dart
index a7af1fb..0c10177 100644
--- a/player-android/test/screens/audio_player_screen_test.dart
+++ b/player-android/test/screens/audio_player_screen_test.dart
@@ -39,8 +39,10 @@ import 'package:player_android/api/dio_client.dart';
import 'package:player_android/api/player_api_client.dart';
import 'package:player_android/providers/api_client_provider.dart';
import 'package:player_android/providers/audio_handler_provider.dart';
+import 'package:player_android/providers/progress_queue_provider.dart';
import 'package:player_android/screens/audio_player_screen.dart';
import 'package:player_android/services/audio_handler.dart';
+import 'package:player_android/services/progress_queue.dart';
// ---------------------------------------------------------------------------
// Fakes
@@ -99,6 +101,27 @@ class _FakeApiClient extends PlayerApiClient {
'http://localhost:8080/api/v1/media/$mediaId/stream';
}
+/// No-op [ProgressQueueBase] stub for widget tests.
+///
+/// Implements [ProgressQueueBase] directly rather than extending [ProgressQueue]
+/// so no real SQLite database is opened and no connectivity subscription is
+/// created in the test harness (Liskov Substitution — any [ProgressQueueBase]
+/// can be injected wherever the interface is required).
+class _FakeProgressQueue implements ProgressQueueBase {
+ @override
+ Future<void> init() async {} // no-op — no DB needed in widget tests
+
+ @override
+ Future<void> enqueue(
+ int mediaId,
+ double positionSeconds, {
+ bool finished = false,
+ }) async {} // no-op — prevent SQLite calls in widget tests
+
+ @override
+ Future<void> dispose() async {} // no-op
+}
+
/// A [PlayerAudioHandler] subclass that wraps a real [AudioPlayer] but
/// overrides [setMediaItem] and playback methods to be no-ops so that no
/// platform channels are invoked during widget tests.
@@ -185,6 +208,9 @@ Future<void> _pumpScreen(
// Override audioHandlerProvider so no real AudioService or AudioPlayer
// platform channels are invoked during widget tests.
audioHandlerProvider.overrideWithValue(handler),
+ // Override progressQueueProvider so no real SQLite DB is opened and
+ // no connectivity subscription is created during widget tests.
+ progressQueueProvider.overrideWithValue(_FakeProgressQueue()),
],
child: MaterialApp.router(routerConfig: router),
),
diff --git a/player-android/test/screens/video_player_screen_test.dart b/player-android/test/screens/video_player_screen_test.dart
index 8f24817..e2b34c0 100644
--- a/player-android/test/screens/video_player_screen_test.dart
+++ b/player-android/test/screens/video_player_screen_test.dart
@@ -31,7 +31,9 @@ import 'package:go_router/go_router.dart';
import 'package:player_android/api/dio_client.dart';
import 'package:player_android/api/player_api_client.dart';
import 'package:player_android/providers/api_client_provider.dart';
+import 'package:player_android/providers/progress_queue_provider.dart';
import 'package:player_android/screens/video_player_screen.dart';
+import 'package:player_android/services/progress_queue.dart';
// ---------------------------------------------------------------------------
// Fakes
@@ -102,6 +104,31 @@ class _FakeApiClient extends PlayerApiClient {
}
// ---------------------------------------------------------------------------
+// Fakes
+// ---------------------------------------------------------------------------
+
+/// No-op [ProgressQueueBase] stub for widget tests.
+///
+/// Implements [ProgressQueueBase] directly rather than extending [ProgressQueue]
+/// so no real SQLite database is opened and no connectivity subscription is
+/// created in the test harness (Liskov Substitution — any [ProgressQueueBase]
+/// can be injected wherever the interface is required).
+class _FakeProgressQueue implements ProgressQueueBase {
+ @override
+ Future<void> init() async {}
+
+ @override
+ Future<void> enqueue(
+ int mediaId,
+ double positionSeconds, {
+ bool finished = false,
+ }) async {}
+
+ @override
+ Future<void> dispose() async {}
+}
+
+// ---------------------------------------------------------------------------
// Helpers
// ---------------------------------------------------------------------------
@@ -137,6 +164,9 @@ Future<void> _pumpScreen(
overrides: [
tokenStorageProvider.overrideWithValue(const _FakeTokenStorage()),
apiClientProvider.overrideWithValue(fakeClient),
+ // Override progressQueueProvider so no real SQLite DB is opened and
+ // no connectivity subscription is created during widget tests.
+ progressQueueProvider.overrideWithValue(_FakeProgressQueue()),
],
child: MaterialApp.router(routerConfig: router),
),