diff options
-rw-r--r-- | gitlab/v4/cli.py | 10 | ||||
-rw-r--r-- | tests/functional/cli/conftest.py | 9 | ||||
-rw-r--r-- | tests/functional/cli/test_cli_projects.py | 27 |
3 files changed, 42 insertions, 4 deletions
diff --git a/gitlab/v4/cli.py b/gitlab/v4/cli.py index 504b7a9..ddce8b6 100644 --- a/gitlab/v4/cli.py +++ b/gitlab/v4/cli.py @@ -94,6 +94,7 @@ class GitlabCLI(object): return self.do_custom() def do_custom(self) -> Any: + class_instance: Union[gitlab.base.RESTManager, gitlab.base.RESTObject] in_obj = cli.custom_actions[self.cls_name][self.action][2] # Get the object (lazy), then act @@ -106,11 +107,12 @@ class GitlabCLI(object): if TYPE_CHECKING: assert isinstance(self.cls._id_attr, str) data[self.cls._id_attr] = self.args.pop(self.cls._id_attr) - obj = self.cls(self.mgr, data) - method_name = self.action.replace("-", "_") - return getattr(obj, method_name)(**self.args) + class_instance = self.cls(self.mgr, data) else: - return getattr(self.mgr, self.action)(**self.args) + class_instance = self.mgr + + method_name = self.action.replace("-", "_") + return getattr(class_instance, method_name)(**self.args) def do_project_export_download(self) -> None: try: diff --git a/tests/functional/cli/conftest.py b/tests/functional/cli/conftest.py index 4311339..d846cc7 100644 --- a/tests/functional/cli/conftest.py +++ b/tests/functional/cli/conftest.py @@ -33,3 +33,12 @@ def resp_get_project(): "content_type": "application/json", "status": 200, } + + +@pytest.fixture +def resp_delete_registry_tags_in_bulk(): + return { + "method": responses.DELETE, + "url": f"{DEFAULT_URL}/api/v4/projects/1/registry/repositories/1/tags", + "status": 202, + } diff --git a/tests/functional/cli/test_cli_projects.py b/tests/functional/cli/test_cli_projects.py new file mode 100644 index 0000000..bf7f564 --- /dev/null +++ b/tests/functional/cli/test_cli_projects.py @@ -0,0 +1,27 @@ +import pytest +import responses + + +@pytest.mark.script_launch_mode("inprocess") +@responses.activate +def test_project_registry_delete_in_bulk( + script_runner, resp_delete_registry_tags_in_bulk +): + responses.add(**resp_delete_registry_tags_in_bulk) + cmd = [ + "gitlab", + "project-registry-tag", + "delete-in-bulk", + "--project-id", + "1", + "--repository-id", + "1", + "--name-regex-delete", + "^.*dev.*$", + # TODO: remove `name` after deleting without ID is possible + # See #849 and #1631 + "--name", + ".*", + ] + ret = ret = script_runner.run(*cmd) + assert ret.success |