|
@@ -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
|