| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162 |
- 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"]
|