Some checks failed
Mark stable commit / test-unit (push) Has been cancelled
Mark stable commit / test-integration (push) Has been cancelled
Mark stable commit / test-container (push) Has been cancelled
Mark stable commit / test-e2e (push) Has been cancelled
Mark stable commit / test-virgin-user (push) Has been cancelled
Mark stable commit / test-virgin-root (push) Has been cancelled
Mark stable commit / mark-stable (push) Has been cancelled
The old test tests/unit/pkgmgr/actions/test_branch.py has been removed because: - it targeted the previous monolithic pkgmgr.actions.branch module structure - its patch targets no longer match the refactored code - its responsibilities are now fully covered by the new, dedicated unit, integration, and E2E tests for branch actions and CLI wiring This avoids redundant coverage and prevents misleading or broken tests after the branch refactor. https://chatgpt.com/share/693bcc8d-b84c-800f-8510-8d6c66faf627
249 lines
8.8 KiB
Python
249 lines
8.8 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
|
|
"""
|
|
Integration tests for the `pkgmgr branch` CLI wiring.
|
|
|
|
These tests verify that:
|
|
- The argument parser creates the correct structure for
|
|
`branch open`, `branch close` and `branch drop`.
|
|
- `handle_branch` calls the corresponding helper functions
|
|
with the expected arguments (including base branch, cwd and force).
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from pkgmgr.cli.parser import create_parser
|
|
from pkgmgr.cli.commands.branch import handle_branch
|
|
|
|
|
|
class TestBranchCLI(unittest.TestCase):
|
|
"""
|
|
Tests for the branch subcommands implemented in the CLI.
|
|
"""
|
|
|
|
def _create_parser(self):
|
|
"""
|
|
Create the top-level parser with a minimal description.
|
|
"""
|
|
return create_parser("pkgmgr test parser")
|
|
|
|
# --------------------------------------------------------------------- #
|
|
# branch open
|
|
# --------------------------------------------------------------------- #
|
|
|
|
@patch("pkgmgr.cli.commands.branch.open_branch")
|
|
def test_branch_open_with_name_and_base(self, mock_open_branch):
|
|
"""
|
|
Ensure that `pkgmgr branch open <name> --base <branch>` calls
|
|
open_branch() with the correct parameters.
|
|
"""
|
|
parser = self._create_parser()
|
|
args = parser.parse_args(
|
|
["branch", "open", "feature/test-branch", "--base", "develop"]
|
|
)
|
|
|
|
# Sanity check: parser wiring
|
|
self.assertEqual(args.command, "branch")
|
|
self.assertEqual(args.subcommand, "open")
|
|
self.assertEqual(args.name, "feature/test-branch")
|
|
self.assertEqual(args.base, "develop")
|
|
|
|
# ctx is currently unused by handle_branch, so we can pass None
|
|
handle_branch(args, ctx=None)
|
|
|
|
mock_open_branch.assert_called_once()
|
|
_args, kwargs = mock_open_branch.call_args
|
|
|
|
self.assertEqual(kwargs.get("name"), "feature/test-branch")
|
|
self.assertEqual(kwargs.get("base_branch"), "develop")
|
|
self.assertEqual(kwargs.get("cwd"), ".")
|
|
|
|
@patch("pkgmgr.cli.commands.branch.open_branch")
|
|
def test_branch_open_with_name_and_default_base(self, mock_open_branch):
|
|
"""
|
|
Ensure that `pkgmgr branch open <name>` without --base uses
|
|
the default base branch 'main'.
|
|
"""
|
|
parser = self._create_parser()
|
|
args = parser.parse_args(["branch", "open", "feature/default-base"])
|
|
|
|
self.assertEqual(args.command, "branch")
|
|
self.assertEqual(args.subcommand, "open")
|
|
self.assertEqual(args.name, "feature/default-base")
|
|
self.assertEqual(args.base, "main")
|
|
|
|
handle_branch(args, ctx=None)
|
|
|
|
mock_open_branch.assert_called_once()
|
|
_args, kwargs = mock_open_branch.call_args
|
|
|
|
self.assertEqual(kwargs.get("name"), "feature/default-base")
|
|
self.assertEqual(kwargs.get("base_branch"), "main")
|
|
self.assertEqual(kwargs.get("cwd"), ".")
|
|
|
|
# --------------------------------------------------------------------- #
|
|
# branch close
|
|
# --------------------------------------------------------------------- #
|
|
|
|
@patch("pkgmgr.cli.commands.branch.close_branch")
|
|
def test_branch_close_with_name_and_base(self, mock_close_branch):
|
|
"""
|
|
Ensure that `pkgmgr branch close <name> --base <branch>` calls
|
|
close_branch() with the correct parameters and force=False by default.
|
|
"""
|
|
parser = self._create_parser()
|
|
args = parser.parse_args(
|
|
["branch", "close", "feature/old-branch", "--base", "main"]
|
|
)
|
|
|
|
# Sanity check: parser wiring
|
|
self.assertEqual(args.command, "branch")
|
|
self.assertEqual(args.subcommand, "close")
|
|
self.assertEqual(args.name, "feature/old-branch")
|
|
self.assertEqual(args.base, "main")
|
|
self.assertFalse(args.force)
|
|
|
|
handle_branch(args, ctx=None)
|
|
|
|
mock_close_branch.assert_called_once()
|
|
_args, kwargs = mock_close_branch.call_args
|
|
|
|
self.assertEqual(kwargs.get("name"), "feature/old-branch")
|
|
self.assertEqual(kwargs.get("base_branch"), "main")
|
|
self.assertEqual(kwargs.get("cwd"), ".")
|
|
self.assertFalse(kwargs.get("force"))
|
|
|
|
@patch("pkgmgr.cli.commands.branch.close_branch")
|
|
def test_branch_close_without_name_uses_none(self, mock_close_branch):
|
|
"""
|
|
Ensure that `pkgmgr branch close` without a name passes name=None
|
|
into close_branch(), leaving branch resolution to the helper.
|
|
"""
|
|
parser = self._create_parser()
|
|
args = parser.parse_args(["branch", "close"])
|
|
|
|
# Parser wiring: no name → None
|
|
self.assertEqual(args.command, "branch")
|
|
self.assertEqual(args.subcommand, "close")
|
|
self.assertIsNone(args.name)
|
|
self.assertEqual(args.base, "main")
|
|
self.assertFalse(args.force)
|
|
|
|
handle_branch(args, ctx=None)
|
|
|
|
mock_close_branch.assert_called_once()
|
|
_args, kwargs = mock_close_branch.call_args
|
|
|
|
self.assertIsNone(kwargs.get("name"))
|
|
self.assertEqual(kwargs.get("base_branch"), "main")
|
|
self.assertEqual(kwargs.get("cwd"), ".")
|
|
self.assertFalse(kwargs.get("force"))
|
|
|
|
@patch("pkgmgr.cli.commands.branch.close_branch")
|
|
def test_branch_close_with_force(self, mock_close_branch):
|
|
"""
|
|
Ensure that `pkgmgr branch close <name> --force` passes force=True.
|
|
"""
|
|
parser = self._create_parser()
|
|
args = parser.parse_args(
|
|
["branch", "close", "feature/old-branch", "--base", "main", "--force"]
|
|
)
|
|
|
|
self.assertTrue(args.force)
|
|
|
|
handle_branch(args, ctx=None)
|
|
|
|
mock_close_branch.assert_called_once()
|
|
_args, kwargs = mock_close_branch.call_args
|
|
|
|
self.assertEqual(kwargs.get("name"), "feature/old-branch")
|
|
self.assertEqual(kwargs.get("base_branch"), "main")
|
|
self.assertEqual(kwargs.get("cwd"), ".")
|
|
self.assertTrue(kwargs.get("force"))
|
|
|
|
# --------------------------------------------------------------------- #
|
|
# branch drop
|
|
# --------------------------------------------------------------------- #
|
|
|
|
@patch("pkgmgr.cli.commands.branch.drop_branch")
|
|
def test_branch_drop_with_name_and_base(self, mock_drop_branch):
|
|
"""
|
|
Ensure that `pkgmgr branch drop <name> --base <branch>` calls
|
|
drop_branch() with the correct parameters and force=False by default.
|
|
"""
|
|
parser = self._create_parser()
|
|
args = parser.parse_args(
|
|
["branch", "drop", "feature/tmp-branch", "--base", "develop"]
|
|
)
|
|
|
|
self.assertEqual(args.command, "branch")
|
|
self.assertEqual(args.subcommand, "drop")
|
|
self.assertEqual(args.name, "feature/tmp-branch")
|
|
self.assertEqual(args.base, "develop")
|
|
self.assertFalse(args.force)
|
|
|
|
handle_branch(args, ctx=None)
|
|
|
|
mock_drop_branch.assert_called_once()
|
|
_args, kwargs = mock_drop_branch.call_args
|
|
|
|
self.assertEqual(kwargs.get("name"), "feature/tmp-branch")
|
|
self.assertEqual(kwargs.get("base_branch"), "develop")
|
|
self.assertEqual(kwargs.get("cwd"), ".")
|
|
self.assertFalse(kwargs.get("force"))
|
|
|
|
@patch("pkgmgr.cli.commands.branch.drop_branch")
|
|
def test_branch_drop_without_name(self, mock_drop_branch):
|
|
"""
|
|
Ensure that `pkgmgr branch drop` without a name passes name=None
|
|
into drop_branch(), leaving branch resolution to the helper.
|
|
"""
|
|
parser = self._create_parser()
|
|
args = parser.parse_args(["branch", "drop"])
|
|
|
|
self.assertEqual(args.command, "branch")
|
|
self.assertEqual(args.subcommand, "drop")
|
|
self.assertIsNone(args.name)
|
|
self.assertEqual(args.base, "main")
|
|
self.assertFalse(args.force)
|
|
|
|
handle_branch(args, ctx=None)
|
|
|
|
mock_drop_branch.assert_called_once()
|
|
_args, kwargs = mock_drop_branch.call_args
|
|
|
|
self.assertIsNone(kwargs.get("name"))
|
|
self.assertEqual(kwargs.get("base_branch"), "main")
|
|
self.assertEqual(kwargs.get("cwd"), ".")
|
|
self.assertFalse(kwargs.get("force"))
|
|
|
|
@patch("pkgmgr.cli.commands.branch.drop_branch")
|
|
def test_branch_drop_with_force(self, mock_drop_branch):
|
|
"""
|
|
Ensure that `pkgmgr branch drop <name> --force` passes force=True.
|
|
"""
|
|
parser = self._create_parser()
|
|
args = parser.parse_args(
|
|
["branch", "drop", "feature/tmp-branch", "--force"]
|
|
)
|
|
|
|
self.assertTrue(args.force)
|
|
|
|
handle_branch(args, ctx=None)
|
|
|
|
mock_drop_branch.assert_called_once()
|
|
_args, kwargs = mock_drop_branch.call_args
|
|
|
|
self.assertEqual(kwargs.get("name"), "feature/tmp-branch")
|
|
self.assertEqual(kwargs.get("base_branch"), "main")
|
|
self.assertEqual(kwargs.get("cwd"), ".")
|
|
self.assertTrue(kwargs.get("force"))
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|