configs/server-dockers/jellyfin-news/jellyfin_test.go
server-dockers/jellyfin-news/jellyfin_test.goRaw
1package main
2
3import (
4 "context"
5 "io"
6 "net/http"
7 "strings"
8 "testing"
9 "time"
10)
11
12type roundTripFunc func(*http.Request) (*http.Response, error)
13
14func (f roundTripFunc) RoundTrip(r *http.Request) (*http.Response, error) { return f(r) }
15
16func TestAddedBetween(t *testing.T) {
17 httpClient := &http.Client{Transport: roundTripFunc(func(r *http.Request) (*http.Response, error) {
18 if r.Header.Get("X-Emby-Token") != "secret" {
19 t.Error("missing API key")
20 }
21 if r.URL.Query().Get("IncludeItemTypes") != "Movie,Episode" {
22 t.Error("wrong item filter")
23 }
24 body := `{"Items":[
25 {"Id":"new","Type":"Movie","Name":"New","DateCreated":"2026-08-24T10:00:00Z"},
26 {"Id":"old","Type":"Movie","Name":"Old","DateCreated":"2026-08-17T09:00:00Z"}
27 ],"TotalRecordCount":2}`
28 return &http.Response{StatusCode: http.StatusOK, Body: io.NopCloser(strings.NewReader(body)), Header: make(http.Header)}, nil
29 })}
30 c, err := New("http://jellyfin.test", "secret", "", httpClient)
31 if err != nil {
32 t.Fatal(err)
33 }
34 start := time.Date(2026, 8, 18, 0, 0, 0, 0, time.UTC)
35 end := time.Date(2026, 8, 25, 0, 0, 0, 0, time.UTC)
36 items, err := c.AddedBetween(context.Background(), start, end)
37 if err != nil {
38 t.Fatal(err)
39 }
40 if len(items) != 1 || items[0].Name != "New" || items[0].ID != "new" {
41 t.Fatalf("items = %#v", items)
42 }
43}
44
45func TestFindPosterTitleMatchesKindNameAndYear(t *testing.T) {
46 client, err := New("http://jellyfin.test", "secret", "user", &http.Client{Transport: roundTripFunc(func(r *http.Request) (*http.Response, error) {
47 q := r.URL.Query()
48 if r.URL.Path != "/Items" || (q.Get("SearchTerm") != "Dune" && q.Get("SearchTerm") != "Missing") || q.Get("IncludeItemTypes") != "Movie" || q.Get("Recursive") != "true" || q.Get("UserId") != "user" || r.Header.Get("X-Emby-Token") != "secret" {
49 t.Errorf("unexpected search request: %s", r.URL)
50 }
51 body := `{"Items":[{"Id":"series","Type":"Series","Name":"Dune"},{"Id":"old","Type":"Movie","Name":"Dune","ProductionYear":1984},{"Id":"new","Type":"Movie","Name":"Dune","ProductionYear":2021}]}`
52 return &http.Response{StatusCode: 200, Body: io.NopCloser(strings.NewReader(body)), Header: make(http.Header)}, nil
53 })})
54 if err != nil {
55 t.Fatal(err)
56 }
57 id, err := client.FindPosterTitle(context.Background(), "Movie", "Dune", 2021)
58 if err != nil || id != "new" {
59 t.Fatalf("match = %q, %v", id, err)
60 }
61 id, err = client.FindPosterTitle(context.Background(), "Movie", "Missing", 2021)
62 if err != nil || id != "" {
63 t.Fatalf("missing = %q, %v", id, err)
64 }
65}