"""Tests for Celery task infrastructure.

Verifies Celery app configuration and task registration without
starting a real worker or connecting to Redis.
"""


def test_celery_app_uses_redis_broker():
    """Celery broker URL must be a Redis URL built from settings."""
    from app.infrastructure.tasks.celery_app import celery_app
    assert celery_app.conf.broker_url.startswith("redis://")


def test_celery_app_uses_redis_backend():
    """Celery result backend must be Redis."""
    from app.infrastructure.tasks.celery_app import celery_app
    assert celery_app.conf.result_backend.startswith("redis://")


def test_celery_app_has_json_serializer():
    """Task serializer must be JSON for portability."""
    from app.infrastructure.tasks.celery_app import celery_app
    assert celery_app.conf.task_serializer == "json"


def test_process_document_task_is_registered():
    """process_document_task must be discoverable in the Celery task registry."""
    import app.infrastructure.tasks.document_tasks  # noqa: F401 — triggers task registration
    from app.infrastructure.tasks.celery_app import celery_app
    registered = list(celery_app.tasks.keys())
    assert any("process_document_task" in name for name in registered), (
        f"process_document_task not found in {registered}"
    )


def test_document_command_service_has_process_document():
    """DocumentCommandService must expose _process_document method."""
    from app.application.documents.services import DocumentCommandService
    assert hasattr(DocumentCommandService, "_process_document")


def test_document_command_service_has_store_document():
    """DocumentCommandService must expose store_document method."""
    from app.application.documents.services import DocumentCommandService
    assert hasattr(DocumentCommandService, "store_document")
