mirror of
https://github.com/shadoll/moma.git
synced 2026-08-28 11:33:25 +00:00
feat: add pytest configuration and implement tests for file and metadata extraction
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
# conftest.py - pytest configuration
|
||||
import os
|
||||
import sys
|
||||
|
||||
# Force UTF-8 encoding for all I/O operations
|
||||
os.environ['PYTHONIOENCODING'] = 'utf-8'
|
||||
if hasattr(sys.stdout, 'reconfigure'):
|
||||
sys.stdout.reconfigure(encoding='utf-8')
|
||||
if hasattr(sys.stderr, 'reconfigure'):
|
||||
sys.stderr.reconfigure(encoding='utf-8')
|
||||
|
||||
# Configure pytest to handle Unicode properly
|
||||
def pytest_configure(config):
|
||||
# Ensure UTF-8 encoding for test output
|
||||
config.option.capture = 'no' # Don't capture output to avoid encoding issues
|
||||
@@ -0,0 +1,205 @@
|
||||
[01.1] Harry Potter and the Philosopher's Stone (2001) [Theatrical Cut] BDRip 1080p x265 [4xUKR_ENG] [Hurtom].mkv
|
||||
[01.2] Harry Potter and the Sorcerer's Stone (2001) [Ultimate Extended Edition] BDRip 1080p x265 [4xUKR_ENG] [Hurtom].mkv
|
||||
[02.1] Harry Potter and the Chamber of Secrets (2002) [Theatrical Cut] BDRip 1080p x265 [4xUKR_ENG] [Hurtom].mkv
|
||||
[02.2] Harry Potter and the Chamber of Secrets (2002) [Ultimate Extended Edition] BDRip 1080p x265 [4xUKR_ENG] [Hurtom].mkv
|
||||
[03] Harry Potter and the Prisoner of Azkaban (2004) BDRip 1080p x265 [5xUKR_ENG] [Hurtom].mkv
|
||||
[04] Harry Potter and the Goblet of Fire (2005) BDRip 1080p x265 [4xUKR_ENG] [Hurtom].mkv
|
||||
[05] Harry Potter and the Order of the Phoenix (2007) BDRip 1080p x265 [3xUKR_ENG] [Hurtom].mkv
|
||||
[06] Harry Potter and the Half-Blood Prince (2009) BDRip 1080p x265 [2xUKR_ENG] [Hurtom].mkv
|
||||
[07] Harry Potter and the Deathly Hallows. Part 1 (2010) BDRip 1080p x265 [UKR_ENG] [Hurtom].mkv
|
||||
[08] Harry Potter and the Deathly Hallows. Part 2 (2011) BDRip 1080p x265 [UKR_ENG] [Hurtom].mkv
|
||||
12 стульев.(1971).[SD,rus].avi
|
||||
A Mighty Heart.(2007).[SD,2ukr,eng].avi
|
||||
An Ideal Husband (1999) [720p,ukr,eng].mkv
|
||||
China Moon (1994) BDRip [SD,2ukr,eng].mkv
|
||||
Cours Toujours (2010) [720p,und] [tmdbid-993291].mp4
|
||||
Davolja Posla (1965) [SD,und] [tmdbid-665739].avi
|
||||
Destiny (2012) [720p,und] [tmdbid-496051].mp4
|
||||
Emma (1996) BDRip [720p,ukr,eng].mkv
|
||||
I Come with the Rain.(2008).[720p,ukr].mkv
|
||||
I Could Never Be Your Woman (2007) [SD,2ukr,eng].mkv
|
||||
I Spy (2002) [720p,2ukr,eng].mkv
|
||||
If I Stay (2014) [720p,ukr,eng].mkv
|
||||
Il racconto dei racconti (Tale of Tales).(2015).[720p,ukr,eng].mkv
|
||||
Imperium Nerone (2004) [SD,ukr].mkv
|
||||
In Bruges (2008) [SD,ukr].mkv
|
||||
Independence Day Resurgence.(2016).[720,ukr,eng].mkv
|
||||
Inescapable (2012) [SD,ukr].mkv
|
||||
Inside Llewyn Davis.(2013).[720p,ukr,eng].mkv
|
||||
Into the Woods (2014) [720p,ukr,eng].mkv
|
||||
Investigating Sex (2002) [SD,ukr].mkv
|
||||
Jumper.(2008).[SD,ukr].mkv
|
||||
Klątwa doliny węży (1988) [SD,rus].avi
|
||||
Klątwa doliny węży (1988) DVDRip [SD,pol].mkv
|
||||
Ladri di biciclette (1948).[720p,ukr].mp4
|
||||
Larry Crowne.(2011).[720p,2ukr,eng].mkv
|
||||
Le dernier chaperon rouge (1996) [SD,fre] [tmdbid-82143].mkv
|
||||
Lets Be Cops.(2014).[720p,rus,ukr,4eng].mkv
|
||||
Life After Beth.(2014).[720p,ukr,eng].mkv
|
||||
Life Is a Miracle.(2004).[SD,ukr].avi
|
||||
Life Is a Miracle.(2004).[SD,ukr].avi
|
||||
Loosies.(2011).[SD,ukr,eng].avi
|
||||
Love & Friendship.(2016).[720p,ukr,eng].mkv
|
||||
Love Story.(1970).[SD,ukr,eng].mkv
|
||||
Mac and Me.(1988).[720p,ukr,eng].mkv
|
||||
Made of Honor.(2008).[SD,ukr].avi
|
||||
Man on the Moon.(1999).[720p,ukr,eng].mkv
|
||||
Martyrs.(2008).[720p,fre,sukr].mkv
|
||||
Max Keeble's Big Move.(2001).[SD,ukr].avi
|
||||
Me Before You.(2016).[720p,ukr,eng].mkv
|
||||
Me, Myself & Irene.(2000).[720p,ukr,eng].mkv
|
||||
Meet Dave.(2008).[SD,ukr].avi
|
||||
Minority Report.(2002).[720p,ukr,eng].mkv
|
||||
Misconduct (2016) BDRip [720p,ukr,eng].mkv
|
||||
Mission to Mars.(2000).[720p,ukr,eng].mkv
|
||||
Monster's Ball.(2001).[SD,eng].mkv
|
||||
Mr. Nobody (2009) BDRip [SD,2ukr,eng].mkv
|
||||
My Week with Marilyn.(2011).[720p,ukr,eng].mkv
|
||||
Nathalie... (2003) [SD,ukr].mkv
|
||||
New Year's Eve (2011) [720p,ukr,eng].mkv
|
||||
Nightmare City 2035 (2008) [SD,ukr].mkv
|
||||
Noah (2014) [720p,ukr,eng].mkv
|
||||
Northmen - A Viking Saga (2014) [SD,ukr].mkv
|
||||
One More Kiss (1999) DVDRip [SD,ukr].avi
|
||||
Orbita 9 (2017) [SD,ukr,eng].mkv
|
||||
Pay It Forward (2000) [SD,ukr].mkv
|
||||
Pay It Forward (2000) [SD,ukr].mkv
|
||||
Perfect Stranger (2007) [SD,ukr].mkv
|
||||
Peter Pan (2003) [720p,ukr,eng].mkv
|
||||
Prime (2005) [SD,ukr,eng].mkv
|
||||
Prince of Persia. The Sands of Time (2010) [720p,ukr,eng].mkv
|
||||
Prince Valiant (1997) [SD,ukr,eng].mkv
|
||||
Raging Bull (1980) [720p,ukr,eng].mkv
|
||||
Rebecca (2020) [720p,eng].mkv
|
||||
Rekopis znaleziony w Saragossie (1965) WEB-DL [SD,ukr].mkv
|
||||
River's Edge (1986) [SD,ukr,eng].mkv
|
||||
Riverworld (2003) [480p,ukr,eng].mkv
|
||||
Romeo Is Bleeding (1993) [SD,2ukr,eng].mkv
|
||||
Ruthless People (1986) [720p,ukr,eng].mkv
|
||||
Sahara (1983) [SD,ukr,eng].mkv
|
||||
Savages (2012) [SD,ukr].mkv
|
||||
Scoop (2024) WEB-DL [720p,ukr,eng].mkv
|
||||
Se7en (1995) [720p,ukr,eng].mkv
|
||||
See No Evil, Hear No Evil (1989) [720p,ukr,eng].mkv
|
||||
Senseless (1998) [SD,ukr].mkv
|
||||
Sex Tape (2014) [720p,ukr,eng].mkv
|
||||
Shutter Island (2010) [720p,ukr,eng].mkv
|
||||
St. Trinian's (2007) [720p,ukr,eng].mkv
|
||||
The Black Hole (1979) BDRip [480p,ukr,eng].mkv
|
||||
The Invention of Lying (2009) [720p,ukr,eng].mkv
|
||||
The Island of Dr. Moreau.(1977).[720p,ukr].mp4
|
||||
The Killing.(1956).[SD,ukr,eng].mkv
|
||||
The Love Guru.(2008).[SD,ukr].avi
|
||||
The Love Guru.(2008).[SD,ukr].avi
|
||||
The Manchurian Candidate.(2004).[720p,ukr,eng].mkv
|
||||
The Mortal Instruments. City of Bones.(2013).[720p,ukr,eng].mkv
|
||||
The Mutant Chronicles.(2008).[SD,ukr,eng].mkv
|
||||
The Name of the Rose (1986) [SD,3ukr,eng].mkv
|
||||
The Number 23 (2007) [720p,ukr,eng].mkv
|
||||
The People Under the Stairs (1991) [720p,ukr,eng].mkv
|
||||
The Return (2024) WEB-DLRip [720p,ukr,eng].mkv
|
||||
The Road to Wellville (1994) [SD,ukr,eng].mkv
|
||||
The Ruins (2008) [SD,ukr].mkv
|
||||
The Sound of Music (1965).[720p,ukr].mp4
|
||||
The Square Peg (1958).[480p,ukr,eng].mkv
|
||||
Un homme à la hauteur.(2016).[720p,ukr].mkv
|
||||
Upgrade.(2018).[SD,eng].mkv
|
||||
Автомобиль, скрипка и собака Клякса.(1974).[SD,rus].avi
|
||||
Ах, Водевиль, Водевиль...(1979).[SD,rus].avi
|
||||
Белеет парус одинокий.(1937).[SD,rus].avi
|
||||
Белое солнце пустыни.(1969).[SD,rus].avi
|
||||
Берегись автомобиля.(1966).[SD,rus].avi
|
||||
Берегите женщин.(1981).[SD,rus].avi
|
||||
Бриллиантовая рука.(1968).[720p,2rus].mkv
|
||||
В бой идут одни «старики».(1973).[720p,rus].mkv
|
||||
В моей смерти прошу винить Клаву К.(1979).[480p,rus].mkv
|
||||
В тринадцатом часу ночи.(1969).[SD,rus].avi
|
||||
Верные друзья.(1954).[SD,rus].avi
|
||||
Веселые ребята.(1934).[SD,rus].avi
|
||||
Взломщик.(1987).[SD,rus].avi
|
||||
Вий.(1967).[SD,rus].avi
|
||||
Высота.(1957).[SD,rus].avi
|
||||
Гиперболоид инженера Гарина.(1965).[SD,rus].avi
|
||||
Глинка.(1946).[SD,rus].avi
|
||||
Гостья из будущего (1984) [SD,rus] [tmdbid-20894].mkv
|
||||
Гроза.(1934).[SD,rus].avi
|
||||
Гусарская баллада.(1962).[SD,rus].avi
|
||||
Два капитана.(1955).[SD,rus].avi
|
||||
Девушка с гитарой.(1958).[SD,rus].avi
|
||||
Деловые люди (1962) [SD,rus] [tmdbid-92983].avi
|
||||
Джентльмены удачи.(1971).[SD,rus].avi
|
||||
Добро пожаловать, или Посторонним вход воспрещен.(1964).[SD,rus].avi
|
||||
Доживем до понедельника.(1968).[SD,rus].avi
|
||||
За двома зайцями.(1961).[SD,ukr,rus].mkv
|
||||
За спичками.(1980).[SD,rus,fin].mkv
|
||||
Завтра, третьего апреля.(1969).[SD,rus].avi
|
||||
Зеленый фургон.(1959).[SD,rus].avi
|
||||
Золотой ключик.(1939).[SD,rus].avi
|
||||
Золотой телёнок.pt1.(1968).[SD,rus].avi
|
||||
Золотой телёнок.pt2.(1968).[SD,rus].avi
|
||||
Иван Васильевич меняет профессию.(1973).[SD,rus].avi
|
||||
Игла.(1988).[SD,rus].mkv
|
||||
Иди и смотри.(1985).[SD,rus].avi
|
||||
Идиот.(1958).[SD,rus].avi
|
||||
Илья Муромец.(1956).[SD,rus].avi
|
||||
Интердевочка.(1989).[SD,rus].mkv
|
||||
Кавказская пленница, или Новые приключения Шурика.(1966).[SD,rus].avi
|
||||
Карнавальная ночь.(1956).[SD,rus].avi
|
||||
Конек-Горбунок.(1941).[SD,rus].avi
|
||||
Королева бензоколонки.(1962).[SD,rus].avi
|
||||
Королевство кривых зеркал.(1963).[SD,rus].avi
|
||||
Курьер.(1986).[720p,rus].mkv
|
||||
Мария, Мирабела в транзистории.(1989).[SD,rus].mpg
|
||||
Мастер и Маргарита.pt1.(1994).[LQ,rus].wmv
|
||||
Мастер и Маргарита.pt2.(1994).[LQ,rus].wmv
|
||||
Мастер и Маргарита.pt3.(1994).[LQ,rus].wmv
|
||||
Мастер и Маргарита.pt4.(1994).[LQ,rus].wmv
|
||||
Миллион в брачной корзине.(1985).[SD,rus].avi
|
||||
Мольба.(1967).[SD,rus].avi
|
||||
Моцарт и Сальери.(1962).[SD,rus].avi
|
||||
Не могу сказать «прощай».(1982).[SD,rus].avi
|
||||
Не может быть!.(1975).[SD,rus].mkv
|
||||
Невероятные приключения итальянцев в России.(1973).[SD,rus].avi
|
||||
Неподдающиеся.(1959).[SD,rus].avi
|
||||
Новый Гулливер.(1935).[SD,rus].avi
|
||||
Нормандия - Неман.(1960).[SD,rus].avi
|
||||
Обнаженная в шляпе (1991) [480p,rus] [tmdbid-286638].mkv
|
||||
Огонь, вода и ... медные трубы.(1967).[SD,rus].avi
|
||||
Операция «Ы» и другие приключения Шурика.(1965).[SD,rus].avi
|
||||
Остров ржавого генерала.(1988).[SD,rus].avi
|
||||
Остров сокровищ (1971) [SD,rus] [tmdbid-135710].avi
|
||||
По щучьему велению.(1938).[SD,rus].avi
|
||||
Подземелье ведьм.(1990).[SD,rus].avi
|
||||
Подкидыш.(1939).[SD,rus].avi
|
||||
После дождичка в четверг.(1985).[SD,rus].avi
|
||||
Приключения Тома Сойера и Гекльберри Финна.pt1.(1981).[SD,rus].avi
|
||||
Приключения Тома Сойера и Гекльберри Финна.pt2.(1981).[SD,rus].avi
|
||||
Приключения Тома Сойера и Гекльберри Финна.pt3.(1981).[SD,rus].avi
|
||||
Приключения Хоббита.(1984).[SD,rus].avi
|
||||
Приморский бульвар.pt1.(1988).[SD,rus].avi
|
||||
Приморский бульвар.pt2.(1988).[SD,rus].avi
|
||||
Принцесса на горошине.(1976).[SD,rus].avi
|
||||
Республика ШКИД.(1966).[SD,rus].mkv
|
||||
Самые быстрые в мире.(1985).[SD,rus].avi
|
||||
Свадьба в Малиновке.(1967).[1080p,3rus].mkv
|
||||
Свой среди чужих, чужой среди своих.(1974).[SD,rus].avi
|
||||
Сказ про то, как царь Петр арапа женил.(1976).[SD,rus].avi
|
||||
Сказка о потерянном времени.(1964).[SD,rus].avi
|
||||
Собачье сердце (1988) [1080p,2rus] [tmdbid-43680].mkv
|
||||
Совершенно серьезно.(1961).[SD,rus].avi
|
||||
Соломенная шляпка.(1974).[SD,rus].avi
|
||||
Спортлото-82.(1982).[SD,rus].avi
|
||||
Сталкер.(1979).[SD,rus].avi
|
||||
Тайна острова Бэк-Кап (1958) [SD,rus].mkv
|
||||
Там на неведомых дорожках.(1982).[SD,rus].avi
|
||||
Трактористы.(1939).[SD,rus].avi
|
||||
Три плюс два (1963) [SD,rus].mkv
|
||||
Три толстяка.(1966).[SD,rus].avi
|
||||
Трудно быть Богом (1989) [SD,rus] [tmdbid-64508].avi
|
||||
Трудно быть Богом (2014) WEB-DL [720p,rus].m4v
|
||||
Трудно первые 100 лет.(1988).[SD,rus].avi
|
||||
Чародеи.pt1.(1982).[SD,rus].avi
|
||||
Чародеи.pt2.(1982).[SD,rus].avi
|
||||
Человек с бульвара Капуцинов (1987) [1080p,rus] [tmdbid-45227].mkv
|
||||
Человек-амфибия (1961) [SD,rus] [tmdbid-43685].avi
|
||||
Чук и Гек (1953) [SD,rus] [tmdbid-148412].avi
|
||||
@@ -0,0 +1,35 @@
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from renamer.extractors.fileinfo_extractor import FileInfoExtractor
|
||||
|
||||
|
||||
class TestFileInfoExtractor:
|
||||
@pytest.fixture
|
||||
def test_file(self):
|
||||
"""Use the filenames.txt file for testing"""
|
||||
return Path(__file__).parent / "filenames.txt"
|
||||
|
||||
def test_extract_size(self, test_file):
|
||||
"""Test extracting file size"""
|
||||
size = FileInfoExtractor.extract_size(test_file)
|
||||
assert isinstance(size, int)
|
||||
assert size > 0
|
||||
|
||||
def test_extract_modification_time(self, test_file):
|
||||
"""Test extracting modification time"""
|
||||
mtime = FileInfoExtractor.extract_modification_time(test_file)
|
||||
assert isinstance(mtime, float)
|
||||
assert mtime > 0
|
||||
|
||||
def test_extract_file_name(self, test_file):
|
||||
"""Test extracting file name"""
|
||||
name = FileInfoExtractor.extract_file_name(test_file)
|
||||
assert isinstance(name, str)
|
||||
assert name == "filenames.txt"
|
||||
|
||||
def test_extract_file_path(self, test_file):
|
||||
"""Test extracting file path"""
|
||||
path = FileInfoExtractor.extract_file_path(test_file)
|
||||
assert isinstance(path, str)
|
||||
assert "filenames.txt" in path
|
||||
assert str(test_file) == path
|
||||
@@ -0,0 +1,53 @@
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from ..extractors.filename_extractor import FilenameExtractor
|
||||
|
||||
|
||||
def load_test_filenames():
|
||||
"""Load test filenames from filenames.txt"""
|
||||
test_file = Path(__file__).parent / "filenames.txt"
|
||||
if test_file.exists():
|
||||
with open(test_file, 'r', encoding='utf-8') as f:
|
||||
return [line.strip() for line in f if line.strip()]
|
||||
return []
|
||||
|
||||
|
||||
@pytest.mark.parametrize("filename", load_test_filenames())
|
||||
def test_extract_title(filename):
|
||||
"""Test title extraction from filename"""
|
||||
file_path = Path(filename)
|
||||
title = FilenameExtractor.extract_title(file_path)
|
||||
# For now, just check it's not None and is string
|
||||
assert isinstance(title, str) or title is None
|
||||
|
||||
|
||||
@pytest.mark.parametrize("filename", load_test_filenames())
|
||||
def test_extract_year(filename):
|
||||
"""Test year extraction from filename"""
|
||||
file_path = Path(filename)
|
||||
year = FilenameExtractor.extract_year(file_path)
|
||||
# Print filename and extracted year clearly
|
||||
print(f"\nFilename: \033[1;36m{filename}\033[0m")
|
||||
print(f"Extracted year: \033[1;32m{year}\033[0m")
|
||||
# Year should be None or 4-digit string
|
||||
if year:
|
||||
assert len(year) == 4 and year.isdigit()
|
||||
|
||||
|
||||
@pytest.mark.parametrize("filename", load_test_filenames())
|
||||
def test_extract_source(filename):
|
||||
"""Test source extraction from filename"""
|
||||
file_path = Path(filename)
|
||||
source = FilenameExtractor.extract_source(file_path)
|
||||
# Source should be None or string
|
||||
assert isinstance(source, str) or source is None
|
||||
|
||||
|
||||
@pytest.mark.parametrize("filename", load_test_filenames())
|
||||
def test_extract_resolution(filename):
|
||||
"""Test resolution extraction from filename"""
|
||||
file_path = Path(filename)
|
||||
resolution = FilenameExtractor.extract_resolution(file_path)
|
||||
# Resolution should be None or string like '2160p'
|
||||
if resolution:
|
||||
assert 'p' in resolution or 'i' in resolution
|
||||
@@ -0,0 +1,38 @@
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from renamer.extractors.mediainfo_extractor import MediaInfoExtractor
|
||||
|
||||
|
||||
class TestMediaInfoExtractor:
|
||||
@pytest.fixture
|
||||
def extractor(self):
|
||||
return MediaInfoExtractor()
|
||||
|
||||
@pytest.fixture
|
||||
def test_file(self):
|
||||
"""Use the filenames.txt file for testing"""
|
||||
return Path(__file__).parent / "filenames.txt"
|
||||
|
||||
def test_extract_resolution(self, extractor, test_file):
|
||||
"""Test extracting resolution from media info"""
|
||||
resolution = extractor.extract_resolution(test_file)
|
||||
# Text files don't have video resolution
|
||||
assert resolution is None
|
||||
|
||||
def test_extract_hdr(self, extractor, test_file):
|
||||
"""Test extracting HDR info"""
|
||||
hdr = extractor.extract_hdr(test_file)
|
||||
# Text files don't have HDR
|
||||
assert hdr is None
|
||||
|
||||
def test_extract_audio_langs(self, extractor, test_file):
|
||||
"""Test extracting audio languages"""
|
||||
langs = extractor.extract_audio_langs(test_file)
|
||||
# Text files don't have audio tracks
|
||||
assert langs == ''
|
||||
|
||||
def test_extract_video_dimensions(self, extractor, test_file):
|
||||
"""Test extracting video dimensions"""
|
||||
dims = extractor.extract_video_dimensions(test_file)
|
||||
# Text files don't have video dimensions
|
||||
assert dims is None
|
||||
@@ -0,0 +1,38 @@
|
||||
import pytest
|
||||
from pathlib import Path
|
||||
from renamer.extractors.metadata_extractor import MetadataExtractor
|
||||
|
||||
|
||||
class TestMetadataExtractor:
|
||||
@pytest.fixture
|
||||
def test_file(self):
|
||||
"""Use the filenames.txt file for testing"""
|
||||
return Path(__file__).parent / "filenames.txt"
|
||||
|
||||
def test_extract_title(self, test_file):
|
||||
"""Test extracting title from metadata"""
|
||||
title = MetadataExtractor.extract_title(test_file)
|
||||
# Text files don't have metadata, so should be None
|
||||
assert title is None
|
||||
|
||||
def test_extract_duration(self, test_file):
|
||||
"""Test extracting duration from metadata"""
|
||||
duration = MetadataExtractor.extract_duration(test_file)
|
||||
# Text files don't have duration
|
||||
assert duration is None
|
||||
|
||||
def test_extract_artist(self, test_file):
|
||||
"""Test extracting artist from metadata"""
|
||||
artist = MetadataExtractor.extract_artist(test_file)
|
||||
# Text files don't have artist
|
||||
assert artist is None
|
||||
|
||||
def test_extract_all_metadata(self, test_file):
|
||||
"""Test extracting all metadata"""
|
||||
metadata = MetadataExtractor.extract_all_metadata(test_file)
|
||||
expected = {
|
||||
'title': None,
|
||||
'duration': None,
|
||||
'artist': None
|
||||
}
|
||||
assert metadata == expected
|
||||
Reference in New Issue
Block a user