feat(集数映射): 作品季集结构字段(迁移 0075)、剧集组接口契约与按 TMDB 默认季集换算
Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01Cxwgnn2pbzQ7rXv3rq7fei
This commit is contained in:
1 parent
5434ae8ee8
commit
3f6d8e410f
9 files changed
+271
-1
No files matched your search
@@ -280,3 +280,39 @@ describe("resolveEpisodes 规则", () => {
|
||||
expect(r).toMatchObject({ method: "unresolved", ruleFailed: "x" });
|
||||
});
|
||||
});
|
||||
|
||||
describe("resolveEpisodes 剧集组:按 TMDB 默认季集换算", () => {
|
||||
// TMDB 默认 S1 共 25 集;剧集组拆成 S1(1–12)、S2(13–25)
|
||||
const grouped: SeasonTable = {
|
||||
...table([12, 13]),
|
||||
origins: Array.from({ length: 25 }, (_, k) => ({
|
||||
tmdbSeason: 1,
|
||||
tmdbEpisode: k + 1,
|
||||
season: k < 12 ? 1 : 2,
|
||||
episode: k < 12 ? k + 1 : k - 11,
|
||||
})),
|
||||
};
|
||||
|
||||
it("S01E14(按 TMDB 默认季编号)→ 组内 S02E02", () => {
|
||||
const r = run({ season: 1, episodes: ep(14) }, grouped);
|
||||
expect(r).toMatchObject({ method: "tmdb_season", canonical: { season: 2, episodes: ep(2) } });
|
||||
expect(r.evidence).toContain("tmdb_season:S01E14");
|
||||
});
|
||||
|
||||
it("「- 13」季号推定:跨季绝对集号与默认季对照同解,归第 2 季第 1 集", () => {
|
||||
const r = run({ season: 1, seasonInferred: true, episodes: ep(13) }, grouped);
|
||||
expect(r.canonical).toEqual({ season: 2, episodes: ep(1) });
|
||||
expect(["absolute_cross_season", "tmdb_season"]).toContain(r.method);
|
||||
});
|
||||
|
||||
it("区间跨组不换;组内号本身对得上时原号优先", () => {
|
||||
expect(run({ season: 1, episodes: ep(12, 13) }, grouped).method).toBe("unresolved");
|
||||
expect(run({ season: 2, episodes: ep(3) }, grouped)).toMatchObject({ method: "raw" });
|
||||
expect(run({ season: 1, episodes: ep(14, 15) }, grouped).canonical).toEqual({ season: 2, episodes: ep(2, 3) });
|
||||
});
|
||||
|
||||
it("没有 origins(默认季结构)时不出这种换算", () => {
|
||||
const { origins: _o, ...plain } = grouped;
|
||||
expect(run({ season: 1, episodes: ep(14) }, plain).method).toBe("unresolved");
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user