Browse Source

test command line entrypoint

Fabian Peter Hammerle 3 years ago
parent
commit
1044c8ce44
1 changed files with 99 additions and 0 deletions
  1. 99 0
      tests/test_cli.py

+ 99 - 0
tests/test_cli.py

@@ -0,0 +1,99 @@
+import logging
+import pathlib
+import unittest.mock
+
+import pytest
+
+from location_guessing_game_telegram_bot import _main
+
+
+@pytest.mark.parametrize(
+    ("args", "env", "telegram_token_path", "wikimap_export_path"),
+    (
+        (
+            [
+                "--telegram-token-path",
+                "/telegram/token.txt",
+                "--wikimap-export-path",
+                "/wikimap/export.json",
+            ],
+            {},
+            "/telegram/token.txt",
+            "/wikimap/export.json",
+        ),
+        (
+            [
+                "--telegram-token-path",
+                "/telegram/token.txt",
+                "--wikimap-export-path",
+                "/wikimap/export.json",
+            ],
+            {
+                "TELEGRAM_TOKEN_PATH": "overruled.txt",
+                "WIKIMAP_EXPORT_PATH": "/ineffective.json",
+            },
+            "/telegram/token.txt",
+            "/wikimap/export.json",
+        ),
+        (
+            ["--wikimap-export-path", "/wikimap/export.json"],
+            {
+                "TELEGRAM_TOKEN_PATH": "/telegram/token-via-env.txt",
+                "WIKIMAP_EXPORT_PATH": "/ineffective.json",
+            },
+            "/telegram/token-via-env.txt",
+            "/wikimap/export.json",
+        ),
+        (
+            [],
+            {
+                "TELEGRAM_TOKEN_PATH": "/telegram/token-via-env.txt",
+                "WIKIMAP_EXPORT_PATH": "/export.json",
+            },
+            "/telegram/token-via-env.txt",
+            "/export.json",
+        ),
+    ),
+)
+def test__main(args, env, telegram_token_path, wikimap_export_path):
+    with unittest.mock.patch(
+        "location_guessing_game_telegram_bot._run"
+    ) as run_mock, unittest.mock.patch(
+        "sys.argv", [""] + args
+    ), unittest.mock.patch.dict(
+        "os.environ", env
+    ):
+        _main()
+    run_mock.assert_called_once_with(
+        telegram_token_path=pathlib.Path(telegram_token_path),
+        wikimap_export_path=pathlib.Path(wikimap_export_path),
+    )
+
+
+@pytest.mark.parametrize(
+    ("args", "root_log_level", "log_format"),
+    (
+        ([], logging.INFO, "%(message)s"),
+        (
+            ["--debug"],
+            logging.DEBUG,
+            "%(asctime)s:%(levelname)s:%(name)s:%(funcName)s:%(message)s",
+        ),
+    ),
+)
+def test_logging_config(args, root_log_level, log_format):
+    with unittest.mock.patch(
+        "location_guessing_game_telegram_bot._run"
+    ) as run_mock, unittest.mock.patch(
+        "sys.argv",
+        ["", "--telegram-token-path", "/t", "--wikimap-export-path", "/w"] + args,
+    ), unittest.mock.patch(
+        "logging.basicConfig"
+    ) as logging_basic_config_mock:
+        _main()
+    run_mock.assert_called_once_with(
+        telegram_token_path=pathlib.Path("/t"), wikimap_export_path=pathlib.Path("/w")
+    )
+    assert logging_basic_config_mock.call_count == 1
+    assert logging_basic_config_mock.call_args[1]["level"] == root_log_level
+    assert logging_basic_config_mock.call_args[1]["format"] == log_format