- Added NFOConfig model with TMDB API key, auto-create, media downloads, image size settings - Created NFO settings section in UI with form fields and validation - Implemented nfo-config.js module for loading, saving, and testing TMDB connection - Added TMDB API key validation endpoint (POST /api/config/tmdb/validate) - Integrated NFO config into AppConfig and ConfigUpdate models - Added 5 unit tests for NFO config model validation - Added API test for TMDB validation endpoint - All 16 config model tests passing, all 10 config API tests passing - Documented in docs/task7_status.md (100% complete)
110 lines
2.8 KiB
Python
110 lines
2.8 KiB
Python
import pytest
|
|
|
|
from src.server.models.config import (
|
|
AppConfig,
|
|
ConfigUpdate,
|
|
LoggingConfig,
|
|
NFOConfig,
|
|
SchedulerConfig,
|
|
ValidationResult,
|
|
)
|
|
|
|
|
|
def test_scheduler_defaults_and_validation():
|
|
sched = SchedulerConfig()
|
|
assert sched.enabled is True
|
|
assert sched.interval_minutes == 60
|
|
|
|
with pytest.raises(ValueError):
|
|
SchedulerConfig(interval_minutes=0)
|
|
|
|
|
|
def test_logging_config_defaults_and_values():
|
|
log = LoggingConfig()
|
|
assert log.level == "INFO"
|
|
assert log.file is None
|
|
assert log.backup_count == 3
|
|
|
|
|
|
def test_appconfig_and_config_update_apply_to():
|
|
base = AppConfig()
|
|
|
|
upd = ConfigUpdate(
|
|
scheduler=SchedulerConfig(enabled=False, interval_minutes=30)
|
|
)
|
|
new = upd.apply_to(base)
|
|
assert isinstance(new, AppConfig)
|
|
assert new.scheduler.enabled is False
|
|
assert new.scheduler.interval_minutes == 30
|
|
|
|
upd2 = ConfigUpdate(other={"b": 2})
|
|
new2 = upd2.apply_to(base)
|
|
assert new2.other.get("b") == 2
|
|
|
|
|
|
def test_backup_and_validation():
|
|
cfg = AppConfig()
|
|
# default backups disabled -> valid
|
|
res: ValidationResult = cfg.validate_config()
|
|
assert res.valid is True
|
|
|
|
# enable backups but leave path empty -> invalid
|
|
cfg.backup.enabled = True
|
|
cfg.backup.path = ""
|
|
res2 = cfg.validate_config()
|
|
assert res2.valid is False
|
|
assert any("backup.path" in e for e in res2.errors)
|
|
|
|
|
|
def test_nfo_config_defaults():
|
|
"""Test NFO configuration defaults."""
|
|
nfo = NFOConfig()
|
|
assert nfo.tmdb_api_key is None
|
|
assert nfo.auto_create is False
|
|
assert nfo.update_on_scan is False
|
|
assert nfo.download_poster is True
|
|
assert nfo.download_logo is True
|
|
assert nfo.download_fanart is True
|
|
assert nfo.image_size == "original"
|
|
|
|
|
|
def test_nfo_config_image_size_validation():
|
|
"""Test NFO image size validation."""
|
|
# Valid sizes
|
|
nfo1 = NFOConfig(image_size="original")
|
|
assert nfo1.image_size == "original"
|
|
|
|
nfo2 = NFOConfig(image_size="w500")
|
|
assert nfo2.image_size == "w500"
|
|
|
|
# Invalid size
|
|
with pytest.raises(ValueError, match="invalid image size"):
|
|
NFOConfig(image_size="invalid")
|
|
|
|
|
|
def test_appconfig_includes_nfo():
|
|
"""Test that AppConfig includes NFO configuration."""
|
|
cfg = AppConfig()
|
|
assert cfg.nfo is not None
|
|
assert isinstance(cfg.nfo, NFOConfig)
|
|
assert cfg.nfo.auto_create is False
|
|
|
|
|
|
def test_config_update_with_nfo():
|
|
"""Test ConfigUpdate can update NFO settings."""
|
|
base = AppConfig()
|
|
|
|
# Create NFO config update
|
|
nfo_config = NFOConfig(
|
|
tmdb_api_key="test_key_123",
|
|
auto_create=True,
|
|
image_size="w500"
|
|
)
|
|
|
|
upd = ConfigUpdate(nfo=nfo_config)
|
|
new = upd.apply_to(base)
|
|
|
|
assert new.nfo.tmdb_api_key == "test_key_123"
|
|
assert new.nfo.auto_create is True
|
|
assert new.nfo.image_size == "w500"
|