mirror of
https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git
synced 2025-08-14 00:25:46 +02:00
Fix database
This commit is contained in:
@@ -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:
|
||||
|
@@ -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"""
|
||||
|
@@ -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():
|
||||
|
@@ -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:
|
||||
# Удаляем все таблицы
|
||||
|
Reference in New Issue
Block a user