Добавил еще провайдер TVMaze
This commit is contained in:
@@ -0,0 +1,86 @@
|
||||
package metadata
|
||||
|
||||
import (
|
||||
"context"
|
||||
"net/http"
|
||||
"net/http/httptest"
|
||||
"testing"
|
||||
)
|
||||
|
||||
func newTVMaze(t *testing.T, url string) *TVMaze {
|
||||
t.Helper()
|
||||
c, err := NewTVMaze(TVMazeConfig{BaseURL: url})
|
||||
if err != nil {
|
||||
t.Fatalf("NewTVMaze: %v", err)
|
||||
}
|
||||
return c
|
||||
}
|
||||
|
||||
func TestTVMaze_SearchSeries(t *testing.T) {
|
||||
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.URL.Path != "/search/shows" || r.URL.Query().Get("q") != "Fargo" {
|
||||
t.Errorf("request = %s?%s", r.URL.Path, r.URL.RawQuery)
|
||||
}
|
||||
_, _ = w.Write([]byte(`[
|
||||
{"score":0.9,"show":{"id":1,"name":"Fargo","premiered":"2014-04-15",
|
||||
"externals":{"thetvdb":269613,"imdb":"tt2802850"}}},
|
||||
{"score":0.1,"show":{"id":2,"name":"Other","premiered":"2010-01-01",
|
||||
"externals":{"thetvdb":0,"imdb":"tt999"}}}
|
||||
]`))
|
||||
}))
|
||||
defer srv.Close()
|
||||
|
||||
got, err := newTVMaze(t, srv.URL).Search(context.Background(), Query{Type: Series, Title: "Fargo", Year: 2014})
|
||||
if err != nil {
|
||||
t.Fatalf("Search: %v", err)
|
||||
}
|
||||
if len(got) != 2 {
|
||||
t.Fatalf("got %d candidates", len(got))
|
||||
}
|
||||
c := got[0]
|
||||
if c.Provider != "tvmaze" || c.ID != "1" || c.Title != "Fargo" || c.Year != 2014 {
|
||||
t.Errorf("candidate = %+v", c)
|
||||
}
|
||||
// TVDB-id из externals → тег папки.
|
||||
if c.TagProvider != "tvdb" || c.TagID != "269613" {
|
||||
t.Errorf("tag = %s/%s, want tvdb/269613", c.TagProvider, c.TagID)
|
||||
}
|
||||
// Без thetvdb → фолбэк на imdb.
|
||||
if got[1].TagProvider != "imdb" || got[1].TagID != "tt999" {
|
||||
t.Errorf("fallback tag = %s/%s", got[1].TagProvider, got[1].TagID)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTVMaze_SearchMovieEmpty(t *testing.T) {
|
||||
// Для фильмов TVMaze не вызывается вовсе.
|
||||
srv := httptest.NewServer(http.HandlerFunc(func(_ http.ResponseWriter, _ *http.Request) {
|
||||
t.Error("movie search must not hit the network")
|
||||
}))
|
||||
defer srv.Close()
|
||||
|
||||
got, err := newTVMaze(t, srv.URL).Search(context.Background(), Query{Type: Movie, Title: "X"})
|
||||
if err != nil || got != nil {
|
||||
t.Errorf("movie search = %v, %v; want nil, nil", got, err)
|
||||
}
|
||||
}
|
||||
|
||||
func TestTVMaze_SeasonEpisodeCounts(t *testing.T) {
|
||||
srv := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
if r.URL.Path != "/shows/1/episodes" {
|
||||
t.Errorf("path = %q", r.URL.Path)
|
||||
}
|
||||
_, _ = w.Write([]byte(`[
|
||||
{"season":1,"number":1},{"season":1,"number":2},
|
||||
{"season":2,"number":1}
|
||||
]`))
|
||||
}))
|
||||
defer srv.Close()
|
||||
|
||||
counts, err := newTVMaze(t, srv.URL).SeasonEpisodeCounts(context.Background(), "1")
|
||||
if err != nil {
|
||||
t.Fatalf("SeasonEpisodeCounts: %v", err)
|
||||
}
|
||||
if counts[1] != 2 || counts[2] != 1 {
|
||||
t.Errorf("counts = %v", counts)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user