import pytest from sqlalchemy import create_engine, text from sqlalchemy.orm import sessionmaker from fastapi.testclient import TestClient import models, schemas from main import app, get_db from database import engine, Base TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) def override_get_db(): db = TestingSessionLocal() try: yield db finally: db.close() app.dependency_overrides[get_db] = override_get_db client = TestClient(app) @pytest.fixture(scope="session", autouse=True) def setup_database(): Base.metadata.drop_all(bind=engine) Base.metadata.create_all(bind=engine) yield @pytest.fixture(scope="function", autouse=True) def clean_database(): """Очистка записей в базе данных перед каждым тестом.""" db = TestingSessionLocal() try: db.execute(text("DELETE FROM posts")) db.execute(text("DELETE FROM users")) db.commit() finally: db.close() yield def test_database_connection(): """Проверяет доступность базы данных.""" db = TestingSessionLocal() try: # Простой запрос для проверки соединения result = db.execute(text("SELECT 1")) assert result.fetchone()[0] == 1 finally: db.close() def test_create_user(): """Проверяет добавление новой записи в таблицу пользователей.""" user_data = {"name": "Test User", "email": "test@example.com", "password": "password123"} response = client.post("/users/", json=user_data) assert response.status_code == 200 data = response.json() assert data["name"] == user_data["name"] assert data["email"] == user_data["email"] assert "id" in data def test_get_users(): """Проверяет просмотр всех записей пользователей.""" response = client.get("/users/") assert response.status_code == 200 data = response.json() assert isinstance(data, list) def test_get_user(): """Проверяет просмотр конкретного пользователя.""" user_data = {"name": "Another User", "email": "another@example.com", "password": "pass456"} create_response = client.post("/users/", json=user_data) user_id = create_response.json()["id"] response = client.get(f"/users/{user_id}") assert response.status_code == 200 data = response.json() assert data["id"] == user_id assert data["name"] == user_data["name"] def test_update_user(): """Проверяет редактирование данных пользователя.""" user_data = {"name": "Update User", "email": "update@example.com", "password": "oldpass"} create_response = client.post("/users/", json=user_data) user_id = create_response.json()["id"] update_data = {"name": "Updated User", "email": "updated@example.com", "password": "newpass"} response = client.put(f"/users/{user_id}", json=update_data) assert response.status_code == 200 data = response.json() assert data["name"] == update_data["name"] assert data["email"] == update_data["email"] def test_delete_user(): """Проверяет удаление записи пользователя.""" user_data = {"name": "Delete User", "email": "delete@example.com", "password": "delpass"} create_response = client.post("/users/", json=user_data) user_id = create_response.json()["id"] response = client.delete(f"/users/{user_id}") assert response.status_code == 200 response = client.get(f"/users/{user_id}") assert response.status_code == 404 def test_create_post(): """Проверяет добавление новой записи в таблицу постов.""" user_data = {"name": "Post User", "email": "post@example.com", "password": "postpass"} user_response = client.post("/users/", json=user_data) user_id = user_response.json()["id"] post_data = {"title": "Test Post", "content": "Test content", "user_id": user_id} response = client.post("/posts/", json=post_data) assert response.status_code == 200 data = response.json() assert data["title"] == post_data["title"] assert data["content"] == post_data["content"] assert data["user_id"] == user_id def test_get_posts(): """Проверяет просмотр всех записей постов.""" response = client.get("/posts/") assert response.status_code == 200 data = response.json() assert isinstance(data, list) def test_get_post(): """Проверяет просмотр конкретного поста.""" user_data = {"name": "Post User 2", "email": "post2@example.com", "password": "post2pass"} user_response = client.post("/users/", json=user_data) user_id = user_response.json()["id"] post_data = {"title": "Another Post", "content": "Another content", "user_id": user_id} create_response = client.post("/posts/", json=post_data) post_id = create_response.json()["id"] response = client.get(f"/posts/{post_id}") assert response.status_code == 200 data = response.json() assert data["id"] == post_id assert data["title"] == post_data["title"] def test_update_post(): """Проверяет редактирование данных поста.""" user_data = {"name": "Update Post User", "email": "updatepost@example.com", "password": "updatepostpass"} user_response = client.post("/users/", json=user_data) user_id = user_response.json()["id"] post_data = {"title": "Update Post", "content": "Update content", "user_id": user_id} create_response = client.post("/posts/", json=post_data) post_id = create_response.json()["id"] update_data = {"title": "Updated Post", "content": "Updated content", "user_id": user_id} response = client.put(f"/posts/{post_id}", json=update_data) assert response.status_code == 200 data = response.json() assert data["title"] == update_data["title"] assert data["content"] == update_data["content"]