/
tsps
/
case_loader
Обзор
Документация
Войти
/
tsps
/
case_loader
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
master
tests/conftest.py
104 строки
3 KB
Василий Петров
Не создаём дубли документов при повторном запуске
15 фев 2026, 19:39
15 фев 2026, 19:39
655daae
Код
Авторство
О чём код?
import pytest import os from pathlib import Path # Устанавливаем переменную окружения, чтобы загрузить тестовые настройки os.environ["ENV_FILE"] = str(Path(__file__).parent / ".env.test") # Сбрасываем кэш модулей app import sys for mod in list(sys.modules): if mod.startswith("app."): del sys.modules[mod] from app.core.config import config from sqlalchemy import create_engine, text @pytest.fixture(scope="function") def test_db(): """ Фикстура: временная тестовая БД в PostgreSQL. Создаёт уникальную схему для каждого теста и удаляет её после. """ # Создаём движок для подключения к тестовой БД engine = create_engine(config.DATABASE_URL) # Генерируем уникальное имя схемы import uuid schema_name = f"test_{uuid.uuid4().hex[:8]}" with engine.connect() as conn: # Создаём схему conn.execute(text(f"CREATE SCHEMA {schema_name}")) conn.commit() # Создаём движок с указанием схемы по умолчанию schema_engine = create_engine( config.DATABASE_URL, connect_args={"options": f"-c search_path={schema_name}"} ) # Создаём таблицы from app.models.tables import metadata metadata.create_all(schema_engine) yield schema_engine # Очистка: удаляем схему после теста with engine.connect() as conn: conn.execute(text(f"DROP SCHEMA {schema_name} CASCADE")) conn.commit() schema_engine.dispose() engine.dispose() @pytest.fixture def db_connection(test_db): """Фикстура: соединение с тестовой БД""" with test_db.connect() as conn: yield conn conn.rollback() # Откатываем все изменения после теста @pytest.fixture def reference_data(db_connection): """ Фикстура: создаёт минимальный набор справочных данных для тестов. Возвращает словарь с ID созданных записей. """ # Создаём тип документа result = db_connection.execute( text(""" INSERT INTO document_type (name) VALUES ('Решение') RETURNING id """) ) document_type_id = result.scalar_one() # Создаём суд result = db_connection.execute( text(""" INSERT INTO court (name) VALUES ('Арбитражный суд города Москвы') RETURNING id """) ) court_id = result.scalar_one() # Создаём судью result = db_connection.execute( text(""" INSERT INTO judge (first_name, last_name) VALUES ('Иван', 'Иванов') RETURNING id """) ) judge_id = result.scalar_one() db_connection.commit() return { "document_type_id": document_type_id, "court_id": court_id, "judge_id": judge_id }