@@ -358,6 +358,33 @@ def test_main_blocks_high_risk_on_review_infra_error(self) -> None:
358358 backend .assert_called_once ()
359359 self .assertIn ("Merge blocked" , comment .call_args .args [3 ])
360360
361+ def test_main_allows_required_ci_to_gate_when_review_quota_is_unavailable (self ) -> None :
362+ with tempfile .TemporaryDirectory () as tmpdir :
363+ event_path = self ._write_event (tmpdir , ["src/app.py" ])
364+ env = {
365+ "GH_TOKEN" : "token" ,
366+ "GITHUB_REPOSITORY" : "org/repo" ,
367+ "GITHUB_EVENT_PATH" : event_path ,
368+ "GITHUB_EVENT_NAME" : "pull_request" ,
369+ }
370+ with (
371+ patch .dict (os .environ , env , clear = True ),
372+ patch ("scripts.run_codex_pr_review.fetch_pr_files" , return_value = [{"filename" : "src/app.py" }]),
373+ patch ("scripts.run_codex_pr_review.fetch_pr_diff" , return_value = "diff --git a/src/app.py b/src/app.py" ),
374+ patch ("scripts.run_codex_pr_review.load_policy" , return_value = run_codex_pr_review ._default_policy ()),
375+ patch ("scripts.run_codex_pr_review.find_existing_review_comment" , return_value = (None , "" )),
376+ patch (
377+ "scripts.run_codex_pr_review.run_codex_review_with_fallback" ,
378+ side_effect = ReviewError ("Codex service job failed [quota_or_capacity_failure]: usage limits reached" ),
379+ ),
380+ patch ("scripts.run_codex_pr_review.upsert_pr_comment" ) as comment ,
381+ ):
382+ self .assertEqual (run_codex_pr_review .main (), 0 )
383+
384+ comment .assert_called_once ()
385+ self .assertIn ("Review unavailable" , comment .call_args .args [3 ])
386+ self .assertNotIn ("Merge blocked" , comment .call_args .args [3 ])
387+
361388 def test_main_skips_low_risk_docs_before_calling_review_backend (self ) -> None :
362389 with tempfile .TemporaryDirectory () as tmpdir :
363390 event_path = self ._write_event (tmpdir , ["docs/guide.md" , "tests/test_x.py" ])
0 commit comments