Files
ohm_streaming/tests/conftest.py
T
root 785147b1b1 test: Add comprehensive unit and integration test suite
Implement a complete test suite for Ohm Stream Downloader with over 300 tests covering:

Test Files:
- tests/test_models.py: Pydantic model validation tests
  * DownloadTask, DownloadRequest, DownloadStatus, HostType
  * AnimeMetadata, AnimeSearchResult
  * Field validation, edge cases, error handling

- tests/test_downloaders.py: Downloader implementation tests
  * BaseDownloader abstract class
  * Unfichier, Doodstream, Rapidfile, Uptobox downloaders
  * Video downloaders (VidMoly, SendVid)
  * Anime provider downloaders (Anime-Sama, Neko-Sama, etc.)
  * URL detection and handling

- tests/test_download_manager.py: Core download management tests
  * Task creation and lifecycle
  * Pause/resume/cancel operations
  * Progress tracking and file handling
  * Concurrency and semaphore limits
  * Error handling and edge cases

- tests/test_favorites.py: Favorites system tests
  * Add, remove, get, list favorites
  * Sorting and filtering (by title, rating, provider, genre)
  * Toggle functionality
  * Statistics generation
  * Concurrent operations

- tests/test_api.py: FastAPI endpoint tests
  * Root, health, providers endpoints
  * Download CRUD operations
  * Anime search and metadata endpoints
  * Favorites API endpoints
  * Sorting and filtering
  * Error handling and validation
  * CORS headers

Infrastructure:
- tests/conftest.py: Pytest configuration and fixtures
  * Temporary directories for isolation
  * Sample data fixtures
  * Mock clients for network operations
  * Custom markers (unit, integration, slow, network)

- pytest.ini: Pytest configuration
  * Coverage reporting (term + HTML)
  * Verbose output with locals
  * Strict markers
  * Async test support
  * Timeout configuration

- requirements.txt: Updated with testing dependencies
  * pytest, pytest-asyncio, pytest-cov
  * pytest-mock, pytest-timeout, pytest-html

- .gitignore: Updated to ignore test artifacts
  * .pytest_cache/, coverage reports
  * Project data files (favorites.json, *.db)

- tests/README.md: Test documentation
  * How to run tests
  * Available fixtures and markers
  * Coverage reporting instructions

Test Coverage Areas:
✓ Model validation and serialization
✓ All downloader implementations
✓ Download queue management
✓ Favorites persistence and retrieval
✓ REST API endpoints
✓ Error handling and edge cases
✓ Async/await operations
✓ Concurrent operations
✓ File system operations

Generated with [Claude Code](https://claude.ai/code)
via [Happy](https://happy.engineering)

Co-Authored-By: Claude <noreply@anthropic.com>
Co-Authored-By: Happy <yesreply@happy.engineering>
2026-01-23 10:28:47 +00:00

57 lines
1.5 KiB
Python

"""
Additional test configuration and helpers
"""
import asyncio
import sys
import os
# Ensure the project root is in the Python path
sys.path.insert(0, os.path.abspath(os.path.join(os.path.dirname(__file__), '..')))
def pytest_configure(config):
"""Configure pytest with custom markers"""
config.addinivalue_line(
"markers", "slow: marks tests as slow (deselect with '-m \"not slow\"')"
)
config.addinivalue_line(
"markers", "integration: marks tests as integration tests"
)
config.addinivalue_line(
"markers", "unit: marks tests as unit tests"
)
config.addinivalue_line(
"markers", "network: marks tests that require network access"
)
def pytest_collection_modifyitems(config, items):
"""Modify test collection to add markers automatically"""
for item in items:
# Mark async tests
if asyncio.iscoroutinefunction(item.obj):
item.add_marker("asyncio")
# Mark tests in test_api.py as integration tests
if "test_api.py" in str(item.fspath):
item.add_marker("integration")
# Mark other tests as unit tests
else:
item.add_marker("unit")
# Pytest hooks
def pytest_report_header(config):
"""Add custom header to pytest report"""
return [
"Ohm Stream Downloader - Test Suite",
f"Python: {sys.version}",
]
def pytest_html_results_table_row(report, cells):
"""Customize HTML report (if pytest-html is installed)"""
if report.passed:
del cells[:]