Files
media-sort/tests/unit/test_tokenizer.py
T
2026-09-30 23:06:14 -04:00

165 lines
5.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
from pathlib import Path
import pytest
from media_sorter.tokenizer import FilenameTokenizer
@pytest.fixture
def tokenizer():
return FilenameTokenizer()
def test_tv_show_tokenization(tokenizer):
tokens = tokenizer.tokenize(Path("Breaking.Bad.S05E14.Ozymandias.1080p.BluRay.x264-ROVERS.mkv"))
assert tokens.is_episodic is True
assert tokens.title == "Breaking Bad"
assert tokens.season == 5
assert tokens.episode == 14
assert tokens.episode_title == "Ozymandias"
assert tokens.resolution == "1080p"
assert tokens.source == "BLURAY"
assert tokens.video_codec == "x264"
assert tokens.group == "ROVERS"
def test_tv_multi_episode(tokenizer):
tokens = tokenizer.tokenize(Path("Stranger.Things.S04E01-E02.Chapter.One.720p.WEB-DL.mkv"))
assert tokens.is_episodic is True
assert tokens.season == 4
assert tokens.episode == 1
assert tokens.multi_episodes == [1, 2]
assert tokens.resolution == "720p"
def test_anime_fansub_tokenization(tokenizer):
tokens = tokenizer.tokenize(Path("[SubsPlease] Frieren - Beyond Journey's End - 01 (1080p) [ABCD1234].mkv"))
assert tokens.is_anime is True
assert tokens.is_episodic is True
assert tokens.group == "SubsPlease"
assert "Frieren" in tokens.title
assert tokens.episode == 1
assert tokens.season == 1
def test_movie_tokenization(tokenizer):
tokens = tokenizer.tokenize(Path("Inception.2010.2160p.UHD.Remux.HEVC.TrueHD.Atmos-FraMeSToR.mkv"))
assert tokens.is_episodic is False
assert tokens.title == "Inception"
assert tokens.year == 2010
assert tokens.resolution == "2160p"
assert tokens.video_codec == "hevc"
assert tokens.audio_codec == "TRUEHD"
def test_music_track_tokenization(tokenizer):
tokens = tokenizer.tokenize(Path("/Music/Daft Punk - Discovery/02 - One More Time.flac"))
assert tokens.is_music is True
assert tokens.track == 2
assert tokens.title == "One More Time"
assert tokens.artist == "Daft Punk"
assert tokens.album == "Discovery"
def test_camera_and_date_tokenization(tokenizer):
tokens = tokenizer.tokenize(Path("IMG_20240815_142301.jpg"))
assert tokens.is_photo_or_home_video is True
assert tokens.date_stamp == "2024-08-15"
assert tokens.year == 2024
def test_podcast_tokenization(tokenizer):
tokens = tokenizer.tokenize(Path("The Daily - 2026-03-12 - The Sunday Read.mp3"))
assert tokens.artist == "The Daily"
assert tokens.year == 2026
assert tokens.date_stamp == "2026-03-12"
assert tokens.title == "The Sunday Read"
def test_movie_with_dimensions_not_episodic(tokenizer):
tokens = tokenizer.tokenize(Path("Interstellar.1920x1080.mkv"))
assert tokens.is_episodic is False
assert tokens.season is None
assert tokens.episode is None
assert tokens.resolution == "1080p"
assert "Interstellar" in tokens.title
tokens4k = tokenizer.tokenize(Path("Dune.Part.Two.3840x2160.mkv"))
assert tokens4k.is_episodic is False
assert tokens4k.season is None
assert tokens4k.episode is None
assert tokens4k.resolution == "2160p"
def test_movie_bracket_group_year_not_anime(tokenizer):
tokens = tokenizer.tokenize(Path("[YTS.MX] Movie Title - 2024 [1080p].mkv"))
assert tokens.is_anime is False
assert tokens.is_episodic is False
assert tokens.year == 2024
assert tokens.title == "Movie Title"
def test_standalone_episode_tokenization(tokenizer):
tokens = tokenizer.tokenize(Path("Naruto Episode 207 The Supposed Sealed Ability.mkv"))
assert tokens.is_episodic is True
assert tokens.title == "Naruto"
assert tokens.season == 1
assert tokens.episode == 207
assert tokens.episode_title == "The Supposed Sealed Ability"
def test_anime_fansub_without_group_tokenization(tokenizer):
tokens = tokenizer.tokenize(Path("BLEACH꞉ Sennen Kessen-hen - 27 E89717B7].mkv"))
assert tokens.is_anime is True
assert tokens.is_episodic is True
assert "BLEACH" in tokens.title
assert tokens.episode == 27
assert tokens.season == 1
def test_anime_ending_opening_tokenization(tokenizer):
tokens = tokenizer.tokenize(Path("[A&C] Sword Art Online Alicization S03ED01 [BDrip 1080p] [09F0EA6C].mkv"))
assert tokens.is_episodic is True
assert "Sword Art Online" in tokens.title
assert tokens.season == 3
assert tokens.episode == 1
def test_one_piece_tokenization_varieties(tokenizer):
# 1. Anime Time release with episode title and ancestor season folder
p1 = Path("One Piece (0001-1071+Movies+Specials)/Season 08 - Water Seven (229-263)/[Anime Time] One Piece - 0233 - Pirate Abduction Incident! A Pirate Ship That Can Only Await Its End! [1080p][HEVC 10bit x265][AAC].mkv")
t1 = tokenizer.tokenize(p1)
assert t1.title == "One Piece"
assert t1.season == 8
assert t1.episode == 233
assert "Pirate Abduction" in t1.episode_title
assert t1.group == "Anime Time"
# 2. Adjacent episode in same folder to ensure natural order
p2 = Path("One Piece (0001-1071+Movies+Specials)/Season 08 - Water Seven (229-263)/[Anime Time] One Piece - 0232 - Galley-La Company! A Grand Sight Dock 1!.mkv")
t2 = tokenizer.tokenize(p2)
assert t2.title == "One Piece"
assert t2.season == 8
assert t2.episode == 232
# 3. 4-digit episode S01E1171 WEB-DL
p3 = Path("One.Piece.S01E1171.1080p.CR.WEB-DL.AAC2.0.H.264.mkv")
t3 = tokenizer.tokenize(p3)
assert t3.title == "One Piece"
assert t3.season == 1
assert t3.episode == 1171
# 4. HatSubs release with 4-digit episode and CRC
p4 = Path("[HatSubs] One Piece 1073 (BD 1080p 10-bit Opus) v2 [194B3FBA].mkv")
t4 = tokenizer.tokenize(p4)
assert t4.title == "One Piece"
assert t4.episode == 1073
assert t4.crc32 == "194B3FBA"
# 5. Kaerizaki-Fansub underscore release
p5 = Path("[Kaerizaki-Fansub]_One_Piece_1076_[VOSTFR][FHD_1920x1080].mp4")
t5 = tokenizer.tokenize(p5)
assert t5.title == "One Piece"
assert t5.episode == 1076