Add the calendar view (M10)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-20 22:39:39 +02:00
co-authored by Claude Sonnet 5.5
parent 7582504268
commit cd5786ba78
13 changed files with 756 additions and 30 deletions
+19
View File
@@ -7,6 +7,7 @@ import (
"net/http"
"net/http/httptest"
"testing"
"time"
"git.stinnesbeck.com/nils/arr-tui/internal/arr"
)
@@ -176,3 +177,21 @@ func TestDeleteMovie(t *testing.T) {
t.Fatal(err)
}
}
func TestCalendar(t *testing.T) {
c := newTestClient(t, func(w http.ResponseWriter, r *http.Request) {
q := r.URL.Query()
if r.URL.Path != "/api/v3/calendar" || q.Get("start") != "2026-10-20" || q.Get("end") != "2026-11-02" || q.Get("unmonitored") != "true" {
t.Errorf("unexpected request %s", r.URL)
}
w.Write([]byte(`[{"id":4,"title":"Dune","year":2021,"monitored":true,"hasFile":false,"inCinemas":"2026-10-22T00:00:00Z","digitalRelease":"2026-11-01T00:00:00Z"}]`))
})
start := time.Date(2026, 10, 20, 0, 0, 0, 0, time.UTC)
movies, err := c.Calendar(context.Background(), start, start.AddDate(0, 0, 13), true)
if err != nil || len(movies) != 1 {
t.Fatalf("movies=%v err=%v", movies, err)
}
if m := movies[0]; m.InCinemas != "2026-10-22T00:00:00Z" || m.DigitalRelease == "" || m.PhysicalRelease != "" {
t.Errorf("dates not decoded: %+v", m)
}
}