"""Тесты маршрутизации задач Celery по очередям.

Проверяем не сами паттерны `task_routes` (это конфигурация), а результат их
резолвинга Celery-роутером `app.amqp.router` для КОНКРЕТНЫХ имён задач,
которые реально ставятся в очередь (`workers/tasks/dispatch.py`,
`workers/tasks/maintenance.py`, `backend/services/pipeline_producer.py`,
`backend/services/invitations_producer.py`) — регрессия на опечатку в
паттерне (например, `workers.tasks.notify.*` вместо `workers.tasks.notify`)
будет поймана здесь, а не только при ручном прогоне в проде. Не требует
подключения к брокеру: `Router.route` — чистая функция над `task_routes`.
"""

from workers.celery_app import app


def _resolved_queue(task_name: str) -> str:
    """Имя очереди, в которую Celery-роутер направит задачу `task_name`."""
    route = app.amqp.router.route({}, task_name)
    queue = route["queue"]
    return str(queue.name) if hasattr(queue, "name") else str(queue)


def test_run_pipeline_routes_to_transcription_queue() -> None:
    """`run_pipeline` — выделенная очередь `transcription` (только `worker-transcriber`)."""
    assert _resolved_queue("workers.tasks.pipeline.run_pipeline") == "transcription"


def test_summarize_session_routes_to_summarize_queue() -> None:
    """`summarize_session` — очередь `summarize`."""
    assert _resolved_queue("workers.tasks.summarize.summarize_session") == "summarize"


def test_notify_session_routes_to_notify_queue() -> None:
    """`notify_session` — очередь `notify`."""
    assert _resolved_queue("workers.tasks.notify.notify_session") == "notify"


def test_send_invitations_routes_to_notify_queue() -> None:
    """`send_invitations` (рассылка .ics-приглашений) — тоже очередь `notify`."""
    assert _resolved_queue("workers.tasks.invitations.send_invitations") == "notify"


def test_maintenance_tasks_route_to_default_celery_queue() -> None:
    """Задачи обслуживания без явного маршрута остаются на дефолтной очереди `celery`.

    Базовый `worker` слушает `celery,summarize,notify` (`docs/deploy/scaling.md`) —
    маршрутизация обслуживающих задач намеренно не переопределяется.
    """
    assert _resolved_queue("workers.tasks.maintenance.cleanup_conferences") == "celery"
    assert _resolved_queue("workers.tasks.maintenance.recover_stuck_summaries") == "celery"
    assert _resolved_queue("workers.tasks.maintenance.recover_stuck_notifications") == "celery"
