diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-21 23:50:26 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-21 23:50:26 +0300 |
| commit | 1b66b5f573c8de883947d712057ff85f5513e8ae (patch) | |
| tree | 8e68cfbcc053adec35159b6e21f82b0bd2ade1e1 /player-android/test/screens | |
| parent | 3e0aa0f0eb94d8a43d57a6d257206673a397aac3 (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.dart | 26 | ||||
| -rw-r--r-- | player-android/test/screens/video_player_screen_test.dart | 30 |
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), ), |
