DEVX-136: feat: add fix_pr_title module and update_pr API method
Post-merge / detect-and-configure (push) Successful in 12s
Post-merge / release-and-maintain (push) Successful in 1m0s

This commit was merged in pull request #203.
This commit is contained in:
2026-07-13 23:55:11 +00:00
parent 68f0872134
commit ddfbdec956
32 changed files with 2761 additions and 322 deletions
+14 -5
View File
@@ -278,9 +278,10 @@ class TestRebaseTool:
class TestPrRebaseTool:
"""Tests for the server-side PR rebase tool (devx.tools.pr_rebase)."""
@patch("devx.tools._shared.detect_pr_number")
@patch.dict("os.environ", _FULL_ENV, clear=True)
@patch("devx.tools.pr_rebase.GiteaClient")
def test_pr_rebase_success(self, mock_client_cls: MagicMock) -> None:
def test_pr_rebase_success(self, mock_client_cls: MagicMock, mock_detect: MagicMock) -> None:
"""Successful API rebase prints confirmation."""
mock_client = MagicMock()
mock_client_cls.return_value = mock_client
@@ -291,9 +292,10 @@ class TestPrRebaseTool:
assert "rebased successfully" in result.output.lower()
mock_client.update_pr_branch.assert_called_once_with(42, style="rebase")
@patch("devx.tools._shared.detect_pr_number")
@patch.dict("os.environ", _FULL_ENV, clear=True)
@patch("devx.tools.pr_rebase.GiteaClient")
def test_pr_rebase_api_error(self, mock_client_cls: MagicMock) -> None:
def test_pr_rebase_api_error(self, mock_client_cls: MagicMock, mock_detect: MagicMock) -> None:
"""API error during rebase exits with error."""
from devx.api_clients import APIError
@@ -306,9 +308,10 @@ class TestPrRebaseTool:
assert result.exit_code != 0
assert "rebase failed" in result.output.lower()
@patch("devx.tools._shared.detect_pr_number")
@patch("devx.tools.pr_rebase.load_dotenv")
@patch.dict("os.environ", {}, clear=True)
def test_pr_rebase_no_token(self, _mock_load: MagicMock) -> None:
def test_pr_rebase_no_token(self, _mock_load: MagicMock, mock_detect: MagicMock) -> None:
"""Missing CI_GITEA_TOKEN should fail."""
runner = CliRunner()
result = runner.invoke(pr_rebase_main, ["--pr", "42"])
@@ -324,20 +327,26 @@ class TestPrRebaseTool:
assert result.exit_code != 0
assert "could not detect" in result.output.lower()
@patch("devx.tools._shared.detect_pr_number")
@patch("devx.tools.pr_rebase.load_dotenv")
@patch.dict("os.environ", {"CI_GITEA_TOKEN": "tok"}, clear=True)
@patch("devx.tools.pr_rebase.GiteaClient")
def test_pr_rebase_no_repo_env(self, _mock_client: MagicMock, _mock_load: MagicMock) -> None:
def test_pr_rebase_no_repo_env(
self, _mock_client: MagicMock, _mock_load: MagicMock, mock_detect: MagicMock
) -> None:
"""Missing repo env vars should fail."""
runner = CliRunner()
result = runner.invoke(pr_rebase_main, ["--pr", "42"])
assert result.exit_code != 0
assert "DEVX_REPO_OWNER" in result.output
@patch("devx.tools._shared.detect_pr_number")
@patch("devx.tools.pr_rebase.load_dotenv")
@patch.dict("os.environ", {"CI_GITEA_TOKEN": "tok", "GITHUB_REPOSITORY": "owner/repo"}, clear=True)
@patch("devx.tools.pr_rebase.GiteaClient")
def test_pr_rebase_github_repo_fallback(self, mock_client_cls: MagicMock, _mock_load: MagicMock) -> None:
def test_pr_rebase_github_repo_fallback(
self, mock_client_cls: MagicMock, _mock_load: MagicMock, mock_detect: MagicMock
) -> None:
"""GITHUB_REPOSITORY env var is used as fallback for owner/repo."""
mock_client = MagicMock()
mock_client_cls.return_value = mock_client