mirror of
https://gitverse.ru/kpa39l/telepost.git
synced 2026-09-29 09:55:09 +00:00
86 lines
3.0 KiB
Python
86 lines
3.0 KiB
Python
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() |