feat: 执行并提交 PDD 采集任务 (#32)
This commit is contained in:
@@ -104,7 +104,7 @@ class HttpAdminGatewayTest(unittest.TestCase):
|
||||
},
|
||||
)
|
||||
)
|
||||
gateway = HttpAdminGateway(opener=opener)
|
||||
gateway = HttpAdminGateway(opener=opener, client_id="CLIENT-001")
|
||||
|
||||
gateway.register_client(
|
||||
ClientInfo("CLIENT-001"), self._capabilities(False)
|
||||
@@ -116,6 +116,71 @@ class HttpAdminGatewayTest(unittest.TestCase):
|
||||
key.lower(): value for key, value in opener.request.header_items()
|
||||
})
|
||||
|
||||
def test_submit_result_sends_idempotency_key_and_parses_receipt(self):
|
||||
opener = RecordingOpener(
|
||||
FakeResponse(
|
||||
200,
|
||||
{
|
||||
"accepted": True,
|
||||
"result_id": "RESULT-001",
|
||||
"accepted_at": "2026-08-07T08:00:01Z",
|
||||
},
|
||||
)
|
||||
)
|
||||
gateway = HttpAdminGateway(opener=opener, client_id="CLIENT-001")
|
||||
payload = {
|
||||
"task_version": 1,
|
||||
"attempt_id": "ATTEMPT-001",
|
||||
"result_type": "collect",
|
||||
"completed_at": "2026-08-07T08:00:00Z",
|
||||
"pdd_data": {"goods_id": "123"},
|
||||
}
|
||||
|
||||
receipt = gateway.submit_result(
|
||||
"COL-001", "COL-001:ATTEMPT-001:result-v1", payload
|
||||
)
|
||||
|
||||
self.assertTrue(receipt.accepted)
|
||||
self.assertEqual(
|
||||
opener.request.full_url,
|
||||
"http://127.0.0.1:8080/api/v1/client/tasks/COL-001/result",
|
||||
)
|
||||
headers = {
|
||||
key.lower(): value for key, value in opener.request.header_items()
|
||||
}
|
||||
self.assertEqual(
|
||||
headers["idempotency-key"], "COL-001:ATTEMPT-001:result-v1"
|
||||
)
|
||||
self.assertEqual(headers["x-client-id"], "CLIENT-001")
|
||||
self.assertEqual(json.loads(opener.request.data), payload)
|
||||
|
||||
def test_submit_failure_uses_failure_endpoint(self):
|
||||
opener = RecordingOpener(
|
||||
FakeResponse(
|
||||
201,
|
||||
{
|
||||
"accepted": True,
|
||||
"result_id": "FAILURE-001",
|
||||
"accepted_at": "2026-08-07T08:00:01Z",
|
||||
},
|
||||
)
|
||||
)
|
||||
gateway = HttpAdminGateway(opener=opener, client_id="CLIENT-001")
|
||||
|
||||
gateway.submit_failure(
|
||||
"COL-001",
|
||||
"COL-001:ATTEMPT-001:failure-v1",
|
||||
{
|
||||
"task_version": 1,
|
||||
"attempt_id": "ATTEMPT-001",
|
||||
"status": "manual_review",
|
||||
"error": {"code": "PDD_PAGE_CAPTCHA"},
|
||||
"reported_at": "2026-08-07T08:00:00Z",
|
||||
},
|
||||
)
|
||||
|
||||
self.assertTrue(opener.request.full_url.endswith("/COL-001/failure"))
|
||||
|
||||
def test_claim_maps_real_admin_payload_and_only_reports_collect(self):
|
||||
opener = RecordingOpener(
|
||||
FakeResponse(
|
||||
|
||||
Reference in New Issue
Block a user