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:39:32 +06:00
parent 298c7f5f53
commit 3299e846f5
3 changed files with 37 additions and 99 deletions

View File

@@ -1,89 +1,32 @@
image: python:3.11
services:
- postgres:15
variables:
POSTGRES_DB: test_app
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_HOST_AUTH_METHOD: trust
DATABASE_URL: postgresql://postgres:postgres@postgres:5432/test_app
TESTING: "1"
stages:
- test
- build
- deploy
variables:
SECRET_KEY: "your-super-secret-key-123"
before_script:
- cd backend
- python -m pip install --upgrade pip
- pip install -r requirements.txt
- pip install pytest pytest-cov
test:
image: python:3.11
stage: test
before_script:
- python -V
- python -m pip install --upgrade pip
- pip install pytest
- pip install -r backend/requirements.txt
script:
- cd backend
- python -m pytest -v
only:
- main
- Testing
build_backend:
stage: build
image: docker:latest
variables:
DOCKER_TLS_CERTDIR: ""
services:
- name: docker:dind
alias: docker
command: ["--tls=false"]
before_script:
- docker info
script:
- cd backend
- docker build -t backend:latest .
- docker save backend:latest > backend.tar
- pytest -v --cov=app
coverage: '/TOTAL.+ ([0-9]{1,3}%)/'
artifacts:
paths:
- backend/backend.tar
expire_in: 1 hour
only:
- main
build_frontend:
stage: build
image: docker:latest
variables:
DOCKER_TLS_CERTDIR: ""
services:
- name: docker:dind
alias: docker
command: ["--tls=false"]
before_script:
- docker info
script:
- cd frontend
- docker build -t frontend:latest .
- docker save frontend:latest > frontend.tar
artifacts:
paths:
- frontend/frontend.tar
expire_in: 1 hour
only:
- main
deploy:
stage: deploy
image: python:3.11
script:
- apt-get update -qy
- apt-get install -y sshpass
- sshpass -p "$SSH_PASSWORD" scp -o StrictHostKeyChecking=no backend/backend.tar frontend/frontend.tar docker-compose.yml root@185.139.70.62:/root/app/
- |
sshpass -p "$SSH_PASSWORD" ssh -o StrictHostKeyChecking=no root@185.139.70.62 "bash -c '
cd /root/app &&
docker load < backend.tar &&
docker load < frontend.tar &&
export SECRET_KEY=\"your-super-secret-key-123\" &&
/usr/bin/docker compose down &&
/usr/bin/docker compose up -d
'"
only:
- main
environment:
name: production
reports:
coverage_report:
coverage_format: cobertura
path: coverage.xml

View File

@@ -1,4 +1,5 @@
"""Test configuration"""
import os
from pydantic_settings import BaseSettings
class TestSettings(BaseSettings):
@@ -8,7 +9,7 @@ class TestSettings(BaseSettings):
# Database
POSTGRES_USER: str = "postgres"
POSTGRES_PASSWORD: str = "postgres"
POSTGRES_HOST: str = "localhost"
POSTGRES_HOST: str = os.getenv("POSTGRES_HOST", "localhost")
POSTGRES_PORT: str = "5432"
POSTGRES_DB: str = "test_app"
@@ -33,6 +34,9 @@ class TestSettings(BaseSettings):
def get_database_url(self) -> str:
"""Get database URL"""
return f"postgresql://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}"
return os.getenv(
"DATABASE_URL",
f"postgresql://{self.POSTGRES_USER}:{self.POSTGRES_PASSWORD}@{self.POSTGRES_HOST}:{self.POSTGRES_PORT}/{self.POSTGRES_DB}"
)
test_settings = TestSettings()

View File

@@ -24,24 +24,15 @@ TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engin
@pytest.fixture(scope="session", autouse=True)
def setup_test_db() -> Generator[None, Any, None]:
"""Setup test database"""
# Пробуем создать базу данных test_app
default_engine = create_engine(f"postgresql://{test_settings.POSTGRES_USER}:{test_settings.POSTGRES_PASSWORD}@{test_settings.POSTGRES_HOST}:{test_settings.POSTGRES_PORT}/postgres")
with default_engine.connect() as conn:
conn.execute(text("COMMIT")) # Завершаем текущую транзакцию
try:
conn.execute(text("DROP DATABASE IF EXISTS test_app"))
conn.execute(text("CREATE DATABASE test_app"))
except Exception as e:
print(f"Error creating database: {e}")
# Создаем все таблицы
Base.metadata.create_all(bind=engine)
yield
# Удаляем все таблицы
Base.metadata.drop_all(bind=engine)
# Закрываем соединение с тестовой базой
engine.dispose()
try:
# Создаем все таблицы
Base.metadata.create_all(bind=engine)
yield
finally:
# Удаляем все таблицы
Base.metadata.drop_all(bind=engine)
# Закрываем соединение с тестовой базой
engine.dispose()
@pytest.fixture
def db_session() -> Generator[Any, Any, None]: