mirror of
https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git
synced 2025-08-14 00:25:46 +02:00
116 lines
3.5 KiB
Python
116 lines
3.5 KiB
Python
import pytest
|
|
from fastapi.testclient import TestClient
|
|
from app.core.auth import create_access_token
|
|
|
|
pytestmark = pytest.mark.asyncio
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_create_request(client: TestClient, test_user: dict, redis):
|
|
"""Test creating a new request"""
|
|
access_token = create_access_token(
|
|
data={"sub": test_user["email"], "is_admin": False}
|
|
)
|
|
|
|
request_data = {
|
|
"request_type": "technical",
|
|
"description": "Test request",
|
|
"priority": "medium"
|
|
}
|
|
|
|
response = client.post(
|
|
"/api/requests/",
|
|
headers={"Authorization": f"Bearer {access_token}"},
|
|
json=request_data
|
|
)
|
|
assert response.status_code == 200
|
|
data = response.json()
|
|
assert data["request_type"] == request_data["request_type"]
|
|
assert data["description"] == request_data["description"]
|
|
assert data["priority"] == request_data["priority"]
|
|
assert data["status"] == "new"
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_create_request_invalid_priority(client: TestClient, test_user: dict, redis):
|
|
"""Test creating a request with invalid priority"""
|
|
access_token = create_access_token(
|
|
data={"sub": test_user["email"], "is_admin": False}
|
|
)
|
|
|
|
request_data = {
|
|
"request_type": "technical",
|
|
"description": "Test request",
|
|
"priority": "invalid"
|
|
}
|
|
|
|
response = client.post(
|
|
"/api/requests/",
|
|
headers={"Authorization": f"Bearer {access_token}"},
|
|
json=request_data
|
|
)
|
|
assert response.status_code == 422
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_get_user_requests(client: TestClient, test_user: dict, redis):
|
|
"""Test getting user's requests"""
|
|
access_token = create_access_token(
|
|
data={"sub": test_user["email"], "is_admin": False}
|
|
)
|
|
|
|
response = client.get(
|
|
"/api/requests/my",
|
|
headers={"Authorization": f"Bearer {access_token}"}
|
|
)
|
|
assert response.status_code == 200
|
|
assert isinstance(response.json(), list)
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_update_request_status(client: TestClient, test_admin: dict, redis):
|
|
"""Test updating request status (admin only)"""
|
|
access_token = create_access_token(
|
|
data={"sub": test_admin["email"], "is_admin": True}
|
|
)
|
|
|
|
# Сначала создаем запрос
|
|
request_data = {
|
|
"request_type": "technical",
|
|
"description": "Test request",
|
|
"priority": "medium"
|
|
}
|
|
|
|
create_response = client.post(
|
|
"/api/requests/",
|
|
headers={"Authorization": f"Bearer {access_token}"},
|
|
json=request_data
|
|
)
|
|
request_id = create_response.json()["id"]
|
|
|
|
# Теперь обновляем статус
|
|
update_data = {
|
|
"status": "in_progress"
|
|
}
|
|
|
|
response = client.put(
|
|
f"/api/admin/requests/{request_id}/status",
|
|
headers={"Authorization": f"Bearer {access_token}"},
|
|
json=update_data
|
|
)
|
|
assert response.status_code == 200
|
|
assert response.json()["status"] == "in_progress"
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_update_request_status_not_admin(client: TestClient, test_user: dict, redis):
|
|
"""Test updating request status without admin rights"""
|
|
access_token = create_access_token(
|
|
data={"sub": test_user["email"], "is_admin": False}
|
|
)
|
|
|
|
update_data = {
|
|
"status": "in_progress"
|
|
}
|
|
|
|
response = client.put(
|
|
"/api/admin/requests/1/status",
|
|
headers={"Authorization": f"Bearer {access_token}"},
|
|
json=update_data
|
|
)
|
|
assert response.status_code == 403 |