package httpapi import ( "testing" "git.vakhrushev.me/av/jellybit/internal/recognize" ) func TestSeasonSummary(t *testing.T) { // ep — эпизодный файл с заданным (или nil) сезоном. ep := func(season *int) recognize.PlanFile { return recognize.PlanFile{Role: recognize.RoleEpisode, Season: season} } n := func(v int) *int { return &v } cases := []struct { name string files []recognize.PlanFile want string }{ {"пусто", nil, ""}, {"один сезон", []recognize.PlanFile{ep(n(2)), ep(n(2))}, "Сезон 2"}, {"диапазон", []recognize.PlanFile{ep(n(1)), ep(n(2)), ep(n(3))}, "Сезоны 1–3"}, {"разрыв", []recognize.PlanFile{ep(n(1)), ep(n(3)), ep(n(4))}, "Сезоны 1, 3–4"}, {"несортированный вход", []recognize.PlanFile{ep(n(3)), ep(n(1)), ep(n(2))}, "Сезоны 1–3"}, {"только спецвыпуски (nil)", []recognize.PlanFile{ep(nil)}, "Спецвыпуски"}, {"только спецвыпуски (0)", []recognize.PlanFile{ep(n(0))}, "Спецвыпуски"}, {"сезоны и спецвыпуски", []recognize.PlanFile{ep(n(1)), ep(n(2)), ep(nil)}, "Сезоны 1–2, спецвыпуски"}, {"один сезон и спецвыпуски", []recognize.PlanFile{ep(n(1)), ep(nil)}, "Сезон 1, спецвыпуски"}, } for _, c := range cases { t.Run(c.name, func(t *testing.T) { got := seasonSummary(recognize.Plan{Files: c.files}) if got != c.want { t.Errorf("seasonSummary = %q, want %q", got, c.want) } }) } } // Не-эпизодные файлы (main/subtitle/…) не влияют на сводку сезонов. func TestSeasonSummary_IgnoresNonEpisodes(t *testing.T) { s := 2 plan := recognize.Plan{Files: []recognize.PlanFile{ {Role: recognize.RoleEpisode, Season: &s}, {Role: recognize.RoleMain}, {Role: recognize.RoleSubtitle}, {Role: recognize.RoleIgnore}, }} if got := seasonSummary(plan); got != "Сезон 2" { t.Errorf("seasonSummary = %q, want «Сезон 2»", got) } }