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"] == "请补充故障发生条件"