SPB Git forge

spb/doc-api

Public
2commits 1branches 0releases
15.7 MBsize
maindefault branch
13 days agolast push
Python 88.3% TypeScript 7.6% Shell 4.1%
2.8 KB · 82 lines python
Raw Blame History
1"""Shared pytest fixtures and cost gates for the API Atlas smoke tests.23Run:  pytest -q                     (cheap smoke tests only)4      RUN_EXPENSIVE_TESTS=true pytest -q tests/openai5Flags (all default false): RUN_EXPENSIVE_TESTS RUN_REALTIME_TESTS RUN_IMAGE_TESTS RUN_VIDEO_TESTS6                           RUN_ADMIN_TESTS RUN_AUDIO_TESTS RUN_BATCH_TESTS7Keys are read from .env via scripts/live.py (never printed).8"""9from __future__ import annotations1011import os12import sys13from pathlib import Path1415import pytest1617ROOT = Path(__file__).resolve().parent.parent18sys.path.insert(0, str(ROOT))1920from scripts import live  # noqa: E402  (loads .env)2122FLAGS = ["RUN_EXPENSIVE_TESTS", "RUN_REALTIME_TESTS", "RUN_IMAGE_TESTS", "RUN_VIDEO_TESTS",23         "RUN_ADMIN_TESTS", "RUN_AUDIO_TESTS", "RUN_BATCH_TESTS"]242526def flag(name: str) -> bool:27    return os.environ.get(name, "false").strip().lower() in ("1", "true", "yes", "on")282930def pytest_configure(config: pytest.Config) -> None:31    for f in FLAGS:32        config.addinivalue_line("markers", f"{f.lower()}: requires {f}=true")333435def pytest_collection_modifyitems(config: pytest.Config, items: list[pytest.Item]) -> None:36    for item in items:37        for f in FLAGS:38            if item.get_closest_marker(f.lower()) and not flag(f):39                item.add_marker(pytest.mark.skip(reason=f"{f} is not enabled"))404142@pytest.fixture(scope="session")43def openai():44    if not os.environ.get("OPENAI_API_KEY"):45        pytest.skip("OPENAI_API_KEY not set")46    return live.openai_request474849@pytest.fixture(scope="session")50def anthropic():51    if not os.environ.get("ANTHROPIC_API_KEY"):52        pytest.skip("ANTHROPIC_API_KEY not set")53    return live.anthropic_request545556@pytest.fixture(scope="session")57def xai():58    if not os.environ.get("XAI_API_KEY"):59        pytest.skip("XAI_API_KEY not set")60    return live.xai_request616263@pytest.fixture(scope="session")64def gemini():65    if not os.environ.get("GEMINI_API_KEY"):66        pytest.skip("GEMINI_API_KEY not set")67    return live.gemini_request686970# Cheapest models used by default in tests (override with env for future runs)71OPENAI_CHEAP_MODEL = os.environ.get("ATLAS_OPENAI_CHEAP_MODEL", "gpt-5.4-nano")72OPENAI_CHEAP_CHAT_MODEL = os.environ.get("ATLAS_OPENAI_CHEAP_CHAT_MODEL", "gpt-4.1-nano")73ANTHROPIC_CHEAP_MODEL = os.environ.get("ATLAS_ANTHROPIC_CHEAP_MODEL", "claude-haiku-4-5-20251001")74XAI_CHEAP_MODEL = os.environ.get("ATLAS_XAI_CHEAP_MODEL", "grok-4.3")75GEMINI_CHEAP_MODEL = os.environ.get("ATLAS_GEMINI_CHEAP_MODEL", "gemini-3.5-flash-lite")767778@pytest.fixture(scope="session")79def models() -> dict[str, str]:80    return {"openai": OPENAI_CHEAP_MODEL, "openai_chat": OPENAI_CHEAP_CHAT_MODEL, "anthropic": ANTHROPIC_CHEAP_MODEL,81            "xai": XAI_CHEAP_MODEL, "gemini": GEMINI_CHEAP_MODEL}82