fed8b2eed7
Backend release / release (push) Waiting to run
Bandit Security Scan / bandit_scan (push) Waiting to run
Build and push multi-arch DocsGPT Docker image / build (linux/amd64, ubuntu-latest, amd64) (push) Waiting to run
Build and push multi-arch DocsGPT Docker image / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Waiting to run
Build and push multi-arch DocsGPT Docker image / manifest (push) Blocked by required conditions
Build and push DocsGPT FE Docker image for development / build (linux/amd64, ubuntu-latest, amd64) (push) Waiting to run
Build and push DocsGPT FE Docker image for development / build (linux/arm64, ubuntu-24.04-arm, arm64) (push) Waiting to run
Build and push DocsGPT FE Docker image for development / manifest (push) Blocked by required conditions
Python linting / ruff (push) Waiting to run
Run python tests with pytest / Run tests and count coverage (3.12) (push) Waiting to run
React Widget Build / build (push) Waiting to run
52 lines
1.8 KiB
Python
52 lines
1.8 KiB
Python
"""Fixtures for Celery worker smoke tests.
|
|
|
|
These tests exercise the task *bodies* in ``application.worker`` against a
|
|
real Postgres schema (via the ephemeral ``pg_conn`` fixture from the root
|
|
``tests/conftest.py``). External I/O — storage, the embedding pipeline,
|
|
the retriever, the LLM, the backend HTTP callback — is mocked, but every
|
|
PG write is allowed to hit the real ephemeral DB so the assertions can
|
|
read the resulting rows back.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from contextlib import contextmanager
|
|
from typing import Iterator
|
|
from unittest.mock import MagicMock
|
|
|
|
import pytest
|
|
from sqlalchemy import Connection
|
|
|
|
|
|
@pytest.fixture
|
|
def patch_worker_db(pg_conn, monkeypatch):
|
|
"""Redirect ``db_session`` / ``db_readonly`` in ``application.worker``.
|
|
|
|
Both helpers yield the per-test transactional ``pg_conn``, so any
|
|
writes a task performs are visible to the test and roll back on
|
|
teardown. Without this patch the worker would open its own pooled
|
|
engine and punch past the per-test transaction.
|
|
"""
|
|
|
|
@contextmanager
|
|
def _use_pg_conn() -> Iterator[Connection]:
|
|
yield pg_conn
|
|
|
|
monkeypatch.setattr("application.worker.db_session", _use_pg_conn)
|
|
monkeypatch.setattr("application.worker.db_readonly", _use_pg_conn)
|
|
|
|
|
|
@pytest.fixture
|
|
def task_self():
|
|
"""Minimal stand-in for the Celery task ``self`` passed to workers.
|
|
|
|
``update_state`` and ``request.retries`` are the only attributes the
|
|
worker bodies touch in our tests. Defaulting ``retries`` to 0 makes
|
|
every fixture instance behave like a fresh first attempt, which is
|
|
what the queued-event publishes are gated on. Tests covering the
|
|
retry path override this to a positive int.
|
|
"""
|
|
task = MagicMock(name="celery_task_self")
|
|
task.request.retries = 0
|
|
return task
|