Initial commit

This commit is contained in:
KamilM1205 2026-01-19 23:32:11 +04:00
commit 9795660e1f
43 changed files with 2757 additions and 0 deletions

206
tests/api/test_posts.py Normal file
View file

@ -0,0 +1,206 @@
from typing import Any, Dict
import pytest
import allure
import logging
from tests.api.utils.api_client import APIClient
logger = logging.getLogger(__name__)
# Фикстура для получения списка постов из API
@pytest.fixture(scope="function")
def list_of_posts(api_client):
with allure.step("Get all posts"):
resp = api_client.get_all_posts()
assert resp.status_code == 200
return resp.json()
# Отдельные классы вариант
@allure.feature("Posts")
@allure.story("Guest permissions")
class TestGuestPosts:
"""Тестирование операций с постами под гостем (неавторизованный доступ)"""
@allure.title("Guest: Creating new posts - should fail")
def test_guest_posts_creating(self, api_client, api_post_data):
with allure.step("Logged as guest"):
logger.info("Guest trying to create posts")
for post in api_post_data:
resp = api_client.create_post(post)
assert resp.status_code == 401
@allure.title("Guest: Update posts - should fail")
def test_guest_posts_update(self, api_client, list_of_posts):
posts = list_of_posts
with allure.step("Guest trying to change posts data"):
for post in posts:
logger.info(f"Guest changing post: {post['title']}")
post["title"] = "Changed by guest"
post["description"] = "Changed by guest"
post["content"] = "Changed by guest"
resp = api_client.update_post(post["id"], post)
assert resp.status_code == 401
@allure.title("Guest: Get all posts - should succeed")
def test_guest_get_all_posts(self, api_client):
with allure.step("Guest getting all posts"):
logger.info("Guest getting all posts")
resp = api_client.get_all_posts()
assert resp.status_code == 200
@allure.title("Guest: Get post by ID - should succeed")
def test_guest_get_post_by_id(self, api_client, list_of_posts):
posts = list_of_posts
if posts:
post_id = posts[0]["id"]
with allure.step(f"Guest getting post with ID {post_id}"):
logger.info(f"Guest getting post: {post_id}")
resp = api_client.get_post(post_id)
assert resp.status_code == 200
@allure.title("Guest: Delete posts - should fail")
def test_guest_posts_deleting(self, api_client, list_of_posts):
posts = list_of_posts
with allure.step("Guest trying to delete posts"):
for post in posts:
logger.info(f"Guest deleting post: {post['title']}")
resp = api_client.delete_post(post["id"])
assert resp.status_code == 401
@allure.feature("Posts")
@allure.story("Admin permissions")
class TestAdminPosts:
"""Тестирование операций с постами под администратором"""
@allure.title("Admin: Creating new posts - should succeed")
def test_admin_posts_creating(self, auth_admin, api_post_data, api_user_data):
id = ''
with allure.step("Logged as admin"):
pass
with allure.step("Create new user"):
user = api_user_data[0]
resp = auth_admin.create_user(user)
assert resp.status_code == 201
id = resp.json()['id']
with allure.step("Create posts"):
logger.info("Admin creating posts")
for post in api_post_data:
post['userId'] = id
resp = auth_admin.create_post(post)
assert resp.status_code == 201
@allure.title("Admin: Update posts - should succeed")
def test_admin_posts_update(self, auth_admin, list_of_posts):
posts = list_of_posts
with allure.step("Admin changing posts data"):
for post in posts:
logger.info(f"Admin changing post: {post['title']}")
new_post: Dict[str, Any] = {}
new_post["title"] = "Changed by admin."
new_post["description"] = "Changed by admin. Test data."
new_post["content"] = "Changed by admin."
resp = auth_admin.update_post(post["id"], new_post)
assert resp.status_code == 200
@allure.title("Admin: Get all posts - should succeed")
def test_admin_get_all_posts(self, auth_admin):
with allure.step("Admin getting all posts"):
logger.info("Admin getting all posts")
resp = auth_admin.get_all_posts()
assert resp.status_code == 200
@allure.title("Admin: Get post by ID - should succeed")
def test_admin_get_post_by_id(self, auth_admin, list_of_posts):
posts = list_of_posts
if posts:
post_id = posts[0]["id"]
with allure.step(f"Admin getting post with ID {post_id}"):
logger.info(f"Admin getting post: {post_id}")
resp = auth_admin.get_post(post_id)
assert resp.status_code == 200
@allure.title("Admin: Delete posts - should succeed")
def test_admin_posts_deleting(self, auth_admin, list_of_posts):
posts = list_of_posts
id = posts[0]['userId']
with allure.step("Admin deleting posts"):
for post in posts:
logger.info(f"Admin deleting post: {post['title']}")
resp = auth_admin.delete_post(post["id"])
assert resp.status_code == 200
with allure.step("Delete user"):
resp = auth_admin.delete_user(id)
assert resp.status_code == 200
@allure.feature("Posts")
@allure.story("Regular user permissions")
class TestRegularUserPosts:
"""Тестирование операций с постами под обычным пользователем"""
@allure.title("User: Creating new posts - should succeed")
def test_user_posts_creating(self, auth_user: APIClient, api_post_data):
id = auth_user.get_all_users().json()[0]['id']
with allure.step("Logged as user"):
pass
with allure.step("Create new posts"):
logger.info("User creating posts")
for post in api_post_data:
post['userId'] = id
resp = auth_user.create_post(post)
assert resp.status_code == 201
@allure.title("User: Update posts - should succeed")
def test_user_posts_update(self, auth_user, list_of_posts):
posts = list_of_posts
with allure.step("User changing posts data"):
for post in posts:
logger.info(f"User changing post: {post['title']}")
post["title"] = "Changed by user"
post["description"] = "Changed by user"
post["content"] = "Changed by user"
resp = auth_user.update_post(post["id"], post)
assert resp.status_code == 200
@allure.title("User: Get all posts - should succeed")
def test_user_get_all_posts(self, auth_user):
with allure.step("User getting all posts"):
logger.info("User getting all posts")
resp = auth_user.get_all_posts()
assert resp.status_code == 200
@allure.title("User: Get post by ID - should succeed")
def test_user_get_post_by_id(self, auth_user, list_of_posts):
posts = list_of_posts
if posts:
post_id = posts[0]["id"]
with allure.step(f"User getting post with ID {post_id}"):
logger.info(f"User getting post: {post_id}")
resp = auth_user.get_post(post_id)
assert resp.status_code == 200
@allure.title("User: Delete posts - should succeed")
def test_user_posts_deleting(self, auth_user, list_of_posts):
posts = list_of_posts
with allure.step("User deleting posts"):
for post in posts:
logger.info(f"User deleting post: {post['title']}")
resp = auth_user.delete_post(post["id"])
assert resp.status_code == 200