diff --git a/internal/requests/radarr/client.go b/internal/requests/radarr/client.go index df4f08ab..7f6f7624 100644 --- a/internal/requests/radarr/client.go +++ b/internal/requests/radarr/client.go @@ -140,14 +140,13 @@ func (c *Client) CheckMovieStatus(ctx context.Context, req mediarequests.Request func (c *Client) lookupMovie(ctx context.Context, client *arrclient.Client, tmdbID int) (movieResource, error) { values := url.Values{} values.Set("tmdbId", strconv.Itoa(tmdbID)) - var matches []movieResource - if err := client.GetJSON(ctx, "/api/v3/movie/lookup/tmdb?"+values.Encode(), &matches); err != nil { + // Radarr's /api/v3/movie/lookup/tmdb returns a single MovieResource, unlike + // /api/v3/movie/lookup which returns an array. Missing IDs return non-2xx + // (handled as HTTPError upstream), so a successful response is the movie. + var movie movieResource + if err := client.GetJSON(ctx, "/api/v3/movie/lookup/tmdb?"+values.Encode(), &movie); err != nil { return movieResource{}, err } - if len(matches) == 0 { - return movieResource{}, fmt.Errorf("radarr: no movie found for tmdb_id %d", tmdbID) - } - movie := matches[0] if movie.TMDBID == 0 { movie.TMDBID = tmdbID } diff --git a/internal/requests/radarr/client_test.go b/internal/requests/radarr/client_test.go index d9592334..63e11d0b 100644 --- a/internal/requests/radarr/client_test.go +++ b/internal/requests/radarr/client_test.go @@ -37,7 +37,7 @@ func TestSubmitMovieAddsLookupResult(t *testing.T) { if got := r.URL.Query().Get("tmdbId"); got != "550" { t.Fatalf("lookup tmdbId = %q, want 550", got) } - w.Write([]byte(`[{"title":"Fight Club","tmdbId":550,"titleSlug":"fight-club"}]`)) + w.Write([]byte(`{"title":"Fight Club","tmdbId":550,"titleSlug":"fight-club"}`)) return } t.Fatalf("unexpected request %s %s", r.Method, r.URL.String()) @@ -78,7 +78,7 @@ func TestSubmitMovieRecoversFromEmptyAddResponse(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/api/v3/movie/lookup/tmdb": - w.Write([]byte(`[{"title":"Fight Club","tmdbId":550,"titleSlug":"fight-club"}]`)) + w.Write([]byte(`{"title":"Fight Club","tmdbId":550,"titleSlug":"fight-club"}`)) case "/api/v3/movie": if r.Method == http.MethodPost { w.WriteHeader(http.StatusCreated) @@ -125,7 +125,7 @@ func TestSubmitMovieFallsBackWhenEmptyResponseAndLookupFails(t *testing.T) { server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { switch r.URL.Path { case "/api/v3/movie/lookup/tmdb": - w.Write([]byte(`[{"title":"Fight Club","tmdbId":550,"titleSlug":"fight-club"}]`)) + w.Write([]byte(`{"title":"Fight Club","tmdbId":550,"titleSlug":"fight-club"}`)) case "/api/v3/movie": if r.Method == http.MethodPost { w.WriteHeader(http.StatusCreated)