Files
nilsandClaude Opus 5.5 f0bc284e82 Trakt lists: keep the Radarr/Sonarr lookups of their titles on disk
Library membership is asked every time via movie?tmdbId= / series?tvdbId=;
only the lookups of titles not in the library are stored (3 days).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 20:48:20 +02:00

64 lines
1.9 KiB
Go

package ui
import (
"context"
"net/http"
"net/http/httptest"
"sync/atomic"
"testing"
"git.stinnesbeck.com/nils/arr-tui/internal/radarr"
"git.stinnesbeck.com/nils/arr-tui/internal/trakt"
)
func TestListLookupsKeptOnDisk(t *testing.T) {
var lookups, libraryAsks atomic.Int32
inLibrary := false
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
switch r.URL.Path {
case "/api/v3/movie":
libraryAsks.Add(1)
if inLibrary && r.URL.Query().Get("tmdbId") == "949" {
w.Write([]byte(`[{"id":7,"title":"Heat","year":1995,"tmdbId":949}]`))
return
}
w.Write([]byte(`[{"id":3,"title":"Other","tmdbId":1}]`)) // ignores the filter
case "/api/v3/movie/lookup":
lookups.Add(1)
w.Write([]byte(`[{"title":"Heat","year":1995,"tmdbId":949,"overview":"Cops and robbers."}]`))
}
}))
defer srv.Close()
disk := &diskCache{dir: t.TempDir()}
entry := trakt.Entry{Title: "Heat", IDs: trakt.IDs{TMDB: 949}}
resolve := func() result {
t.Helper()
store := newLookupStore(disk) // a new run
b := radarrBackend{radarr.NewClient(srv.URL, "k"), store}
r, err := b.resolve(context.Background(), entry)
if err != nil || r == nil {
t.Fatalf("resolve: %v %v", r, err)
}
if err := store.save(); err != nil {
t.Fatal(err)
}
return r
}
if r := resolve(); r.inLibrary() || lookups.Load() != 1 {
t.Fatalf("first run: in library %v, %d lookups", r.inLibrary(), lookups.Load())
}
r := resolve()
if lookups.Load() != 1 || r.details().plot != "Cops and robbers." {
t.Errorf("second run: %d lookups, plot %q", lookups.Load(), r.details().plot)
}
// Added meanwhile (elsewhere): the library answer wins over the stored lookup.
inLibrary = true
if r := resolve(); !r.inLibrary() || lookups.Load() != 1 {
t.Errorf("after adding: in library %v, %d lookups", r.inLibrary(), lookups.Load())
}
if libraryAsks.Load() != 3 {
t.Errorf("library asked %d times", libraryAsks.Load())
}
}