feat: add ticket list visual support api
This commit is contained in:
@@ -1,3 +1,5 @@
|
||||
from django.contrib.auth import get_user_model
|
||||
|
||||
from apps.tickets.models import Ticket, TicketEvent
|
||||
|
||||
|
||||
@@ -31,8 +33,63 @@ def test_list_tickets_filters_by_status(admin_client, db):
|
||||
|
||||
assert response.status_code == 200
|
||||
payload = response.json()
|
||||
assert len(payload) == 1
|
||||
assert payload[0]["ticket_no"] == "TK202606300001"
|
||||
assert payload["total"] == 1
|
||||
assert payload["items"][0]["ticket_no"] == "TK202606300001"
|
||||
|
||||
|
||||
def test_list_tickets_returns_paginated_response_with_display_users(admin_client, db):
|
||||
user_model = get_user_model()
|
||||
requester = user_model.objects.create_user(username="requester", first_name="请求人")
|
||||
assignee = user_model.objects.create_user(username="assignee", first_name="处理人")
|
||||
Ticket.objects.create(
|
||||
ticket_no="TK202607010100",
|
||||
title="Payment failed",
|
||||
description="A",
|
||||
requester=requester,
|
||||
assignee=assignee,
|
||||
related_system="CRM",
|
||||
)
|
||||
|
||||
response = admin_client.get("/api/tickets?page=1&page_size=20")
|
||||
|
||||
assert response.status_code == 200
|
||||
payload = response.json()
|
||||
assert payload["page"] == 1
|
||||
assert payload["page_size"] == 20
|
||||
assert payload["total"] == 1
|
||||
assert payload["total_pages"] == 1
|
||||
assert payload["items"][0]["requester"]["display_name"] == "请求人"
|
||||
assert payload["items"][0]["assignee"]["display_name"] == "处理人"
|
||||
|
||||
|
||||
def test_list_tickets_filters_by_priority_related_system_and_view(admin_client, db):
|
||||
user_model = get_user_model()
|
||||
current_user = user_model.objects.get(username="admin")
|
||||
Ticket.objects.create(
|
||||
ticket_no="TK202607010101",
|
||||
title="Mine urgent CRM",
|
||||
description="A",
|
||||
priority="urgent",
|
||||
related_system="CRM",
|
||||
assignee=current_user,
|
||||
created_by=current_user,
|
||||
)
|
||||
Ticket.objects.create(
|
||||
ticket_no="TK202607010102",
|
||||
title="Other medium ERP",
|
||||
description="B",
|
||||
priority="medium",
|
||||
related_system="ERP",
|
||||
)
|
||||
|
||||
response = admin_client.get(
|
||||
"/api/tickets?priority=urgent&related_system=CRM&view=assigned_to_me"
|
||||
)
|
||||
|
||||
assert response.status_code == 200
|
||||
payload = response.json()
|
||||
assert payload["total"] == 1
|
||||
assert payload["items"][0]["ticket_no"] == "TK202607010101"
|
||||
|
||||
|
||||
def test_transition_ticket_status_creates_event(admin_client, db):
|
||||
@@ -53,3 +110,20 @@ def test_transition_ticket_status_creates_event(admin_client, db):
|
||||
ticket.refresh_from_db()
|
||||
assert ticket.status == "in_progress"
|
||||
assert ticket.events.filter(event_type="status_change").exists()
|
||||
|
||||
|
||||
def test_transition_ticket_requires_non_empty_remark(admin_client, db):
|
||||
ticket = Ticket.objects.create(
|
||||
ticket_no="TK202607010103",
|
||||
title="A",
|
||||
description="A",
|
||||
status="pending",
|
||||
)
|
||||
|
||||
response = admin_client.post(
|
||||
f"/api/tickets/{ticket.id}/status",
|
||||
data={"status": "in_progress", "remark": ""},
|
||||
content_type="application/json",
|
||||
)
|
||||
|
||||
assert response.status_code == 400
|
||||
|
||||
Reference in New Issue
Block a user