| """Shared fixtures: isolated cache DB per test session, fake API keys.""" |
|
|
| import sys |
| from pathlib import Path |
|
|
| import pytest |
|
|
| sys.path.insert(0, str(Path(__file__).resolve().parent.parent)) |
|
|
| from app import cache, config |
|
|
|
|
| @pytest.fixture(autouse=True) |
| def isolated_cache(tmp_path, monkeypatch): |
| """Each test gets a throwaway SQLite cache so tests never share state.""" |
| monkeypatch.setattr(config, "CACHE_DB", str(tmp_path / "test_cache.sqlite")) |
| monkeypatch.setattr(cache, "_conn", None) |
| yield |
| if cache._conn is not None: |
| cache._conn.close() |
| cache._conn = None |
|
|
|
|
| @pytest.fixture |
| def fake_keys(monkeypatch): |
| monkeypatch.setattr(config, "tomtom_key", lambda: "fake-tomtom") |
| monkeypatch.setattr(config, "calendarific_key", lambda: "fake-calendarific") |
| monkeypatch.setattr(config, "ticketmaster_key", lambda: "fake-ticketmaster") |
| monkeypatch.setattr(config, "gemini_key", lambda: "fake-gemini") |
| monkeypatch.setattr(config, "groq_key", lambda: "fake-groq") |
|
|
|
|
| @pytest.fixture |
| def no_llm_keys(monkeypatch): |
| monkeypatch.setattr(config, "gemini_key", lambda: None) |
| monkeypatch.setattr(config, "groq_key", lambda: None) |
|
|
|
|
| class FakeResponse: |
| def __init__(self, json_data=None, status_code=200, text=""): |
| self._json = json_data or {} |
| self.status_code = status_code |
| self.text = text or str(json_data) |
|
|
| def json(self): |
| return self._json |
|
|
| def raise_for_status(self): |
| if self.status_code >= 400: |
| import requests |
|
|
| raise requests.HTTPError(f"HTTP {self.status_code}", response=self) |
|
|
|
|
| @pytest.fixture |
| def fake_response(): |
| return FakeResponse |
|
|