Files
pkgmgr/tests/unit/pkgmgr/actions/branch/test_drop_branch.py
Kevin Veen-Birkenbach 8294bce436 style: autoformat src and tests
Repository-wide formatting pass over src/ and tests/: sorted imports and
__all__ entries, dropped redundant `# -*- coding: utf-8 -*-` headers,
unquoted forward-reference annotations (safe under
`from __future__ import annotations`), merged nested `with` statements,
moved `Iterable` and friends from `typing` to `collections.abc`, and
removed `# noqa: F401` markers that no longer suppress anything.

No behavioural changes. Unit and integration suites show the same four
pre-existing failures before and after the pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-07-27 15:17:35 +02:00

96 lines
3.6 KiB
Python

import unittest
from unittest.mock import patch
from pkgmgr.actions.branch.drop_branch import drop_branch
from pkgmgr.core.git.commands import GitDeleteRemoteBranchError
from pkgmgr.core.git.errors import GitRunError
class TestDropBranch(unittest.TestCase):
@patch("builtins.input", return_value="y")
@patch(
"pkgmgr.actions.branch.drop_branch.get_current_branch", return_value="feature-x"
)
@patch("pkgmgr.actions.branch.drop_branch.resolve_base_branch", return_value="main")
@patch("pkgmgr.actions.branch.drop_branch.delete_local_branch")
@patch("pkgmgr.actions.branch.drop_branch.delete_remote_branch")
def test_drop_branch_happy_path(
self, delete_remote, delete_local, _resolve, _current, _input_mock
) -> None:
drop_branch(None, cwd=".")
delete_local.assert_called_once_with("feature-x", cwd=".", force=False)
delete_remote.assert_called_once_with("origin", "feature-x", cwd=".")
@patch("pkgmgr.actions.branch.drop_branch.get_current_branch", return_value="main")
@patch("pkgmgr.actions.branch.drop_branch.resolve_base_branch", return_value="main")
def test_refuses_to_drop_base_branch(self, _resolve, _current) -> None:
with self.assertRaises(RuntimeError):
drop_branch(None)
@patch("builtins.input", return_value="n")
@patch(
"pkgmgr.actions.branch.drop_branch.get_current_branch", return_value="feature-x"
)
@patch("pkgmgr.actions.branch.drop_branch.resolve_base_branch", return_value="main")
@patch("pkgmgr.actions.branch.drop_branch.delete_local_branch")
def test_drop_branch_aborts_on_no(
self, delete_local, _resolve, _current, _input_mock
) -> None:
drop_branch(None, cwd=".")
delete_local.assert_not_called()
@patch("builtins.input")
@patch(
"pkgmgr.actions.branch.drop_branch.get_current_branch", return_value="feature-x"
)
@patch("pkgmgr.actions.branch.drop_branch.resolve_base_branch", return_value="main")
@patch("pkgmgr.actions.branch.drop_branch.delete_local_branch")
@patch("pkgmgr.actions.branch.drop_branch.delete_remote_branch")
def test_drop_branch_force_skips_prompt(
self,
delete_remote,
delete_local,
_resolve,
_current,
input_mock,
) -> None:
drop_branch(None, cwd=".", force=True)
input_mock.assert_not_called()
delete_local.assert_called_once_with("feature-x", cwd=".", force=False)
delete_remote.assert_called_once_with("origin", "feature-x", cwd=".")
@patch(
"pkgmgr.actions.branch.drop_branch.get_current_branch",
side_effect=GitRunError("fail"),
)
def test_drop_branch_errors_if_no_branch_detected(self, _current) -> None:
with self.assertRaises(RuntimeError):
drop_branch(None)
@patch("builtins.input", return_value="y")
@patch(
"pkgmgr.actions.branch.drop_branch.get_current_branch", return_value="feature-x"
)
@patch("pkgmgr.actions.branch.drop_branch.resolve_base_branch", return_value="main")
@patch("pkgmgr.actions.branch.drop_branch.delete_local_branch")
@patch(
"pkgmgr.actions.branch.drop_branch.delete_remote_branch",
side_effect=GitDeleteRemoteBranchError("boom", cwd="."),
)
def test_drop_branch_remote_delete_failure_is_wrapped(
self,
_delete_remote,
_delete_local,
_resolve,
_current,
_input_mock,
) -> None:
with self.assertRaises(RuntimeError) as ctx:
drop_branch(None, cwd=".")
self.assertIn("remote deletion failed", str(ctx.exception))
if __name__ == "__main__":
unittest.main()