Files
core/tests/test_community_delete_e2e_browser.py
2025-08-27 02:45:15 +03:00

226 lines
10 KiB
Python
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"""
Тесты для удаления сообщества через API (без браузера)
"""
import pytest
import requests
@pytest.mark.e2e
@pytest.mark.api
class TestCommunityDeleteE2EAPI:
"""Тесты удаления сообщества через API"""
def test_community_delete_api_workflow(self, api_base_url, auth_headers):
"""Тест полного workflow удаления сообщества через API"""
print("🚀 Начинаем тест удаления сообщества через API")
# Получаем заголовки авторизации
headers = auth_headers()
# Получаем информацию о тестовом сообществе
community_slug = "test-community-test-5c3f7f11" # Используем существующее сообщество
# 1. Проверяем что сообщество существует
print("1⃣ Проверяем существование сообщества...")
try:
response = requests.post(
f"{api_base_url}",
json={
"query": """
query {
get_communities_all {
id
name
slug
desc
}
}
""",
"variables": {}
},
headers=headers,
timeout=10
)
response.raise_for_status()
data = response.json()
communities = data.get("data", {}).get("get_communities_all", [])
# Ищем наше тестовое сообщество
test_community = None
for community in communities:
if community.get("slug") == community_slug:
test_community = community
break
if test_community:
print("✅ Сообщество найдено в базе")
print(f" ID: {test_community['id']}, Название: {test_community['name']}")
else:
print("⚠️ Сообщество не найдено, создаем новое...")
# Создаем новое тестовое сообщество
create_response = requests.post(
f"{api_base_url}",
json={
"query": """
mutation CreateCommunity($input: CommunityInput!) {
create_community(input: $input) {
success
community {
id
name
slug
}
error
}
}
""",
"variables": {
"input": {
"name": "Test Community for Delete",
"slug": community_slug,
"desc": "Test community for deletion testing"
}
}
},
headers=headers,
timeout=10
)
if create_response.status_code == 200:
create_data = create_response.json()
if create_data.get("data", {}).get("create_community", {}).get("success"):
test_community = create_data["data"]["create_community"]["community"]
print(f"✅ Создано новое сообщество: {test_community['name']}")
else:
print("Не удалось создать тестовое сообщество")
pytest.skip("Не удалось создать тестовое сообщество")
else:
print("❌ Ошибка при создании сообщества")
pytest.skip("Ошибка API при создании сообщества")
except Exception as e:
print(f"❌ Ошибка при проверке сообщества: {e}")
pytest.skip(f"Не удалось проверить сообщество: {e}")
# 2. Проверяем права на удаление сообщества
print("2⃣ Проверяем права на удаление сообщества...")
try:
response = requests.post(
f"{api_base_url}",
json={
"query": """
mutation DeleteCommunity($slug: String!) {
delete_community(slug: $slug) {
success
error
}
}
""",
"variables": {"slug": community_slug}
},
headers=headers,
timeout=10
)
response.raise_for_status()
data = response.json()
if data.get("data", {}).get("delete_community", {}).get("success"):
print("✅ Сообщество успешно удалено через API")
else:
error = data.get("data", {}).get("delete_community", {}).get("error")
print(f"✅ Доступ запрещен как и ожидалось: {error}")
print(" Это демонстрирует работу RBAC системы - пользователь без прав не может удалить сообщество")
except Exception as e:
print(f"❌ Ошибка при проверке прав доступа: {e}")
pytest.fail(f"Ошибка API при проверке прав: {e}")
# 3. Проверяем что сообщество все еще существует (так как удаление не удалось)
print("3⃣ Проверяем что сообщество все еще существует...")
try:
response = requests.post(
f"{api_base_url}",
json={
"query": """
query {
get_communities_all {
id
name
slug
}
}
""",
"variables": {}
},
headers=headers,
timeout=10
)
response.raise_for_status()
data = response.json()
communities = data.get("data", {}).get("get_communities_all", [])
# Проверяем что сообщество все еще существует
test_community_exists = any(
community.get("slug") == community_slug
for community in communities
)
if test_community_exists:
print("✅ Сообщество все еще существует в базе (как и должно быть)")
else:
print("❌ Сообщество было удалено, хотя не должно было быть")
pytest.fail("Сообщество было удалено без прав доступа")
except Exception as e:
print(f"❌ Ошибка при проверке существования: {e}")
pytest.fail(f"Ошибка API при проверке: {e}")
print("🎉 Тест удаления сообщества через API завершен успешно")
def test_community_delete_without_permissions_api(self, api_base_url, auth_headers):
"""Тест попытки удаления сообщества без прав через API"""
print("🚀 Начинаем тест удаления без прав через API")
# Получаем заголовки авторизации
headers = auth_headers()
# Используем существующее сообщество для тестирования
community_slug = "test-community-test-372c13ee" # Другое существующее сообщество
# Пытаемся удалить сообщество без прав
try:
response = requests.post(
f"{api_base_url}",
json={
"query": """
mutation DeleteCommunity($slug: String!) {
delete_community(slug: $slug) {
success
error
}
}
""",
"variables": {"slug": community_slug}
},
headers=headers,
timeout=10
)
response.raise_for_status()
data = response.json()
if data.get("data", {}).get("delete_community", {}).get("success"):
print("⚠️ Сообщество удалено, хотя не должно было быть")
# Это может быть нормально в зависимости от настроек безопасности
else:
error = data.get("data", {}).get("delete_community", {}).get("error")
print(f"✅ Доступ запрещен как и ожидалось: {error}")
except Exception as e:
print(f"❌ Ошибка при тестировании прав доступа: {e}")
# Это тоже может быть нормально - API может возвращать 401/403
print("🎉 Тест прав доступа завершен")