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
|
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']),
(['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
|