93 lines
2.7 KiB
Go
93 lines
2.7 KiB
Go
package ui
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
|
|
"git.stinnesbeck.com/nils/arr-tui/internal/radarr"
|
|
"git.stinnesbeck.com/nils/arr-tui/internal/sonarr"
|
|
)
|
|
|
|
func TestMovieItemStatus(t *testing.T) {
|
|
tests := []struct {
|
|
name string
|
|
m radarr.Movie
|
|
want string
|
|
have, miss bool
|
|
}{
|
|
{"missing", radarr.Movie{ID: 1, Title: "A", Monitored: true, IsAvailable: true}, "missing", false, true},
|
|
{"unreleased", radarr.Movie{ID: 2, Title: "B", Monitored: true}, "not released", false, false},
|
|
{"unmonitored", radarr.Movie{ID: 3, Title: "C", IsAvailable: true}, "unmonitored", false, false},
|
|
{"downloaded", radarr.Movie{ID: 4, Title: "D", Monitored: true, HasFile: true, IsAvailable: true}, "✓", true, false},
|
|
}
|
|
for _, tc := range tests {
|
|
it := newMovieItem(tc.m)
|
|
if !strings.Contains(it.status, tc.want) || it.have != tc.have || it.missing != tc.miss {
|
|
t.Errorf("%s: status=%q have=%v missing=%v", tc.name, it.status, it.have, it.missing)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestSeriesItemStatus(t *testing.T) {
|
|
s := sonarr.Series{ID: 1, Title: "S", Year: 2008, Monitored: true,
|
|
Statistics: sonarr.Statistics{EpisodeFileCount: 3, EpisodeCount: 10}}
|
|
it := newSeriesItem(s)
|
|
if !it.have || !it.missing || !strings.Contains(it.status, "3/10") || it.label != "S (2008)" {
|
|
t.Errorf("item = %+v", it)
|
|
}
|
|
s.Statistics.EpisodeFileCount = 10
|
|
if it := newSeriesItem(s); it.missing || !strings.Contains(it.status, "green") {
|
|
t.Errorf("complete series: %+v", it)
|
|
}
|
|
}
|
|
|
|
func TestFilterItems(t *testing.T) {
|
|
items := []libItem{
|
|
{id: 1, title: "Zulu", monitored: true, missing: true},
|
|
{id: 2, title: "alpha", monitored: true, have: true},
|
|
{id: 3, title: "Beta"},
|
|
}
|
|
ids := func(f int, text string) string {
|
|
var s string
|
|
for _, it := range filterItems(items, f, text) {
|
|
s += itoa(it.id)
|
|
}
|
|
return s
|
|
}
|
|
for _, tc := range []struct {
|
|
filter int
|
|
text string
|
|
want string
|
|
}{
|
|
{0, "", "231"}, // sorted case-insensitively by title
|
|
{1, "", "1"},
|
|
{2, "", "2"},
|
|
{3, "", "21"},
|
|
{4, "", "3"},
|
|
{0, " ALP ", "2"},
|
|
{1, "alpha", ""},
|
|
} {
|
|
if got := ids(tc.filter, tc.text); got != tc.want {
|
|
t.Errorf("filter %d %q = %q, want %q", tc.filter, tc.text, got, tc.want)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestEpisodeStatus(t *testing.T) {
|
|
const today = "2026-06-01"
|
|
for _, tc := range []struct {
|
|
e sonarr.Episode
|
|
want string
|
|
}{
|
|
{sonarr.Episode{HasFile: true}, "downloaded"},
|
|
{sonarr.Episode{AirDate: "2027-01-01", Monitored: true}, "unaired"},
|
|
{sonarr.Episode{Monitored: true}, "unaired"},
|
|
{sonarr.Episode{AirDate: "2020-01-01"}, "unmonitored"},
|
|
{sonarr.Episode{AirDate: "2020-01-01", Monitored: true}, "missing"},
|
|
} {
|
|
if got := episodeStatus(tc.e, today); !strings.Contains(got, tc.want) {
|
|
t.Errorf("%+v = %q, want %q", tc.e, got, tc.want)
|
|
}
|
|
}
|
|
}
|