28 lines
1.3 KiB
Python
28 lines
1.3 KiB
Python
"""Shared pytest fixtures and import-time guards for the backend test suite.
|
|||
|
|
|
||
|
|
pytest imports this file before any test module beneath backend/tests/, which
|
||
|
|
makes it the only reliable place to install import-time guards: individual test
|
||
|
|
modules cannot guarantee they run first, because collection order follows
|
||
|
|
directory names.
|
||
|
|
"""
|
||
|
|
|
||
|
|
from __future__ import annotations
|
||
|
|
|
||
|
|
import sys
|
||
|
|
from unittest.mock import MagicMock
|
||
|
|
|
||
|
|
# app/shared/bootstrap.py (the composition root) eagerly imports the Postgres
|
||
|
|
# store modules, which do `import psycopg2` at their own module scope and later
|
||
|
|
# open a real connection pool. Any test that transitively imports bootstrap
|
||
|
|
# would therefore bind the real driver and attempt a live TCP connection to the
|
||
|
|
# configured production database, surfacing as a multi-second timeout rather
|
||
|
|
# than an obvious error. Binding mocks here — before the first test module is
|
||
|
|
# imported — makes that impossible regardless of collection order.
|
||
|
|
# setdefault (not assignment) keeps a real psycopg2 in place if something has
|
||
|
|
# already imported it deliberately.
|
||
|
|
_mock_psycopg2 = MagicMock()
|
||
|
|
_mock_psycopg2.extras = MagicMock()
|
||
|
|
sys.modules.setdefault("psycopg2", _mock_psycopg2)
|
||
|
|
sys.modules.setdefault("psycopg2.extras", _mock_psycopg2.extras)
|
||
|
|
sys.modules.setdefault("psycopg2.pool", MagicMock())
|