Implement phase 3 and 4: Telegram and Twitter integration

This commit is contained in:
2026-01-18 22:42:48 +03:00
parent 836e8df344
commit f4725a5506
11 changed files with 726 additions and 7 deletions
+86
View File
@@ -0,0 +1,86 @@
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()