| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061 |
- import pytest
- from test_after_sales import scenario # noqa: F401
- pytestmark = pytest.mark.integration
- async def test_ticket_listing_restores_persisted_records_and_filters_scope(scenario): # noqa: F811
- call = scenario["call"]
- created = []
- for reason in ("首次检查按键", "再次检查按键"):
- response = await call(
- "POST", "/openapi/v1/after-sales/proposals",
- payload={**scenario["proposal"], "reason": reason},
- )
- assert response.status_code == 201, response.text
- created.append(response.json())
- path = f"/openapi/v1/tickets?store_id={scenario['store']}"
- response = await call("GET", path + "&limit=1")
- assert response.status_code == 200, response.text
- first = response.json()
- assert first["items"][0]["ticket_id"] == created[1]["ticket_id"]
- assert first["items"][0]["created_at"]
- next_page = await call("GET", path + f"&limit=1&cursor={first['next_cursor']}")
- assert next_page.status_code == 200
- assert next_page.json()["items"][0]["ticket_id"] == created[0]["ticket_id"]
- assert next_page.json()["next_cursor"] is None
- other = await call("GET", path, "other")
- assert other.status_code == 200 and other.json()["items"] == []
- forbidden = await call("GET", path + f"&subject_id={scenario['accounts']['other']}")
- assert forbidden.status_code == 403
- foreign = await call("GET", path, "foreign")
- assert foreign.status_code == 404
- staff = await call("GET", path + f"&subject_id={scenario['accounts']['customer']}", "agent")
- assert staff.status_code == 200 and len(staff.json()["items"]) == 2
- filtered = await call("GET", path + "&status=COMPLETED")
- assert filtered.status_code == 200 and filtered.json()["items"] == []
- async def test_ticket_listing_returns_current_approval_reason(scenario): # noqa: F811
- call = scenario["call"]
- created = await call("POST", "/openapi/v1/after-sales/proposals", payload=scenario["proposal"])
- ticket = created.json()
- confirmed = await call(
- "POST", f"/openapi/v1/after-sales/proposals/{ticket['ticket_id']}/confirm",
- payload={"proposal_version": 1, "expected_ticket_version": 1},
- )
- assert confirmed.status_code == 200, confirmed.text
- approval = confirmed.json()
- decided = await call(
- "POST", f"/openapi/v1/approvals/{approval['approval_id']}/decisions", "reviewer",
- {"expected_version": approval["version"], "proposal_version": 1,
- "decision": "REJECTED", "reason": "请补充故障发生条件"},
- )
- assert decided.status_code == 200, decided.text
- response = await call(
- "GET", f"/openapi/v1/tickets?store_id={scenario['store']}&order_id={scenario['order_id']}"
- )
- row = response.json()["items"][0]
- assert row["status"] == "REJECTED"
- assert row["approval_status"] == "REJECTED"
- assert row["decision_reason"] == "请补充故障发生条件"
|