test_ticket_listing.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import pytest
  2. from test_after_sales import scenario # noqa: F401
  3. pytestmark = pytest.mark.integration
  4. async def test_ticket_listing_restores_persisted_records_and_filters_scope(scenario): # noqa: F811
  5. call = scenario["call"]
  6. created = []
  7. for reason in ("首次检查按键", "再次检查按键"):
  8. response = await call(
  9. "POST", "/openapi/v1/after-sales/proposals",
  10. payload={**scenario["proposal"], "reason": reason},
  11. )
  12. assert response.status_code == 201, response.text
  13. created.append(response.json())
  14. path = f"/openapi/v1/tickets?store_id={scenario['store']}"
  15. response = await call("GET", path + "&limit=1")
  16. assert response.status_code == 200, response.text
  17. first = response.json()
  18. assert first["items"][0]["ticket_id"] == created[1]["ticket_id"]
  19. assert first["items"][0]["created_at"]
  20. next_page = await call("GET", path + f"&limit=1&cursor={first['next_cursor']}")
  21. assert next_page.status_code == 200
  22. assert next_page.json()["items"][0]["ticket_id"] == created[0]["ticket_id"]
  23. assert next_page.json()["next_cursor"] is None
  24. other = await call("GET", path, "other")
  25. assert other.status_code == 200 and other.json()["items"] == []
  26. forbidden = await call("GET", path + f"&subject_id={scenario['accounts']['other']}")
  27. assert forbidden.status_code == 403
  28. foreign = await call("GET", path, "foreign")
  29. assert foreign.status_code == 404
  30. staff = await call("GET", path + f"&subject_id={scenario['accounts']['customer']}", "agent")
  31. assert staff.status_code == 200 and len(staff.json()["items"]) == 2
  32. filtered = await call("GET", path + "&status=COMPLETED")
  33. assert filtered.status_code == 200 and filtered.json()["items"] == []
  34. async def test_ticket_listing_returns_current_approval_reason(scenario): # noqa: F811
  35. call = scenario["call"]
  36. created = await call("POST", "/openapi/v1/after-sales/proposals", payload=scenario["proposal"])
  37. ticket = created.json()
  38. confirmed = await call(
  39. "POST", f"/openapi/v1/after-sales/proposals/{ticket['ticket_id']}/confirm",
  40. payload={"proposal_version": 1, "expected_ticket_version": 1},
  41. )
  42. assert confirmed.status_code == 200, confirmed.text
  43. approval = confirmed.json()
  44. decided = await call(
  45. "POST", f"/openapi/v1/approvals/{approval['approval_id']}/decisions", "reviewer",
  46. {"expected_version": approval["version"], "proposal_version": 1,
  47. "decision": "REJECTED", "reason": "请补充故障发生条件"},
  48. )
  49. assert decided.status_code == 200, decided.text
  50. response = await call(
  51. "GET", f"/openapi/v1/tickets?store_id={scenario['store']}&order_id={scenario['order_id']}"
  52. )
  53. row = response.json()["items"][0]
  54. assert row["status"] == "REJECTED"
  55. assert row["approval_status"] == "REJECTED"
  56. assert row["decision_reason"] == "请补充故障发生条件"