mirror of
https://gitverse.ru/kpa39l/telepost.git
synced 2026-09-29 09:55:09 +00:00
Implement phase 3 and 4: Telegram and Twitter integration
This commit is contained in:
@@ -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()
|
||||
Reference in New Issue
Block a user