import os import sys # Must be set before any repositories module is imported — each module # selects its Mock* implementation vs the real PocketBase-backed one at # import time based on this flag. os.environ['USE_MOCK_REPOSITORIES'] = 'true' os.environ.setdefault('API_SECRET_KEY', 'test-api-key') os.environ.setdefault('POCKETBASE_URL', 'http://pocketbase.invalid') os.environ.setdefault('REDIS_URL', 'redis://localhost:6379/0') # Keeps Flask-Limiter off the network entirely in tests — see extensions.py. os.environ.setdefault('RATELIMIT_STORAGE_URI', 'memory://') os.environ.setdefault('FIRECRAWL_URL', 'http://firecrawl.invalid') os.environ.setdefault('GOTIFY_URL', 'http://gotify.invalid') os.environ.setdefault('GOTIFY_APP_TOKEN', 'test-token') sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) import pytest @pytest.fixture def app(): from app import app as flask_app flask_app.config['TESTING'] = True return flask_app @pytest.fixture def client(app): return app.test_client() @pytest.fixture def api_headers(): return {'X-API-Key': 'test-api-key'} @pytest.fixture(autouse=True) def _reset_mock_repositories(): """ Clears every mock repository's in-memory store between tests so state doesn't leak across test functions. """ yield from repositories.tenant_repository import tenant_repository from repositories.seat_repository import seat_repository from repositories.competitor_repository import competitor_repository from repositories.product_repository import product_repository from repositories.scrape_repository import scrape_repository from repositories.proxy_repository import proxy_repository from repositories.alert_repository import alert_repository from repositories.battlecard_repository import battlecard_repository from repositories.comparable_repository import comparable_repository from repositories.monitoring_repository import monitoring_repository for repo in [ tenant_repository, seat_repository, competitor_repository, product_repository, scrape_repository, proxy_repository, alert_repository, battlecard_repository, comparable_repository, monitoring_repository, ]: if hasattr(repo, '_records'): repo._records.clear()