Files
kandrusyak_bot/tests/test_config.py

107 lines
3.5 KiB
Python

import os
import unittest
from unittest.mock import patch
from assistant_bot import config
class AppSettingsTests(unittest.TestCase):
@staticmethod
def load_settings(**overrides):
environment = {
config.TOKEN_ENV_NAME: "token",
config.PASSWORD_ENV_NAME: "secret",
**overrides,
}
with patch("assistant_bot.config.load_env_file"), patch.dict(
os.environ,
environment,
clear=True,
):
return config.load_app_settings()
def test_loads_complete_startup_configuration_once(self) -> None:
environment = {
config.TOKEN_ENV_NAME: "token",
config.PASSWORD_ENV_NAME: "secret",
config.MODE_ENV_NAME: "local",
config.DB_ENV_NAME: "data/test.sqlite3",
config.TIMEZONE_ENV_NAME: "UTC",
config.WHISPER_LANGUAGE_ENV_NAME: "auto",
}
with patch(
"assistant_bot.config.load_env_file"
) as load_env_file, patch.dict(
os.environ,
environment,
clear=True,
):
settings = config.load_app_settings()
load_env_file.assert_called_once_with()
self.assertEqual(settings.bot_token, "token")
self.assertEqual(settings.assistant_password, "secret")
self.assertEqual(settings.mode, "local")
self.assertEqual(settings.db_path, config.PROJECT_ROOT / "data/test.sqlite3")
self.assertEqual(settings.timezone.key, "UTC")
self.assertIsNone(settings.whisper_language)
self.assertIsNone(settings.yandex_cloud_folder)
def test_gpu_int8_defaults(self) -> None:
settings = self.load_settings()
self.assertEqual(settings.whisper_model, "large-v3")
self.assertEqual(settings.whisper_device, "cuda")
self.assertEqual(settings.whisper_compute_type, "int8")
def test_local_mode_is_default(self) -> None:
self.assertEqual(self.load_settings().mode, "local")
def test_yandex_mode_is_supported(self) -> None:
settings = self.load_settings(
**{
config.MODE_ENV_NAME: "YANDEX",
config.YANDEX_CLOUD_FOLDER_ENV_NAME: "folder-id",
}
)
self.assertEqual(settings.mode, "yandex")
def test_unknown_mode_is_rejected(self) -> None:
with self.assertRaises(RuntimeError):
self.load_settings(**{config.MODE_ENV_NAME: "cloud"})
def test_yandex_model_is_full_gpt_uri(self) -> None:
settings = self.load_settings(
**{
config.MODE_ENV_NAME: "yandex",
config.YANDEX_CLOUD_FOLDER_ENV_NAME: "folder-id",
config.YANDEX_CLOUD_MODEL_ENV_NAME: "yandexgpt/latest",
}
)
self.assertEqual(
settings.default_models()["yandex"],
"gpt://folder-id/yandexgpt/latest",
)
def test_password_is_required(self) -> None:
with patch("assistant_bot.config.load_env_file"), patch.dict(
os.environ,
{config.TOKEN_ENV_NAME: "token"},
clear=True,
):
with self.assertRaises(RuntimeError):
config.load_app_settings()
def test_password_is_read_from_environment(self) -> None:
settings = self.load_settings(
**{config.PASSWORD_ENV_NAME: " test-password "}
)
self.assertEqual(settings.assistant_password, "test-password")
if __name__ == "__main__":
unittest.main()