summaryrefslogtreecommitdiff
path: root/player-server/internal/api
diff options
context:
space:
mode:
Diffstat (limited to 'player-server/internal/api')
-rw-r--r--player-server/internal/api/handlers.go8
-rw-r--r--player-server/internal/api/handlers_playback_test.go3
-rw-r--r--player-server/internal/api/handlers_podcast_test.go3
-rw-r--r--player-server/internal/api/handlers_test.go14
-rw-r--r--player-server/internal/api/integration_test.go3
5 files changed, 22 insertions, 9 deletions
diff --git a/player-server/internal/api/handlers.go b/player-server/internal/api/handlers.go
index a9c832f..f04ec19 100644
--- a/player-server/internal/api/handlers.go
+++ b/player-server/internal/api/handlers.go
@@ -162,10 +162,12 @@ func (s *Server) serveDetach(w http.ResponseWriter, r *http.Request) {
// ------------------------------------------------------------------
func (s *Server) serveFileResult(w http.ResponseWriter, r *http.Request, res *service.FileResult, attachment bool) {
+ // s.streamer is required at construction time (see NewServerWithLogger),
+ // so it is guaranteed non-nil here. We previously fell back to a default
+ // streamer when nil, which silently hid wiring mistakes and violated the
+ // Dependency Inversion Principle by letting the handler decide its own
+ // dependency.
streamer := s.streamer
- if streamer == nil {
- streamer = service.NewMediaStreamer(nil)
- }
stream, err := streamer.Open(r.Context(), res, attachment)
if err != nil {
diff --git a/player-server/internal/api/handlers_playback_test.go b/player-server/internal/api/handlers_playback_test.go
index 7febab0..869b0d1 100644
--- a/player-server/internal/api/handlers_playback_test.go
+++ b/player-server/internal/api/handlers_playback_test.go
@@ -38,7 +38,8 @@ func newPlaybackTestServer(t *testing.T, store repository.Store, sm auth.Session
Auth: authSvc,
PlaybackHints: hintSvc,
},
- StaticFS: fs,
+ StaticFS: fs,
+ MediaStreamer: service.NewMediaStreamer(nil),
})
if err != nil {
t.Fatalf("NewServer: %v", err)
diff --git a/player-server/internal/api/handlers_podcast_test.go b/player-server/internal/api/handlers_podcast_test.go
index 4138d97..7dcdfe6 100644
--- a/player-server/internal/api/handlers_podcast_test.go
+++ b/player-server/internal/api/handlers_podcast_test.go
@@ -68,7 +68,8 @@ func newPodcastTestServer(t *testing.T, store repository.Store, hasher auth.Hash
Auth: authSvc,
Podcast: podcastSvc,
},
- StaticFS: fs,
+ StaticFS: fs,
+ MediaStreamer: service.NewMediaStreamer(nil),
})
if err != nil {
t.Fatalf("NewServer: %v", err)
diff --git a/player-server/internal/api/handlers_test.go b/player-server/internal/api/handlers_test.go
index 6279895..5fbd4c9 100644
--- a/player-server/internal/api/handlers_test.go
+++ b/player-server/internal/api/handlers_test.go
@@ -65,9 +65,17 @@ func newTestServer(t *testing.T, store repository.Store, hasher auth.Hasher, sm
if len(streamer) > 0 {
mediaStreamer = streamer[0]
}
- // NewServer now returns an error when required deps (e.g. Config) are
- // missing. Tests always pass a non-nil Config, so a failure here indicates
- // a programming mistake in the test setup itself.
+ if mediaStreamer == nil {
+ // NewServer now requires a non-nil MediaStreamer at construction
+ // (see api.NewServerWithLogger). Tests that don't exercise streaming
+ // still need one, so we fall back to the default in-process streamer
+ // (nil remuxer means remux requests will error, which is fine for
+ // non-streaming tests).
+ mediaStreamer = service.NewMediaStreamer(nil)
+ }
+ // NewServer now returns an error when required deps (e.g. Config,
+ // MediaStreamer) are missing. Tests always pass non-nil values, so a
+ // failure here indicates a programming mistake in the test setup itself.
srv, err := NewServer(ServerDeps{
Store: store,
Hasher: hasher,
diff --git a/player-server/internal/api/integration_test.go b/player-server/internal/api/integration_test.go
index 2f51bd2..9344552 100644
--- a/player-server/internal/api/integration_test.go
+++ b/player-server/internal/api/integration_test.go
@@ -82,7 +82,8 @@ func newIntegrationServer(t *testing.T) *integrationEnv {
Auth: authSvc,
Podcast: &integrationPodcastService{},
},
- StaticFS: http.FS(staticFS),
+ StaticFS: http.FS(staticFS),
+ MediaStreamer: service.NewMediaStreamer(nil),
})
if err != nil {
t.Fatalf("NewServer: %v", err)