56 lines
1.7 KiB
Python
56 lines
1.7 KiB
Python
# backend/tests/test_psa_tickets.py
|
|
"""Routing and auth tests for new ticket management endpoints."""
|
|
import pytest
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_create_ticket_requires_auth(client):
|
|
"""POST /tickets returns 401 without auth."""
|
|
response = await client.post(
|
|
"/api/v1/integrations/psa/tickets",
|
|
json={
|
|
"summary": "Test", "company_id": 1, "board_id": 1,
|
|
"status_id": 1, "priority_id": 1
|
|
},
|
|
)
|
|
assert response.status_code == 401
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_list_resources_requires_auth(client):
|
|
response = await client.get("/api/v1/integrations/psa/tickets/1/resources")
|
|
assert response.status_code == 401
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_search_tickets_returns_paginated_shape(client, auth_headers):
|
|
"""search endpoint returns TicketListResponse shape when no PSA connected."""
|
|
response = await client.get(
|
|
"/api/v1/integrations/psa/tickets/search",
|
|
headers=auth_headers,
|
|
)
|
|
# No PSA connection → 400 or 502; with PSA → 200
|
|
assert response.status_code in (200, 400, 502)
|
|
if response.status_code == 200:
|
|
data = response.json()
|
|
assert "items" in data
|
|
assert "total" in data
|
|
assert "page" in data
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_update_status_requires_auth(client):
|
|
response = await client.patch(
|
|
"/api/v1/integrations/psa/tickets/1/status?status_id=5"
|
|
)
|
|
assert response.status_code == 401
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_ai_parse_requires_auth(client):
|
|
response = await client.post(
|
|
"/api/v1/integrations/psa/tickets/ai-parse",
|
|
json={"prompt": "New ticket for Acme"},
|
|
)
|
|
assert response.status_code == 401
|