diff --git a/static/messages.js b/static/messages.js index 998b1641..06a1caaf 100644 --- a/static/messages.js +++ b/static/messages.js @@ -4172,10 +4172,12 @@ function _startApprovalFallbackPoll(sid) { try { const data = await api("/api/approval/pending?session_id=" + encodeURIComponent(sid),{timeoutToast:false}); if (data.pending) { showApprovalForSession(sid, data.pending, data.pending_count||1); } - else if (!_approvalPollingSessionMissingOrMismatched(sid) && !S.busy) { + else if (!_approvalPollingSessionMissingOrMismatched(sid)) { _clearApprovalPendingForSession(sid); _hideApprovalCardIfOwner(sid); - stopApprovalPollingForSession(sid); + if (!S.busy) { + stopApprovalPollingForSession(sid); + } } } catch(e) { /* ignore poll errors */ } finally { _approvalFallbackPollInFlight = false; } diff --git a/tests/test_issue4041_approval_poll_busy_dip.py b/tests/test_issue4041_approval_poll_busy_dip.py index 5b6353b5..a77ef69e 100644 --- a/tests/test_issue4041_approval_poll_busy_dip.py +++ b/tests/test_issue4041_approval_poll_busy_dip.py @@ -36,11 +36,13 @@ def test_busy_dips_no_longer_force_stop_approval_polling(): assert "!S.busy || !S.session || S.session.session_id !== sid" not in body -def test_empty_pending_only_stops_after_confirmed_idle(): +def test_empty_pending_clears_card_and_only_stops_after_confirmed_idle(): fallback_body = _function_body("_startApprovalFallbackPoll") - assert "else if (!_approvalPollingSessionMissingOrMismatched(sid) && !S.busy)" in fallback_body + assert "else if (!_approvalPollingSessionMissingOrMismatched(sid)) {" in fallback_body assert "_clearApprovalPendingForSession(sid);" in fallback_body assert "_hideApprovalCardIfOwner(sid);" in fallback_body + assert "if (!S.busy) {" in fallback_body assert "stopApprovalPollingForSession(sid);" in fallback_body + assert "else if (!_approvalPollingSessionMissingOrMismatched(sid) && !S.busy)" not in fallback_body assert "stopApprovalPolling(); _hideApprovalCardIfOwner(sid, true); return;" in fallback_body