app.bettersight.io/backend/tests/conftest.py

64 lines
2.3 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
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()