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

Fix database

This commit is contained in:
MoonTestUse1
2025-01-07 05:44:30 +06:00
parent 3299e846f5
commit 51f7a388f6
4 changed files with 28 additions and 20 deletions

View File

@@ -1,7 +1,8 @@
image: python:3.11
services:
- postgres:15
- name: postgres:15
alias: postgres
variables:
POSTGRES_DB: test_app
@@ -9,6 +10,7 @@ variables:
POSTGRES_PASSWORD: postgres
POSTGRES_HOST_AUTH_METHOD: trust
DATABASE_URL: postgresql://postgres:postgres@postgres:5432/test_app
POSTGRES_HOST: postgres
TESTING: "1"
stages:
@@ -23,7 +25,7 @@ before_script:
test:
stage: test
script:
- pytest -v --cov=app
- python -m pytest -v --cov=app
coverage: '/TOTAL.+ ([0-9]{1,3}%)/'
artifacts:
reports:

View File

@@ -9,7 +9,7 @@ class Settings(BaseSettings):
# База данных
POSTGRES_USER: str = "postgres"
POSTGRES_PASSWORD: str = "postgres"
POSTGRES_HOST: str = "postgres"
POSTGRES_HOST: str = os.getenv("POSTGRES_HOST", "postgres")
POSTGRES_PORT: str = "5432"
POSTGRES_DB: str = "app"
POSTGRES_TEST_DB: str = "test_app"
@@ -40,9 +40,19 @@ class Settings(BaseSettings):
def get_database_url(self) -> str:
"""Get database URL"""
# Получаем URL из переменной окружения, если она есть
if os.getenv("DATABASE_URL"):
return os.getenv("DATABASE_URL")
# Иначе формируем URL на основе настроек
if self.TESTING:
return f"postgresql://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@localhost:5432/{self.POSTGRES_TEST_DB}"
return f"postgresql://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}"
host = os.getenv("POSTGRES_HOST", "postgres")
db = self.POSTGRES_TEST_DB
else:
host = self.POSTGRES_HOST
db = self.POSTGRES_DB
return f"postgresql://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@{host}:{self.POSTGRES_PORT}/{db}"
def get_redis_url(self) -> str:
"""Get Redis URL"""

View File

@@ -1,22 +1,16 @@
"""Database configuration"""
import os
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy.orm import sessionmaker, declarative_base
# Определяем URL базы данных в зависимости от окружения
if os.getenv("TESTING"):
SQLALCHEMY_DATABASE_URL = "sqlite:///:memory:"
engine = create_engine(
SQLALCHEMY_DATABASE_URL,
connect_args={"check_same_thread": False}
)
else:
SQLALCHEMY_DATABASE_URL = "postgresql://postgres:postgres@postgres:5432/app"
engine = create_engine(SQLALCHEMY_DATABASE_URL)
from .core.config import settings
# Создаем движок базы данных
engine = create_engine(settings.get_database_url())
# Создаем фабрику сессий
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# Создаем базовый класс для моделей
Base = declarative_base()
def get_db():

View File

@@ -16,7 +16,8 @@ from app.dependencies import get_db
from .test_fixtures import * # импортируем все фикстуры
# Создаем тестовый движок базы данных
engine = create_engine(test_settings.get_database_url())
DATABASE_URL = os.getenv("DATABASE_URL", test_settings.get_database_url())
engine = create_engine(DATABASE_URL)
# Создаем тестовую фабрику сессий
TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
@@ -26,7 +27,8 @@ def setup_test_db() -> Generator[None, Any, None]:
"""Setup test database"""
try:
# Создаем все таблицы
Base.metadata.create_all(bind=engine)
Base.metadata.drop_all(bind=engine) # Сначала удаляем все таблицы
Base.metadata.create_all(bind=engine) # Затем создаем заново
yield
finally:
# Удаляем все таблицы