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
+36 -8
View File
@@ -121,7 +121,8 @@ class TestWaitForCompletion:
class TestCli:
def test_no_token_raises(self, monkeypatch: pytest.MonkeyPatch) -> None:
@patch("devx.tools.pr_status.subprocess.run")
def test_no_token_raises(self, mock_subproc: MagicMock, monkeypatch: pytest.MonkeyPatch) -> None:
for name in ("DEVELOPER_GITEA_API_TOKEN", "CI_GITEA_API_TOKEN", "CI_GITEA_TOKEN"):
monkeypatch.delenv(name, raising=False)
runner = CliRunner()
@@ -133,17 +134,23 @@ class TestCli:
assert result.exit_code != 0
assert "CI_GITEA_TOKEN" in result.output
@patch("devx.tools.pr_status.subprocess.run")
@patch("devx.tools.pr_status.REPO_OWNER", "")
@patch("devx.tools.pr_status.get_repo_name", side_effect=Exception("should not reach"))
def test_no_owner_raises(self, mock_repo_name: MagicMock, monkeypatch: pytest.MonkeyPatch) -> None:
def test_no_owner_raises(
self, mock_repo_name: MagicMock, mock_subproc: MagicMock, monkeypatch: pytest.MonkeyPatch
) -> None:
monkeypatch.setenv("CI_GITEA_TOKEN", "tok")
runner = CliRunner()
result = runner.invoke(cli, ["--pr", "42"])
assert result.exit_code != 0
assert "owner" in result.output.lower()
@patch("devx.tools.pr_status.subprocess.run")
@patch("devx.tools.pr_status.GiteaClient")
def test_check_pr_status(self, mock_client_cls: MagicMock, monkeypatch: pytest.MonkeyPatch) -> None:
def test_check_pr_status(
self, mock_client_cls: MagicMock, mock_subproc: MagicMock, monkeypatch: pytest.MonkeyPatch
) -> None:
monkeypatch.setenv("CI_GITEA_TOKEN", "tok")
monkeypatch.setenv("DEVX_REPO_OWNER", "owner")
monkeypatch.setenv("DEVX_REPO_NAME", "repo")
@@ -157,8 +164,11 @@ class TestCli:
assert result.exit_code == 0
assert "[OK]" in result.output
@patch("devx.tools.pr_status.subprocess.run")
@patch("devx.tools.pr_status.GiteaClient")
def test_check_sha_directly(self, mock_client_cls: MagicMock, monkeypatch: pytest.MonkeyPatch) -> None:
def test_check_sha_directly(
self, mock_client_cls: MagicMock, mock_subproc: MagicMock, monkeypatch: pytest.MonkeyPatch
) -> None:
monkeypatch.setenv("CI_GITEA_TOKEN", "tok")
monkeypatch.setenv("DEVX_REPO_OWNER", "owner")
monkeypatch.setenv("DEVX_REPO_NAME", "repo")
@@ -171,8 +181,11 @@ class TestCli:
assert result.exit_code == 0
assert "[OK]" in result.output
@patch("devx.tools.pr_status.subprocess.run")
@patch("devx.tools.pr_status.GiteaClient")
def test_failure_raises_exception(self, mock_client_cls: MagicMock, monkeypatch: pytest.MonkeyPatch) -> None:
def test_failure_raises_exception(
self, mock_client_cls: MagicMock, mock_subproc: MagicMock, monkeypatch: pytest.MonkeyPatch
) -> None:
monkeypatch.setenv("CI_GITEA_TOKEN", "tok")
monkeypatch.setenv("DEVX_REPO_OWNER", "owner")
monkeypatch.setenv("DEVX_REPO_NAME", "repo")
@@ -234,8 +247,11 @@ class TestCli:
assert result.exit_code != 0
assert "Could not detect" in result.output
@patch("devx.tools.pr_status.subprocess.run")
@patch("devx.tools.pr_status.GiteaClient")
def test_no_sha_raises(self, mock_client_cls: MagicMock, monkeypatch: pytest.MonkeyPatch) -> None:
def test_no_sha_raises(
self, mock_client_cls: MagicMock, mock_subproc: MagicMock, monkeypatch: pytest.MonkeyPatch
) -> None:
monkeypatch.setenv("CI_GITEA_TOKEN", "tok")
monkeypatch.setenv("DEVX_REPO_OWNER", "owner")
monkeypatch.setenv("DEVX_REPO_NAME", "repo")
@@ -246,11 +262,17 @@ class TestCli:
assert result.exit_code != 0
assert "SHA" in result.output
@patch("devx.tools.pr_status._get_current_branch_pr")
@patch("devx.tools.pr_status.time.sleep")
@patch("devx.tools.pr_status.time.time", side_effect=[0, 0, 100, 200])
@patch("devx.tools.pr_status.GiteaClient")
def test_wait_success(
self, mock_client_cls: MagicMock, mock_time: MagicMock, mock_sleep: MagicMock, monkeypatch: pytest.MonkeyPatch
self,
mock_client_cls: MagicMock,
mock_time: MagicMock,
mock_sleep: MagicMock,
mock_branch_pr: MagicMock,
monkeypatch: pytest.MonkeyPatch,
) -> None:
monkeypatch.setenv("CI_GITEA_TOKEN", "tok")
monkeypatch.setenv("DEVX_REPO_OWNER", "owner")
@@ -266,11 +288,17 @@ class TestCli:
assert result.exit_code == 0
assert "[OK]" in result.output
@patch("devx.tools.pr_status._get_current_branch_pr")
@patch("devx.tools.pr_status.time.sleep")
@patch("devx.tools.pr_status.time.time", side_effect=[0, 700])
@patch("devx.tools.pr_status.GiteaClient")
def test_wait_timeout(
self, mock_client_cls: MagicMock, mock_time: MagicMock, mock_sleep: MagicMock, monkeypatch: pytest.MonkeyPatch
self,
mock_client_cls: MagicMock,
mock_time: MagicMock,
mock_sleep: MagicMock,
mock_branch_pr: MagicMock,
monkeypatch: pytest.MonkeyPatch,
) -> None:
monkeypatch.setenv("CI_GITEA_TOKEN", "tok")
monkeypatch.setenv("DEVX_REPO_OWNER", "owner")