67 lines
2.5 KiB
Python
67 lines
2.5 KiB
Python
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
|
|
from repositories.price_history_repository import price_history_repository
|
|
from repositories.client_trips_repository import client_trips_repository
|
|
|
|
for repo in [
|
|
tenant_repository, seat_repository, competitor_repository, product_repository,
|
|
scrape_repository, proxy_repository, alert_repository, battlecard_repository,
|
|
comparable_repository, monitoring_repository, price_history_repository,
|
|
client_trips_repository,
|
|
]:
|
|
if hasattr(repo, '_records'):
|
|
repo._records.clear()
|