You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
SoulSync/tests/test_video_release_parse.py

74 lines
2.8 KiB

"""Release-title parser — the Sonarr-style seam that pulls quality + season/episode
scope out of a raw release name. Isolated from music."""
from __future__ import annotations
from core.video.release_parse import parse_release
def test_movie_release():
p = parse_release("The Matrix 1999 2160p UHD BluRay x265 TrueHD Atmos-FraMeSToR")
assert p["resolution"] == "2160p" and p["source"] == "bluray"
assert p["codec"] == "hevc" and p["audio"] == "atmos"
assert p["group"] == "FraMeSToR"
assert p["season"] is None and p["episode"] is None
assert not p["is_season_pack"] and not p["is_series_pack"]
def test_single_episode():
p = parse_release("The.Wire.S02E03.1080p.WEB-DL.x264-GROUP")
assert p["season"] == 2 and p["episode"] == 3
assert p["source"] == "web-dl" and p["codec"] == "x264"
assert not p["is_season_pack"] and not p["is_series_pack"]
def test_season_pack_no_episode():
p = parse_release("The Wire S02 1080p BluRay x265 DDP5.1-GROUP")
assert p["season"] == 2 and p["episode"] is None
assert p["is_season_pack"] is True and p["is_series_pack"] is False
def test_season_word_pack():
p = parse_release("The.Wire.Season.2.COMPLETE.720p.HDTV.x264")
assert p["season"] == 2
# "COMPLETE" + a single season word → treated as a series/complete pack
assert p["is_series_pack"] is True
def test_series_range_pack():
p = parse_release("The Wire S01-S05 COMPLETE 1080p BluRay x265-GROUP")
assert p["season"] == 1 and p["season_end"] == 5
assert p["is_series_pack"] is True
def test_hdr_and_dv():
assert parse_release("Dune 2021 2160p BluRay HDR10 x265")["hdr"] == "hdr10"
assert parse_release("Dune 2021 2160p WEB-DL DV HEVC")["hdr"] == "dv"
assert parse_release("Dune 2021 1080p BluRay x264")["hdr"] is None
def test_junk_sources_detected_for_rejection():
assert parse_release("Some Movie 2024 HDCAM x264")["source"] == "cam"
assert parse_release("Some Movie 2024 DVDScr XviD")["source"] == "screener"
assert parse_release("Some.Movie.2024.1080p.WEB-DL.x264.3D")["three_d"] is True
def test_repack_proper():
p = parse_release("Show.S01E01.REPACK.1080p.WEB-DL.x265-GRP")
assert p["repack"] is True
assert parse_release("Show.S01E01.PROPER.1080p.HDTV.x264")["proper"] is True
def test_garbage_never_raises():
p = parse_release(None)
assert p["resolution"] is None and p["title"] == ""
assert parse_release(12345)["title"] == "12345"
def test_plain_web_is_recognised_as_a_source():
# 'WEB' (not just 'WEB-DL') is extremely common — must parse as web-dl
assert parse_release("Show S01E01 1080p WEB h264-GRP")["source"] == "web-dl"
assert parse_release("Movie.2020.WEB.x265")["source"] == "web-dl"
# but it must NOT mis-grab the WEB inside WEBRip
assert parse_release("Movie 1080p WEBRip x264")["source"] == "webrip"