Initial commit
This commit is contained in:
commit
1d235d30e7
58 files changed
+19693
No files matched your search
@@ -0,0 +1,164 @@
|
||||
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
|
||||
|
||||
|
||||
|
||||
Reference in new issue
Block a user