summaryrefslogtreecommitdiff
path: root/tests/test_arg_parser.py
blob: 1a5b48cefef57204b87f7bab209e70580fc5912b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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_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