From b2fbb532e359985142a71354b5b648ae560a80ac Mon Sep 17 00:00:00 2001
From: David Luevano Alvarado <david@luevano.xyz>
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