arnaucube
arnaucube/jellyfin-toolsPublic Self-hosted repository
jellyfin-tools/jellyfin-year-review/internal/source/jellyfin_test.go
jellyfin-year-review/internal/source/jellyfin_test.goRaw
 1package source
 2
 3import (
 4	"context"
 5	"net/http"
 6	"net/http/httptest"
 7	"strings"
 8	"testing"
 9)
10
11func TestMetadataIncludesPrimaryImageTags(t *testing.T) {
12	api := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
13		if !strings.Contains(r.Header.Get("Authorization"), `Token="operator-key"`) {
14			t.Error("missing operator credential")
15		}
16		switch r.URL.Path {
17		case "/jellyfin/Users":
18			w.Write([]byte(`[{"Id":"AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA","Name":"Viewer"}]`))
19		case "/jellyfin/Items":
20			if r.URL.Query().Get("EnableImages") != "true" || !strings.Contains(r.URL.Query().Get("Fields"), "ProviderIds") || !strings.Contains(r.URL.Query().Get("Fields"), "Studios") {
21				t.Error("image metadata not requested")
22			}
23			w.Write([]byte(`{"Items":[{"Id":"11111111111111111111111111111111","Name":"Film","Type":"Movie","RunTimeTicks":72000000000,"Genres":["Drama"],"Studios":[{"Name":"Netflix"}],"ImageTags":{"Primary":"image-version"},"ProviderIds":{"Tvdb":"123","Imdb":"tt123"}}],"TotalRecordCount":1}`))
24		default:
25			w.WriteHeader(404)
26		}
27	}))
28	defer api.Close()
29	j, e := NewJellyfin(api.URL + "/jellyfin")
30	if e != nil {
31		t.Fatal(e)
32	}
33	users, items, e := j.Metadata(context.Background(), "operator-key")
34	if e != nil || len(users) != 1 || len(items) != 1 || items[0].ProviderIDs["Tvdb"] != "123" || items[0].ProviderIDs["Imdb"] != "tt123" || items[0].ImageTag != "image-version" || items[0].Runtime != 7200 || items[0].Genres[0] != "Drama" || len(items[0].Studios) != 1 || items[0].Studios[0] != "Netflix" {
35		t.Fatal("incomplete Jellyfin metadata", e)
36	}
37}