Files
memby/server/internal/api/genres_test.go
T

67 lines
2.0 KiB
Go
Raw Normal View History

2026-08-09 08:25:50 +12:00
package api
import (
"net/http/httptest"
"testing"
)
func TestGenreTotalPrefersEmbysOwnCount(t *testing.T) {
if got := genreTotal(412, 48, 48, 48); got != 412 {
t.Fatalf("genreTotal = %d, want the reported 412", got)
}
}
func TestGenreTotalKeepsScrollingWhenNobodyCounted(t *testing.T) {
// A full page with no count: there may be more, so the total has to sit past what has
// been delivered or the television stops half way through the genre.
if got := genreTotal(0, 48, 48, 48); got <= 96 {
t.Fatalf("genreTotal = %d, want more than the 96 delivered", got)
}
}
func TestGenreTotalStopsOnAShortPage(t *testing.T) {
// A short page is the end of the genre. Claiming anything beyond it leaves the grid
// asking for a page that will never come.
if got := genreTotal(0, 48, 11, 48); got != 59 {
t.Fatalf("genreTotal = %d, want exactly the 59 delivered", got)
}
if got := genreTotal(0, 0, 0, 48); got != 0 {
t.Fatalf("genreTotal = %d, want 0 for a genre with nothing in it", got)
}
}
func TestQueryOffsetTreatsZeroAsAValueRatherThanAMissingOne(t *testing.T) {
cases := map[string]int{
"": 0,
"offset=0": 0,
"offset=48": 48,
"offset=-3": 0,
"offset=nonsense": 0,
}
for query, want := range cases {
r := httptest.NewRequest("GET", "/v1/genres/Comedy/items?"+query, nil)
if got := queryOffset(r, "offset"); got != want {
t.Errorf("queryOffset(%q) = %d, want %d", query, got, want)
}
}
}
2026-08-09 08:56:42 +12:00
func TestGenreItemTypeSeparatesMoviesAndSeries(t *testing.T) {
cases := map[string]string{
"": "Movie,Series",
"movie": "Movie",
"Movie": "Movie",
"series": "Series",
" Series ": "Series",
}
for input, want := range cases {
got, ok := genreItemType(input)
if !ok || got != want {
t.Errorf("genreItemType(%q) = %q, %v; want %q, true", input, got, ok, want)
}
}
if got, ok := genreItemType("Episode"); ok || got != "" {
t.Fatalf("genreItemType(Episode) = %q, %v; want empty, false", got, ok)
}
}