From b2fbb532e359985142a71354b5b648ae560a80ac Mon Sep 17 00:00:00 2001 From: David Luevano Alvarado Date: Sun, 19 Feb 2023 04:33:46 -0600 Subject: add final arg parser tests, refactor pyssg error msgs --- tests/conftest.py | 4 ++-- tests/test_arg_parser.py | 39 +++++++++++++++++++++++++++++++++------ 2 files changed, 35 insertions(+), 8 deletions(-) (limited to 'tests') diff --git a/tests/conftest.py b/tests/conftest.py index 9368432..fcf4189 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -2,6 +2,6 @@ import pytest from pyssg.arg_parser import get_parser -@pytest.fixture +@pytest.fixture(scope='session') def arg_parser(): - return get_parser() \ No newline at end of file + return get_parser() diff --git a/tests/test_arg_parser.py b/tests/test_arg_parser.py index 45263ce..1a5b48c 100644 --- a/tests/test_arg_parser.py +++ b/tests/test_arg_parser.py @@ -1,16 +1,43 @@ +import sys import pytest +from unittest.mock import patch from argparse import ArgumentParser +# these tests don't really show any coverage, so not sure how useful they're +# but I'm including them as at least these should work @pytest.mark.parametrize('args, arg_name, exp_result', [ (['--version'], 'version', True), (['-v'], 'version', True), + # config really just inputs a string (['--config', 'value'], 'config', 'value'), (['-c', 'value'], 'config', 'value'), + (['--copy-default-config'], 'copy_default_config', True), + (['--init'], 'init', True), + (['-i'], 'init', True), + (['--build'], 'build', True), + (['-b'], 'build', True), + (['--debug'], 'debug', True) ]) -def test_individual_args(args: list[str], - arg_name: str, - exp_result: str | bool, - arg_parser: ArgumentParser) -> None: - parsed_args: dict[str, str | bool] = vars(arg_parser.parse_args(args)) - assert parsed_args[arg_name] == exp_result +def test_valid_args(args: list[str], + arg_name: str, + exp_result: str | bool, + arg_parser: ArgumentParser) -> None: + with patch.object(sys, 'argv', ['pyssg'] + args): + parsed_args: dict[str, str | bool] = vars(arg_parser.parse_args()) + assert parsed_args[arg_name] == exp_result + + +@pytest.mark.parametrize('args', [ + (['--something-random']), + (['-z']), + (['hello']), + (['help']), + (['h']) +]) +def test_invalid_args(args: list[str], + arg_parser: ArgumentParser) -> None: + with pytest.raises(SystemExit) as system_exit: + arg_parser.parse_args(args) + assert system_exit.type == SystemExit + assert system_exit.value.code == 2 -- cgit v1.2.3-70-g09d2