fix(fc2a): three unit-test failures — async fixture decorator, name convention, lazy celery includes
test_health.py: @pytest.fixture on an `async def` function is rejected by pytest-asyncio 1.x strict mode. Switched to @pytest_asyncio.fixture. backend/app/models/import_settings.py: My constraint name was 'ck_import_settings_singleton' and Base.metadata's naming convention applies 'ck_<table>_<name>' on top, so the final ORM name was 'ck_import_settings_ck_import_settings_singleton' (double prefix). The migration creates the DB constraint as 'ck_import_settings_singleton' via raw alembic, so they didn't match. Fix: bare name 'singleton' in the model → convention produces 'ck_import_settings_singleton', matching the migration's literal name. tests/test_tasks_register.py: Celery's include=[...] parameter on the constructor is lazy — task modules aren't imported until a worker boots. The test only imported the Celery instance, so the @celery.task decorators in scan.py / import_file.py / thumbnail.py never ran. Fix: explicit `import` of those modules for side-effect at the top of the test file. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -12,7 +12,9 @@ from .base import Base
|
|||||||
|
|
||||||
class ImportSettings(Base):
|
class ImportSettings(Base):
|
||||||
__tablename__ = "import_settings"
|
__tablename__ = "import_settings"
|
||||||
__table_args__ = (CheckConstraint("id = 1", name="ck_import_settings_singleton"),)
|
# Bare constraint name — Base.metadata's naming convention applies the
|
||||||
|
# ck_<table>_<name> prefix, producing the final ck_import_settings_singleton.
|
||||||
|
__table_args__ = (CheckConstraint("id = 1", name="singleton"),)
|
||||||
|
|
||||||
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
id: Mapped[int] = mapped_column(Integer, primary_key=True)
|
||||||
import_scan_path: Mapped[str] = mapped_column(Text, nullable=False, default="/import")
|
import_scan_path: Mapped[str] = mapped_column(Text, nullable=False, default="/import")
|
||||||
|
|||||||
@@ -1,11 +1,12 @@
|
|||||||
"""Health endpoint smoke test."""
|
"""Health endpoint smoke test."""
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
|
import pytest_asyncio
|
||||||
|
|
||||||
from backend.app import create_app
|
from backend.app import create_app
|
||||||
|
|
||||||
|
|
||||||
@pytest.fixture
|
@pytest_asyncio.fixture
|
||||||
async def client():
|
async def client():
|
||||||
app = create_app()
|
app = create_app()
|
||||||
async with app.test_client() as c:
|
async with app.test_client() as c:
|
||||||
|
|||||||
@@ -1,5 +1,15 @@
|
|||||||
"""Confirms every FC-2a task module imports cleanly and registers with Celery."""
|
"""Confirms every FC-2a task module imports cleanly and registers with Celery.
|
||||||
|
|
||||||
|
Celery's `include=[...]` parameter on the Celery() constructor is lazy — it
|
||||||
|
only imports those modules when a worker boots. To assert task registration
|
||||||
|
in a plain pytest run we explicitly import the task modules ourselves.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Importing for side-effect: each module's @celery.task decorators register
|
||||||
|
# the task with the global Celery instance at module import time.
|
||||||
|
import backend.app.tasks.import_file # noqa: F401
|
||||||
|
import backend.app.tasks.scan # noqa: F401
|
||||||
|
import backend.app.tasks.thumbnail # noqa: F401
|
||||||
from backend.app.celery_app import celery
|
from backend.app.celery_app import celery
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user