1
0
mirror of https://gitlab.com/MoonTestUse1/AdministrationItDepartmens.git synced 2025-08-14 00:25:46 +02:00
Files
AdministrationItDepartmens/backend/tests/test_requests.py
2025-01-04 03:22:23 +06:00

164 lines
5.9 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

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.

import pytest
from fastapi.testclient import TestClient
from sqlalchemy.orm import Session
from app.main import app
from app.models.request import RequestStatus, RequestPriority
from app.crud import requests
from app.schemas.request import RequestCreate
client = TestClient(app)
def test_create_request(test_db: Session, test_employee, test_auth_header):
"""Test creating a new request"""
request_data = {
"department": "IT",
"request_type": "hardware",
"description": "This is a test request",
"priority": RequestPriority.MEDIUM.value
}
response = client.post(
"/api/requests/",
json=request_data,
headers=test_auth_header
)
assert response.status_code == 200
data = response.json()
assert data["department"] == request_data["department"]
assert data["description"] == request_data["description"]
assert data["priority"] == request_data["priority"]
assert data["status"] == RequestStatus.NEW.value
assert "employee_id" in data
def test_get_employee_requests(test_db: Session, test_employee, test_auth_header):
"""Test getting employee's requests"""
# Создаем тестовую заявку
request_data = RequestCreate(
department="IT",
request_type="hardware",
description="This is a test request",
priority=RequestPriority.MEDIUM.value
)
test_request = requests.create_request(test_db, request_data, test_employee.id)
response = client.get("/api/requests/my", headers=test_auth_header)
assert response.status_code == 200
data = response.json()
assert len(data) == 1
assert data[0]["department"] == test_request.department
assert data[0]["description"] == test_request.description
assert data[0]["priority"] == test_request.priority
assert data[0]["status"] == test_request.status
assert data[0]["employee_id"] == test_request.employee_id
def test_update_request_status(test_db: Session, test_employee, admin_auth_header):
"""Test updating request status"""
# Создаем тестовую заявку
request_data = RequestCreate(
department="IT",
request_type="hardware",
description="This is a test request",
priority=RequestPriority.MEDIUM.value
)
test_request = requests.create_request(test_db, request_data, test_employee.id)
update_data = {"status": RequestStatus.IN_PROGRESS.value}
response = client.patch(
f"/api/requests/{test_request.id}/status",
json=update_data,
headers=admin_auth_header
)
assert response.status_code == 200
data = response.json()
assert data["status"] == RequestStatus.IN_PROGRESS.value
def test_get_all_requests_admin(test_db: Session, test_employee, admin_auth_header):
"""Test getting all requests as admin"""
# Создаем тестовую заявку
request_data = RequestCreate(
department="IT",
request_type="hardware",
description="This is a test request",
priority=RequestPriority.MEDIUM.value
)
test_request = requests.create_request(test_db, request_data, test_employee.id)
response = client.get("/api/requests/admin", headers=admin_auth_header)
assert response.status_code == 200
data = response.json()
assert len(data) == 1
assert data[0]["department"] == test_request.department
def test_get_requests_by_status(test_db: Session, test_employee, admin_auth_header):
"""Test filtering requests by status"""
# Создаем тестовую заявку
request_data = RequestCreate(
department="IT",
request_type="hardware",
description="This is a test request",
priority=RequestPriority.MEDIUM.value
)
test_request = requests.create_request(test_db, request_data, test_employee.id)
response = client.get(
f"/api/requests/admin?status={RequestStatus.NEW.value}",
headers=admin_auth_header
)
assert response.status_code == 200
data = response.json()
assert len(data) == 1
assert data[0]["status"] == RequestStatus.NEW.value
def test_get_request_statistics(test_db: Session, test_employee, admin_auth_header):
"""Test getting request statistics"""
# Создаем тестовые заявки с разными статусами
requests_data = [
RequestCreate(
department="IT",
request_type="hardware",
description="Test request 1",
priority=RequestPriority.HIGH.value
),
RequestCreate(
department="IT",
request_type="software",
description="Test request 2",
priority=RequestPriority.MEDIUM.value
)
]
for data in requests_data:
requests.create_request(test_db, data, test_employee.id)
response = client.get("/api/requests/statistics", headers=admin_auth_header)
assert response.status_code == 200
data = response.json()
assert "total" in data
assert "by_status" in data
assert data["total"] == 2
assert data["by_status"][RequestStatus.NEW.value] == 2
assert data["by_status"][RequestStatus.IN_PROGRESS.value] == 0
assert data["by_status"][RequestStatus.COMPLETED.value] == 0
assert data["by_status"][RequestStatus.REJECTED.value] == 0
def test_create_request_unauthorized(test_db: Session):
"""Test creating request without authorization"""
request_data = {
"department": "IT",
"request_type": "hardware",
"description": "This is a test request",
"priority": RequestPriority.MEDIUM.value
}
response = client.post("/api/requests/", json=request_data)
assert response.status_code == 401
def test_get_requests_unauthorized(test_db: Session):
"""Test getting requests without authorization"""
response = client.get("/api/requests/my")
assert response.status_code == 401