A rate-limited HubSpot write is retried before succeeding 🟥

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Daniel Roth 2026-07-06 15:59:27 +00:00
parent 049475ec96
commit 7e5dc1722e

View file

@ -292,3 +292,26 @@ def test_run_raises_a_write_back_error_scrubbed_of_the_hubspot_response_body(
assert "VALIDATION_ERROR" in str(exc_info.value)
assert "corr-abc-123" in str(exc_info.value)
assert "Invalid value" not in rendered_traceback
def test_run_retries_a_rate_limited_hubspot_write_before_succeeding(
orchestrator: AbriLogJobOrchestrator,
mock_session: MagicMock,
sdk_client: MagicMock,
deal_database: FakeDealDatabase,
) -> None:
# Arrange
mock_session.post.return_value.content = _load_fixture(
"abri_relay_logjob_success_response.xml"
)
rate_limited = DealsApiException(status=429, reason="Too Many Requests")
rate_limited.headers = {"x-hubspot-ratelimit-interval-milliseconds": "0"}
sdk_client.crm.deals.basic_api.update.side_effect = [rate_limited, MagicMock()]
# Act
result = orchestrator.run(BOOKING)
# Assert
assert result == LogJobSummary(deal_id=DEAL_ID, job_no="AD0226519")
assert sdk_client.crm.deals.basic_api.update.call_count == 2
assert deal_database.recorded_job_nos == [(DEAL_ID, "AD0226519")]