import pytest from fastapi.testclient import TestClient from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from app.main import app from app.database.database import get_db from app.models.post import Post from app.models.user import User from datetime import datetime # Тестовый клиент client = TestClient(app) # Настройка тестовой базы данных SQLALCHEMY_DATABASE_URL = "sqlite:///./test.db" engine = create_engine(SQLALCHEMY_DATABASE_URL, connect_args={"check_same_thread": False}) TestingSessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine) def override_get_db(): try: db = TestingSessionLocal() yield db finally: db.close() app.dependency_overrides[get_db] = override_get_db def test_create_post(): """Тест создания поста""" user_data = { "username": "testuser", "email": "test@example.com", "full_name": "Test User" } # Создаем пользователя response = client.post("/users/", json=user_data) assert response.status_code == 200 # Создаем пост post_data = { "title": "Test Post", "content": "This is a test post content", "status": "draft" } response = client.post("/posts/", json=post_data) assert response.status_code == 200 data = response.json() assert data["title"] == "Test Post" assert data["content"] == "This is a test post content" return data["id"] def test_publish_to_telegram(): """Тест публикации в Telegram (без фактической отправки)""" # Создаем пост для тестирования post_id = test_create_post() # Тестируем публикацию в Telegram # Так как у нас нет реального токена в тестовой среде, # мы ожидаем ошибку связанную с отсутствием настроек response = client.post(f"/posts/{post_id}/publish_telegram?chat_id=test_chat") # Ожидаем ошибку из-за отсутствия TELEGRAM_BOT_TOKEN assert response.status_code in [422, 500] def test_publish_to_twitter(): """Тест публикации в Twitter (без фактической отправки)""" # Создаем пост для тестирования post_id = test_create_post() # Тестируем публикацию в Twitter # Так как у нас нет реальных ключей в тестовой среде, # мы ожидаем ошибку связанную с отсутствием настроек response = client.post(f"/posts/{post_id}/publish_twitter") # Ожидаем ошибку из-за отсутствия TWITTER_* переменных окружения assert response.status_code in [422, 500] if __name__ == "__main__": pytest.main()