Add comprehensive tests for formatter classes, services, and utilities

- Introduced tests for various formatter classes including TextFormatter, DurationFormatter, SizeFormatter, DateFormatter, and more to ensure correct formatting behavior.
- Added tests for service classes such as FileTreeService, MetadataService, and RenameService, covering directory validation, metadata extraction, and file renaming functionalities.
- Implemented utility tests for LanguageCodeExtractor, PatternExtractor, and FrameClassMatcher to validate their extraction and matching capabilities.
- Updated test cases to use datasets for better maintainability and clarity.
- Enhanced error handling tests to ensure robustness against missing or invalid data.
This commit is contained in:
sha
2025-12-31 14:04:33 +00:00
parent c5fbd367fc
commit 262c0a7b7d
45 changed files with 3346 additions and 1057 deletions
+77 -1
View File
@@ -1,6 +1,9 @@
# conftest.py - pytest configuration
import os
import sys
import json
import pytest
from pathlib import Path
# Force UTF-8 encoding for all I/O operations
os.environ['PYTHONIOENCODING'] = 'utf-8'
@@ -12,4 +15,77 @@ if hasattr(sys.stderr, 'reconfigure'):
# 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
config.option.capture = 'no' # Don't capture output to avoid encoding issues
# Dataset loading helpers
@pytest.fixture
def datasets_dir():
"""Get the datasets directory path."""
return Path(__file__).parent / "datasets"
@pytest.fixture
def load_filename_patterns(datasets_dir):
"""Load filename pattern test cases from JSON dataset.
Returns:
list: List of test case dictionaries with 'filename' and 'expected' keys
"""
dataset_file = datasets_dir / "filenames" / "filename_patterns.json"
with open(dataset_file, 'r', encoding='utf-8') as f:
data = json.load(f)
return data['test_cases']
@pytest.fixture
def load_frame_class_tests(datasets_dir):
"""Load frame class test cases from JSON dataset.
Returns:
list: List of frame class test dictionaries
"""
dataset_file = datasets_dir / "mediainfo" / "frame_class_tests.json"
with open(dataset_file, 'r', encoding='utf-8') as f:
return json.load(f)
def load_dataset(dataset_name: str) -> dict:
"""Load a dataset by name.
Args:
dataset_name: Name of the dataset file (without .json extension)
Returns:
dict: Loaded dataset
Example:
>>> data = load_dataset('filename_patterns')
>>> test_cases = data['test_cases']
"""
datasets_dir = Path(__file__).parent / "datasets"
# Search for the dataset in subdirectories
for subdir in ['filenames', 'mediainfo', 'expected_results']:
dataset_file = datasets_dir / subdir / f"{dataset_name}.json"
if dataset_file.exists():
with open(dataset_file, 'r', encoding='utf-8') as f:
return json.load(f)
raise FileNotFoundError(f"Dataset '{dataset_name}' not found in datasets directory")
def get_test_file_path(filename: str) -> Path:
"""Get path to a test file in the datasets directory.
Args:
filename: Name of the test file
Returns:
Path: Full path to the test file
Example:
>>> path = get_test_file_path('test.mkv')
>>> # Returns: /path/to/test/datasets/sample_mediafiles/test.mkv
"""
return Path(__file__).parent / "datasets" / "sample_mediafiles" / filename