mirror of
https://github.com/truewhile/MeBox.git
synced 2026-09-28 11:16:37 +08:00
69 lines
2.6 KiB
Go
69 lines
2.6 KiB
Go
package service
|
|
|
|
import (
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
// TestCleanQueryPreservesOriginalTitleCase is the regression guard for English
|
|
// titles being lowercased on ingest: "The.Matrix.1999.1080p.BluRay.x264-AMIABLE"
|
|
// used to be stored as "the matrix", which also made metadata providers miss it.
|
|
func TestCleanQueryPreservesOriginalTitleCase(t *testing.T) {
|
|
cases := []struct {
|
|
in string
|
|
wantTitle string
|
|
wantYear int
|
|
}{
|
|
{"The.Matrix.1999.1080p.BluRay.x264-AMIABLE.mkv", "The Matrix", 1999},
|
|
{"The.Shawshank.Redemption.1994.1080p.BluRay.mkv", "The Shawshank Redemption", 1994},
|
|
{"Interstellar.2014.2160p.WEB-DL.mkv", "Interstellar", 2014},
|
|
{"Breaking.Bad.S01E01.1080p.WEB-DL.mkv", "Breaking Bad", 0},
|
|
{"Fast.and.Furious.2001.mkv", "Fast and Furious", 2001},
|
|
{"spider-man.2002.1080p.mkv", "spider man", 2002},
|
|
}
|
|
for _, tc := range cases {
|
|
t.Run(tc.in, func(t *testing.T) {
|
|
gotTitle, gotYear := CleanQuery(tc.in)
|
|
if gotTitle != tc.wantTitle || gotYear != tc.wantYear {
|
|
t.Errorf("CleanQuery(%q) = (%q, %d), want (%q, %d)",
|
|
tc.in, gotTitle, gotYear, tc.wantTitle, tc.wantYear)
|
|
}
|
|
})
|
|
}
|
|
}
|
|
|
|
// The release-tag rules run on lowercased tokens, so restoring the display case
|
|
// must not change which tokens survive. Anything that starts matching or
|
|
// dropping tokens only because of casing (e.g. patEP's boundary class seeing an
|
|
// uppercase letter) would show up here.
|
|
func TestCleanQueryCaseRestoreDoesNotChangeTokenSelection(t *testing.T) {
|
|
// Both spellings must select exactly the same title tokens.
|
|
pairs := [][2]string{
|
|
{"The.Matrix.1999.1080p.BluRay.mkv", "the.matrix.1999.1080p.bluray.mkv"},
|
|
{"SE7EN.1995.1080p.BluRay.mkv", "se7en.1995.1080p.bluray.mkv"},
|
|
{"WEB.Therapy.S01E01.1080p.mkv", "web.therapy.s01e01.1080p.mkv"},
|
|
{"For.All.Mankind.S05E06.4K.mkv", "for.all.mankind.s05e06.4k.mkv"},
|
|
}
|
|
for _, pair := range pairs {
|
|
upper, upperYear := CleanQuery(pair[0])
|
|
lower, lowerYear := CleanQuery(pair[1])
|
|
if !equalFoldASCII(upper, lower) || upperYear != lowerYear {
|
|
t.Errorf("case changed token selection: %q -> (%q, %d) vs %q -> (%q, %d)",
|
|
pair[0], upper, upperYear, pair[1], lower, lowerYear)
|
|
}
|
|
}
|
|
}
|
|
|
|
func equalFoldASCII(a, b string) bool {
|
|
return strings.EqualFold(a, b)
|
|
}
|
|
|
|
// A filename with no case information (all lowercase, as many release names are)
|
|
// must stay as-is rather than being title-cased: MeBox cannot invent casing.
|
|
func TestCleanQueryKeepsLowercaseInputLowercase(t *testing.T) {
|
|
title, _ := CleanQuery("the.matrix.1999.1080p.mkv")
|
|
if title != "the matrix" {
|
|
t.Fatalf("CleanQuery = %q, want %q", title, "the matrix")
|
|
}
|
|
}
|