diff --git a/src/ahriman/application/ahriman.py b/src/ahriman/application/ahriman.py index 09f6df9e..bca4c4d6 100644 --- a/src/ahriman/application/ahriman.py +++ b/src/ahriman/application/ahriman.py @@ -90,7 +90,7 @@ def _parser() -> argparse.ArgumentParser: type=int, default=-1) parser.add_argument("-V", "--version", action="version", version=__version__) - subparsers = parser.add_subparsers(title="command", help="command to run", dest="command", required=True) + subparsers = parser.add_subparsers(title="command", help="command to run", dest="command") _set_aur_search_parser(subparsers) _set_help_parser(subparsers) @@ -1016,5 +1016,8 @@ def run() -> int: args_parser = _parser() args = args_parser.parse_args() + if args.command is None: # in case of empty command we would like to print help message + args_parser.exit(status=2, message=args_parser.format_help()) + handler: handlers.Handler = args.handler return handler.execute(args) diff --git a/tests/ahriman/application/test_ahriman.py b/tests/ahriman/application/test_ahriman.py index 69a452ae..d3aa0868 100644 --- a/tests/ahriman/application/test_ahriman.py +++ b/tests/ahriman/application/test_ahriman.py @@ -1,4 +1,5 @@ import argparse +import pytest from pathlib import Path from pytest_mock import MockerFixture @@ -841,8 +842,20 @@ def test_run(args: argparse.Namespace, mocker: MockerFixture) -> None: application must be run """ args.architecture = "x86_64" + args.command = "" args.handler = Handler mocker.patch("argparse.ArgumentParser.parse_args", return_value=args) assert ahriman.run() == 1 + + +def test_run_without_command(args: argparse.Namespace, mocker: MockerFixture) -> None: + """ + must show help message if run without commands + """ + args.command = None + mocker.patch("argparse.ArgumentParser.parse_args", return_value=args) + + with pytest.raises(SystemExit): + ahriman.run()