From 7d73007181c0f74b5176b28f42aa4617b58c0ac5 Mon Sep 17 00:00:00 2001 From: Kevin Veen-Birkenbach Date: Tue, 9 Dec 2025 01:21:31 +0100 Subject: [PATCH] Release version 0.5.1 --- CHANGELOG.md | 5 + PKGBUILD | 2 +- debian/changelog | 6 + flake.nix | 2 +- package-manager.spec | 2 +- pyproject.toml | 2 +- .../e2e/test_integration_release_commands.py | 112 ++++++++++++++---- 7 files changed, 102 insertions(+), 29 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8aae99c..5144ebd 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,8 @@ +## [0.5.1] - 2025-12-09 + +* Refine pkgmgr release CLI close wiring and integration tests for --close flag (ChatGPT: https://chatgpt.com/share/69376b4e-8440-800f-9d06-535ec1d7a40e) + + ## [0.5.0] - 2025-12-09 * Add pkgmgr branch close subcommand, extend CLI parser wiring, and add unit tests for branch handling and version version-selection logic (see ChatGPT conversation: https://chatgpt.com/share/693762a3-9ea8-800f-a640-bc78170953d1) diff --git a/PKGBUILD b/PKGBUILD index c8e1b82..19dabba 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -1,7 +1,7 @@ # Maintainer: Kevin Veen-Birkenbach pkgname=package-manager -pkgver=0.5.0 +pkgver=0.5.1 pkgrel=1 pkgdesc="Local-flake wrapper for Kevin's package-manager (Nix-based)." arch=('any') diff --git a/debian/changelog b/debian/changelog index ca2a5c7..a70355b 100644 --- a/debian/changelog +++ b/debian/changelog @@ -1,3 +1,9 @@ +package-manager (0.5.1-1) unstable; urgency=medium + + * Refine pkgmgr release CLI close wiring and integration tests for --close flag (ChatGPT: https://chatgpt.com/share/69376b4e-8440-800f-9d06-535ec1d7a40e) + + -- Kevin Veen-Birkenbach Tue, 09 Dec 2025 01:21:31 +0100 + package-manager (0.5.0-1) unstable; urgency=medium * Add pkgmgr branch close subcommand, extend CLI parser wiring, and add unit tests for branch handling and version version-selection logic (see ChatGPT conversation: https://chatgpt.com/share/693762a3-9ea8-800f-a640-bc78170953d1) diff --git a/flake.nix b/flake.nix index 1602e1e..868f756 100644 --- a/flake.nix +++ b/flake.nix @@ -31,7 +31,7 @@ rec { pkgmgr = pyPkgs.buildPythonApplication { pname = "package-manager"; - version = "0.5.0"; + version = "0.5.1"; # Use the git repo as source src = ./.; diff --git a/package-manager.spec b/package-manager.spec index f505d76..0532bc1 100644 --- a/package-manager.spec +++ b/package-manager.spec @@ -1,5 +1,5 @@ Name: package-manager -Version: 0.5.0 +Version: 0.5.1 Release: 1%{?dist} Summary: Wrapper that runs Kevin's package-manager via Nix flake diff --git a/pyproject.toml b/pyproject.toml index 66b3b7c..3a3a52a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -7,7 +7,7 @@ build-backend = "setuptools.build_meta" [project] name = "package-manager" -version = "0.5.0" +version = "0.5.1" description = "Kevin's package-manager tool (pkgmgr)" readme = "README.md" requires-python = ">=3.11" diff --git a/tests/e2e/test_integration_release_commands.py b/tests/e2e/test_integration_release_commands.py index 03f9064..9e91fbd 100644 --- a/tests/e2e/test_integration_release_commands.py +++ b/tests/e2e/test_integration_release_commands.py @@ -4,10 +4,17 @@ """ End-to-end style integration tests for the `pkgmgr release` CLI command. -These tests exercise the top-level `pkgmgr` entry point by invoking -the module as `__main__` and verifying that the underlying -`pkgmgr.release.release()` function is called with the expected -arguments, in particular the new `close` flag. +These tests exercise the real top-level entry point (main.py) and mock +the high-level helper used by the CLI wiring +(pkgmgr.cli_core.commands.release.run_release) to ensure that argument +parsing and dispatch behave as expected, in particular the new `close` +flag. + +The tests simulate real CLI calls like: + + pkgmgr release minor --preview --close + +by manipulating sys.argv and executing main.py as __main__ via runpy. """ from __future__ import annotations @@ -21,55 +28,110 @@ from unittest.mock import patch class TestIntegrationReleaseCommand(unittest.TestCase): """Integration tests for `pkgmgr release` wiring.""" - def _run_pkgmgr(self, argv: list[str]) -> None: + def _run_pkgmgr(self, extra_args: list[str]) -> None: """ - Helper to invoke the `pkgmgr` console script via `run_module`. + Helper to invoke the `pkgmgr` console script via the real + entry point (main.py). This simulates a real CLI call like: - pkgmgr release minor --preview --close + pkgmgr + + by setting sys.argv accordingly and executing main.py as + __main__ using runpy.run_module. """ original_argv = list(sys.argv) try: - sys.argv = argv - # Entry point: the `pkgmgr` module is the console script. - runpy.run_module("pkgmgr", run_name="__main__") + # argv[0] is the program name; the rest are CLI arguments. + sys.argv = ["pkgmgr"] + list(extra_args) + runpy.run_module("main", run_name="__main__") finally: sys.argv = original_argv - @patch("pkgmgr.release.release") - def test_release_without_close_flag(self, mock_release) -> None: + # ------------------------------------------------------------------ + # Behaviour without --close + # ------------------------------------------------------------------ + + @patch("pkgmgr.cli_core.commands.release.run_release") + @patch("pkgmgr.cli_core.dispatch._select_repo_for_current_directory") + def test_release_without_close_flag( + self, + mock_select_repo, + mock_run_release, + ) -> None: """ Calling `pkgmgr release patch --preview` should *not* enable the `close` flag by default. """ - self._run_pkgmgr(["pkgmgr", "release", "patch", "--preview"]) + # Ensure that the dispatch layer always selects a repository, + # independent of any real config in the test environment. + mock_select_repo.return_value = [ + { + "directory": ".", + "provider": "local", + "account": "test", + "repository": "dummy", + } + ] - mock_release.assert_called_once() - _args, kwargs = mock_release.call_args + self._run_pkgmgr(["release", "patch", "--preview"]) + + mock_run_release.assert_called_once() + _args, kwargs = mock_run_release.call_args # CLI wiring self.assertEqual(kwargs.get("release_type"), "patch") - self.assertTrue(kwargs.get("preview"), "preview should be True when --preview is used") + self.assertTrue( + kwargs.get("preview"), + "preview should be True when --preview is used", + ) # Default: no --close → close=False - self.assertFalse(kwargs.get("close"), "close must be False when --close is not given") + self.assertFalse( + kwargs.get("close"), + "close must be False when --close is not given", + ) - @patch("pkgmgr.release.release") - def test_release_with_close_flag(self, mock_release) -> None: + # ------------------------------------------------------------------ + # Behaviour with --close + # ------------------------------------------------------------------ + + @patch("pkgmgr.cli_core.commands.release.run_release") + @patch("pkgmgr.cli_core.dispatch._select_repo_for_current_directory") + def test_release_with_close_flag( + self, + mock_select_repo, + mock_run_release, + ) -> None: """ Calling `pkgmgr release minor --preview --close` should pass - close=True into pkgmgr.release.release(). + close=True into the helper used by the CLI wiring. """ - self._run_pkgmgr(["pkgmgr", "release", "minor", "--preview", "--close"]) + # Again: make sure there is always a selected repository. + mock_select_repo.return_value = [ + { + "directory": ".", + "provider": "local", + "account": "test", + "repository": "dummy", + } + ] - mock_release.assert_called_once() - _args, kwargs = mock_release.call_args + self._run_pkgmgr(["release", "minor", "--preview", "--close"]) + + mock_run_release.assert_called_once() + _args, kwargs = mock_run_release.call_args # CLI wiring self.assertEqual(kwargs.get("release_type"), "minor") - self.assertTrue(kwargs.get("preview"), "preview should be True when --preview is used") + self.assertTrue( + kwargs.get("preview"), + "preview should be True when --preview is used", + ) # With --close → close=True - self.assertTrue(kwargs.get("close"), "close must be True when --close is given") + self.assertTrue( + kwargs.get("close"), + "close must be True when --close is given", + ) if __name__ == "__main__":