"""Loader tests. DB tests use DATABASE_URL (CI's Postgres service) or a throwaway pgserver.""" import os import sys import tempfile from collections.abc import Iterator from pathlib import Path import pytest sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "bin")) # The subset of the Alembic schema (api/alembic/versions) that the loader writes to. SCHEMA = """ CREATE TYPE jobstatus AS ENUM ('queued', 'running', 'succeeded', 'failed'); CREATE TABLE jobs ( id uuid PRIMARY KEY, status jobstatus NOT NULL, vep_version text, has_frequencies boolean NOT NULL DEFAULT false, has_effect_scores boolean NOT NULL DEFAULT false, log text, finished_at timestamptz ); CREATE TABLE variants ( id serial PRIMARY KEY, job_id uuid NOT NULL, chrom text NOT NULL, pos integer NOT NULL, ref text NOT NULL, alt text NOT NULL, gene text, consequence text, impact text, hgvsc text, hgvsp text, gnomad_af double precision, clinvar_sig text, annotations jsonb NOT NULL ); """ _server = None def _url() -> str | None: global _server if url := os.environ.get("DATABASE_URL"): return url try: import pgserver except ImportError: return None _server = pgserver.get_server(tempfile.mkdtemp(prefix="loader-pg-"), cleanup_mode="delete") return "postgresql://postgres@/postgres?host=" + _server.get_uri().split("host=", 1)[1] @pytest.fixture def engine() -> Iterator: url = _url() if not url: if os.environ.get("REQUIRE_DB"): pytest.fail("REQUIRE_DB is set but no database is available") pytest.skip("no DATABASE_URL and pgserver is not installed") from load_db import engine_for eng = engine_for(url) with eng.begin() as conn: conn.exec_driver_sql("DROP TABLE IF EXISTS variants, jobs; DROP TYPE IF EXISTS jobstatus") conn.exec_driver_sql(SCHEMA) yield eng eng.dispose()