74 lines
2.2 KiB
Python
74 lines
2.2 KiB
Python
"""Tests for dl_fields feature service."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import pytest
|
|
import pytest_asyncio
|
|
|
|
from app.features.dl_fields.repository import DLFieldsRepository
|
|
from app.features.dl_fields.service import DLFields
|
|
from app.library.sqlite_store import SqliteStore
|
|
from app.tests.helpers import make_in_memory_db_path
|
|
|
|
|
|
@pytest_asyncio.fixture
|
|
async def repo():
|
|
"""Provide a fresh repository instance with initialized database for each test."""
|
|
DLFieldsRepository._reset_singleton()
|
|
DLFields._reset_singleton()
|
|
SqliteStore._reset_singleton()
|
|
|
|
store = SqliteStore(db_path=make_in_memory_db_path("dl-fields-service"))
|
|
await store.get_connection()
|
|
|
|
repository = DLFieldsRepository.get_instance()
|
|
|
|
yield repository
|
|
|
|
await store.close()
|
|
|
|
DLFieldsRepository._reset_singleton()
|
|
DLFields._reset_singleton()
|
|
SqliteStore._reset_singleton()
|
|
|
|
|
|
class TestDLFieldsService:
|
|
"""Test suite for DLFields service methods."""
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_save_creates_field(self, repo):
|
|
"""Save should create a new dl field when ID is missing."""
|
|
service = DLFields.get_instance()
|
|
payload = {
|
|
"name": "quality",
|
|
"description": "Video quality",
|
|
"field": "--format",
|
|
"kind": "string",
|
|
"order": 1,
|
|
"extras": {"options": ["best", "worst"]},
|
|
}
|
|
|
|
model = await service.save(payload)
|
|
|
|
assert model.id is not None, "Should create new dl field"
|
|
assert model.name == "quality", "Should store name correctly"
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_all_serialized(self, repo):
|
|
"""Get all serialized returns list of dictionaries."""
|
|
service = DLFields.get_instance()
|
|
await service.save(
|
|
{
|
|
"name": "audio_only",
|
|
"description": "Audio",
|
|
"field": "--extract-audio",
|
|
"kind": "bool",
|
|
"order": 2,
|
|
}
|
|
)
|
|
|
|
items = await service.get_all_serialized()
|
|
|
|
assert len(items) == 1, "Should return one dl field"
|
|
assert items[0]["name"] == "audio_only", "Should serialize name"
|
|
assert isinstance(items[0]["id"], int), "Should serialize integer ID"
|