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.request import Request # noqa
from .models.token import Token # noqa from .models.token import Token # noqa
# Используем разные URL для тестов и продакшена
SQLALCHEMY_DATABASE_URL = settings.DATABASE_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( engine = create_engine(
SQLALCHEMY_DATABASE_URL, SQLALCHEMY_DATABASE_URL,
connect_args=connect_args connect_args=connect_args
) )
# Создаем фабрику сессий
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
def get_db(): def get_db():
"""Получение сессии базы данных."""
db = SessionLocal() db = SessionLocal()
try: try:
yield db yield db

View File

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

View File

@@ -1,31 +1,14 @@
"""Test configuration.""" """Test configuration."""
import os
import pytest import pytest
from typing import Generator from typing import Generator
from fastapi.testclient import TestClient from fastapi.testclient import TestClient
from sqlalchemy import create_engine from unittest.mock import patch
from sqlalchemy.orm import sessionmaker
from sqlalchemy.pool import StaticPool
from unittest.mock import Mock, patch
from .test_config import engine, TestingSessionLocal
from app.database import get_db from app.database import get_db
from app.main import app
from app.models.base import Base from app.models.base import Base
from app.models.employee import Employee from app.models.employee import Employee
from app.utils.auth import get_password_hash 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: class MockRedis:
"""Мок для Redis.""" """Мок для Redis."""
@@ -72,6 +55,8 @@ def db() -> Generator:
@pytest.fixture(scope="function") @pytest.fixture(scope="function")
def client(db: TestingSessionLocal, redis_mock) -> Generator: def client(db: TestingSessionLocal, redis_mock) -> Generator:
"""Фикстура для создания тестового клиента.""" """Фикстура для создания тестового клиента."""
from app.main import app
def override_get_db(): def override_get_db():
try: try:
yield db 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)