diff --git a/scripts/get_pr_status.py b/scripts/get_pr_status.py index 5c131d7..444ab3c 100644 --- a/scripts/get_pr_status.py +++ b/scripts/get_pr_status.py @@ -16,7 +16,12 @@ def get_pr_status(pr_id: str = "") -> None: """Fetches and prints the status of a PR using gh CLI.""" cmd = ["gh", "pr", "view"] if pr_id: - cmd.append(pr_id) + pr_str = str(pr_id).strip() + if pr_str: + if not pr_str.isdigit(): + print("Error: Invalid PR ID format. Must be numeric.", file=sys.stderr) + sys.exit(1) + cmd.append(pr_str) cmd.extend(["--json", "state,reviewDecision,statusCheckRollup"]) try: diff --git a/tests/test_get_pr_status.py b/tests/test_get_pr_status.py index f5fcbf5..2ceb087 100644 --- a/tests/test_get_pr_status.py +++ b/tests/test_get_pr_status.py @@ -99,3 +99,25 @@ def test_get_pr_status_null_checks(mock_run_cmd, capsys): assert "PR Status: OPEN" in captured.out assert "Review Decision: REVIEW_REQUIRED" in captured.out assert "Checks: 0/0 passed" in captured.out + +def test_get_pr_status_invalid_pr_id(capsys): + with pytest.raises(SystemExit) as e: + get_pr_status("invalid_id") + assert e.value.code == 1 + captured = capsys.readouterr() + assert "Error: Invalid PR ID format. Must be numeric." in captured.err + +@patch("scripts.get_pr_status.run_cmd") +def test_get_pr_status_numeric_int_and_padded_string(mock_run_cmd, capsys): + mock_data = { + "state": "OPEN", + "reviewDecision": "APPROVED", + "statusCheckRollup": [] + } + mock_run_cmd.return_value = json.dumps(mock_data) + + get_pr_status(123) + mock_run_cmd.assert_called_with(["gh", "pr", "view", "123", "--json", "state,reviewDecision,statusCheckRollup"]) + + get_pr_status(" 456 ") + mock_run_cmd.assert_called_with(["gh", "pr", "view", "456", "--json", "state,reviewDecision,statusCheckRollup"])