diff options
| author | John L. Villalovos <john@sodarock.com> | 2022-10-05 07:43:14 -0700 |
|---|---|---|
| committer | Nejc Habjan <hab.nejc@gmail.com> | 2022-10-06 09:24:02 +0200 |
| commit | 9b88132078ed37417c2a45369b4976c9c67f7882 (patch) | |
| tree | 61f075c8d2685df36153970f2a93937ac9f14c86 | |
| parent | c15bd33f45fbd9d064f1e173c6b3ca1b216def2f (diff) | |
| download | gitlab-9b88132078ed37417c2a45369b4976c9c67f7882.tar.gz | |
fix(cli): handle list response for json/yaml output
Handle the case with the CLI where a list response is returned from
GitLab and json/yaml output is requested.
Add a functional CLI test to validate it works.
Closes: #2287
| -rw-r--r-- | gitlab/v4/cli.py | 8 | ||||
| -rw-r--r-- | tests/functional/cli/test_cli_repository.py | 44 |
2 files changed, 48 insertions, 4 deletions
diff --git a/gitlab/v4/cli.py b/gitlab/v4/cli.py index a4f4e2c..1a6ea39 100644 --- a/gitlab/v4/cli.py +++ b/gitlab/v4/cli.py @@ -387,9 +387,9 @@ def extend_parser(parser: argparse.ArgumentParser) -> argparse.ArgumentParser: def get_dict( - obj: Union[str, gitlab.base.RESTObject], fields: List[str] + obj: Union[str, Dict[str, Any], gitlab.base.RESTObject], fields: List[str] ) -> Union[str, Dict[str, Any]]: - if isinstance(obj, str): + if not isinstance(obj, gitlab.base.RESTObject): return obj if fields: @@ -406,7 +406,7 @@ class JSONPrinter: @staticmethod def display_list( - data: List[Union[str, gitlab.base.RESTObject]], + data: List[Union[str, Dict[str, Any], gitlab.base.RESTObject]], fields: List[str], **_kwargs: Any, ) -> None: @@ -431,7 +431,7 @@ class YAMLPrinter: @staticmethod def display_list( - data: List[Union[str, gitlab.base.RESTObject]], + data: List[Union[str, Dict[str, Any], gitlab.base.RESTObject]], fields: List[str], **_kwargs: Any, ) -> None: diff --git a/tests/functional/cli/test_cli_repository.py b/tests/functional/cli/test_cli_repository.py index 7f521b4..90adc5e 100644 --- a/tests/functional/cli/test_cli_repository.py +++ b/tests/functional/cli/test_cli_repository.py @@ -1,3 +1,7 @@ +import json +import time + + def test_project_create_file(gitlab_cli, project): file_path = "README" branch = "main" @@ -45,6 +49,46 @@ def test_list_all_commits(gitlab_cli, project): assert len(ret_all.stdout) > len(ret.stdout) +def test_commit_merge_requests(gitlab_cli, project, merge_request, wait_for_sidekiq): + """This tests the `project-commit merge-requests` command and also tests + that we can print the result using the `json` formatter""" + # create and then merge a merge-request + mr = merge_request(source_branch="test_commit_merge_requests") + merge_result = mr.merge(should_remove_source_branch=True) + wait_for_sidekiq(timeout=60) + # Wait until it is merged + mr_iid = mr.iid + for _ in range(60): + mr = project.mergerequests.get(mr_iid) + if mr.merged_at is not None: + break + time.sleep(0.5) + assert mr.merged_at is not None + time.sleep(0.5) + wait_for_sidekiq(timeout=60) + + commit_sha = merge_result["sha"] + cmd = [ + "-o", + "json", + "project-commit", + "merge-requests", + "--project-id", + project.id, + "--id", + commit_sha, + ] + ret = gitlab_cli(cmd) + assert ret.success + + json_list = json.loads(ret.stdout) + assert isinstance(json_list, list) + assert len(json_list) == 1 + mr_dict = json_list[0] + assert mr_dict["id"] == mr.id + assert mr_dict["iid"] == mr.iid + + def test_revert_commit(gitlab_cli, project): commit = project.commits.list()[0] |
