/
outthevoid
/
python_microblogging_service_project
Обзор
Документация
Войти
/
outthevoid
/
python_microblogging_service_project
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
master
tests/test_tweets.py
128 строк
4 KB
VladimirChukavin
Revert "Вернул проект в исходное состояние."
07 апр 2026, 14:01
07 апр 2026, 14:01
7531b60
Код
Авторство
О чём код?
from typing import Dict import pytest from httpx import AsyncClient @pytest.mark.asyncio async def test_get_feed_success( client: AsyncClient, auth_headers: Dict[str, str] ) -> None: """ Проверяет успешное получение ленты твитов. Отправляет запрос с корректными заголовками авторизации и ожидает успешный статус, флаг результата ``True`` и наличие двух твитов с основными полями в ответе. """ response = await client.get("/api/tweets", headers=auth_headers) assert response.status_code == 200 result = response.json() assert result["result"] is True assert len(result["tweets"]) == 2 first_tweet = result["tweets"][0] assert "id" in first_tweet assert "content" in first_tweet assert "attachments" in first_tweet assert "author" in first_tweet assert "likes" in first_tweet for tweet in result["tweets"]: for attachment in tweet["attachments"]: assert attachment.startswith("/static/images/") @pytest.mark.asyncio async def test_create_tweet_success( client: AsyncClient, auth_headers: Dict[str, str] ) -> None: """ Проверяет успешное создание нового твита. Отправляет корректный JSON с текстом твита и ожидает успешный статус, флаг результата ``True`` и целочисленный идентификатор твита. """ response = await client.post( "/api/tweets", headers=auth_headers, json={"tweet_data": "New test tweet", "tweet_media_ids": []}, ) assert response.status_code == 200 result = response.json() assert result["result"] is True assert isinstance(result["tweet_id"], int) @pytest.mark.asyncio async def test_create_tweet_validation_error( client: AsyncClient, auth_headers: Dict[str, str] ) -> None: """ Проверяет валидацию при попытке создать пустой твит. Отправляет JSON с пробельным содержимым твита и ожидает статус 400, флаг результата ``False`` и тип ошибки ``validation_error``. """ response = await client.post( "/api/tweets", headers=auth_headers, json={"tweet_data": " ", "tweet_media_ids": []}, ) assert response.status_code == 400 result = response.json() assert result["result"] is False assert result["error_type"] == "validation_error" @pytest.mark.asyncio async def test_delete_own_tweet_success(client: AsyncClient) -> None: """ Проверяет успешное удаление собственного твита. Сначала создаёт твит от имени пользователя, затем отправляет запрос на его удаление и ожидает успешный статус и положительный результат. """ create_response = await client.post( "/api/tweets", headers={"api-key": "alice-key"}, json={"tweet_data": "Tweet to delete", "tweet_media_ids": []}, ) tweet_id = create_response.json()["tweet_id"] delete_response = await client.delete( f"/api/tweets/{tweet_id}", headers={"api-key": "alice-key"} ) assert delete_response.status_code == 200 assert delete_response.json()["result"] is True @pytest.mark.asyncio async def test_delete_foreign_tweet_forbidden( client: AsyncClient, auth_headers: Dict[str, str] ) -> None: """ Проверяет запрет на удаление чужого твита. Отправляет запрос на удаление твита, принадлежащего другому пользователю, и ожидает статус 403 и тип ошибки ``forbidden``. """ response = await client.delete("/api/tweets/2", headers=auth_headers) assert response.status_code == 403 result = response.json() assert result["result"] is False assert result["error_type"] == "forbidden"