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}