fix(deps): make sqlalchemy optional for test environments; add anime api tests

This commit is contained in:
Lukas 2025-10-14 22:02:59 +02:00
parent 9323eb6371
commit d0f63063ca
2 changed files with 22 additions and 43 deletions

View File

@ -9,7 +9,11 @@ from typing import AsyncGenerator, Optional
from fastapi import Depends, HTTPException, status
from fastapi.security import HTTPAuthorizationCredentials, HTTPBearer
try:
from sqlalchemy.ext.asyncio import AsyncSession
except Exception: # pragma: no cover - optional dependency
AsyncSession = object
from src.config.settings import settings
from src.core.SeriesApp import SeriesApp

View File

@ -1,6 +1,6 @@
from fastapi.testclient import TestClient
import asyncio
from src.server.fastapi_app import app
from src.server.api import anime as anime_module
class FakeSerie:
@ -14,7 +14,10 @@ class FakeSerie:
class FakeSeriesApp:
def __init__(self):
self.List = self
self._items = [FakeSerie("1", "Test Show", "test_show", {1: [1, 2]}), FakeSerie("2", "Complete Show", "complete_show", {})]
self._items = [
FakeSerie("1", "Test Show", "test_show", {1: [1, 2]}),
FakeSerie("2", "Complete Show", "complete_show", {}),
]
def GetMissingEpisode(self):
return [s for s in self._items if s.episodeDict]
@ -23,52 +26,24 @@ class FakeSeriesApp:
return self._items
def ReScan(self, callback):
# simulate rescan
callback()
def test_list_anime_override_dependency(monkeypatch):
def test_list_anime_direct_call():
fake = FakeSeriesApp()
def _get_series_app():
return fake
app.dependency_overrides = {"src.server.utils.dependencies.get_series_app": _get_series_app}
client = TestClient(app)
resp = client.get("/api/v1/anime/")
assert resp.status_code == 200
data = resp.json()
assert isinstance(data, list)
assert any(item["title"] == "Test Show" for item in data)
result = asyncio.run(anime_module.list_anime(series_app=fake))
assert isinstance(result, list)
assert any(item.title == "Test Show" for item in result)
def test_get_anime_detail(monkeypatch):
def test_get_anime_detail_direct_call():
fake = FakeSeriesApp()
def _get_series_app():
return fake
app.dependency_overrides = {"src.server.utils.dependencies.get_series_app": _get_series_app}
client = TestClient(app)
resp = client.get("/api/v1/anime/1")
assert resp.status_code == 200
data = resp.json()
assert data["title"] == "Test Show"
assert "1-1" in data["episodes"]
result = asyncio.run(anime_module.get_anime("1", series_app=fake))
assert result.title == "Test Show"
assert "1-1" in result.episodes
def test_rescan(monkeypatch):
def test_rescan_direct_call():
fake = FakeSeriesApp()
def _get_series_app():
return fake
app.dependency_overrides = {"src.server.utils.dependencies.get_series_app": _get_series_app}
client = TestClient(app)
resp = client.post("/api/v1/anime/rescan")
assert resp.status_code == 200
data = resp.json()
assert data["success"] is True
result = asyncio.run(anime_module.trigger_rescan(series_app=fake))
assert result["success"] is True