1
0
mirror of https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git synced 2025-08-14 00:25:46 +02:00

Fix tests

This commit is contained in:
MoonTestUse1
2025-01-06 23:17:51 +06:00
parent dbcfa0513f
commit f77782dabe
4 changed files with 39 additions and 30 deletions

View File

@@ -8,18 +8,24 @@ from .models.employee import Employee # noqa
from .models.request import Request # noqa
from .models.token import Token # noqa
# Используем разные URL для тестов и продакшена
SQLALCHEMY_DATABASE_URL = settings.DATABASE_URL
# Для SQLite нужны специальные параметры подключения
connect_args = {"check_same_thread": False} if settings.DATABASE_URL.startswith("sqlite") else {}
# Создаем движок с нужными параметрами
connect_args = {}
if SQLALCHEMY_DATABASE_URL.startswith("sqlite"):
connect_args["check_same_thread"] = False
engine = create_engine(
SQLALCHEMY_DATABASE_URL,
connect_args=connect_args
)
# Создаем фабрику сессий
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
def get_db():
"""Получение сессии базы данных."""
db = SessionLocal()
try:
yield db

View File

@@ -7,16 +7,17 @@ from .models.base import Base
from .database import engine, SessionLocal
from .routers import admin, employees, requests, auth, statistics
from .db.init_db import init_db
from .core.config import settings
# Создаем таблицы
Base.metadata.create_all(bind=engine)
# Инициализируем базу данных
db = SessionLocal()
try:
init_db(db)
finally:
db.close()
# Создаем таблицы только если не в тестовом режиме
if not settings.TESTING:
Base.metadata.create_all(bind=engine)
# Инициализируем базу данных
db = SessionLocal()
try:
init_db(db)
finally:
db.close()
app = FastAPI(
# Включаем автоматическое перенаправление со слэшем

View File

@@ -1,31 +1,14 @@
"""Test configuration."""
import os
import pytest
from typing import Generator
from fastapi.testclient import TestClient
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import StaticPool
from unittest.mock import Mock, patch
from unittest.mock import patch
from .test_config import engine, TestingSessionLocal
from app.database import get_db
from app.main import app
from app.models.base import Base
from app.models.employee import Employee
from app.utils.auth import get_password_hash
from app.utils.jwt import create_access_token
# Устанавливаем переменную окружения для тестов
os.environ["TESTING"] = "True"
# Создаем тестовую базу данных в памяти
SQLALCHEMY_DATABASE_URL = "sqlite:///:memory:"
engine = create_engine(
SQLALCHEMY_DATABASE_URL,
connect_args={"check_same_thread": False},
poolclass=StaticPool
)
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
class MockRedis:
"""Мок для Redis."""
@@ -72,6 +55,8 @@ def db() -> Generator:
@pytest.fixture(scope="function")
def client(db: TestingSessionLocal, redis_mock) -> Generator:
"""Фикстура для создания тестового клиента."""
from app.main import app
def override_get_db():
try:
yield db

View File

@@ -0,0 +1,17 @@
"""Test configuration"""
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import StaticPool
# Используем SQLite в памяти для тестов
SQLALCHEMY_DATABASE_URL = "sqlite:///:memory:"
# Создаем тестовый движок
engine = create_engine(
SQLALCHEMY_DATABASE_URL,
connect_args={"check_same_thread": False},
poolclass=StaticPool
)
# Создаем фабрику сессий
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)