121 lines
4.1 KiB
Python
121 lines
4.1 KiB
Python
import os
|
|
import unittest
|
|
from unittest.mock import patch
|
|
|
|
from assistant_bot import config
|
|
|
|
|
|
class AppSettingsTests(unittest.TestCase):
|
|
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)
|
|
|
|
|
|
class WhisperConfigTests(unittest.TestCase):
|
|
def test_gpu_int8_defaults(self) -> None:
|
|
variable_names = (
|
|
config.WHISPER_MODEL_ENV_NAME,
|
|
config.WHISPER_DEVICE_ENV_NAME,
|
|
config.WHISPER_COMPUTE_TYPE_ENV_NAME,
|
|
)
|
|
with patch("assistant_bot.config.load_env_file"), patch.dict(
|
|
os.environ,
|
|
{},
|
|
clear=False,
|
|
):
|
|
for variable_name in variable_names:
|
|
os.environ.pop(variable_name, None)
|
|
|
|
self.assertEqual(config.get_whisper_model(), "large-v3")
|
|
self.assertEqual(config.get_whisper_device(), "cuda")
|
|
self.assertEqual(config.get_whisper_compute_type(), "int8")
|
|
|
|
|
|
class AssistantModeConfigTests(unittest.TestCase):
|
|
def test_local_mode_is_default(self) -> None:
|
|
with patch("assistant_bot.config.load_env_file"), patch.dict(
|
|
os.environ,
|
|
{},
|
|
clear=False,
|
|
):
|
|
os.environ.pop(config.MODE_ENV_NAME, None)
|
|
self.assertEqual(config.get_assistant_mode(), "local")
|
|
|
|
def test_yandex_mode_is_supported(self) -> None:
|
|
with patch("assistant_bot.config.load_env_file"), patch.dict(
|
|
os.environ,
|
|
{config.MODE_ENV_NAME: "YANDEX"},
|
|
clear=False,
|
|
):
|
|
self.assertEqual(config.get_assistant_mode(), "yandex")
|
|
|
|
def test_unknown_mode_is_rejected(self) -> None:
|
|
with patch("assistant_bot.config.load_env_file"), patch.dict(
|
|
os.environ,
|
|
{config.MODE_ENV_NAME: "cloud"},
|
|
clear=False,
|
|
):
|
|
with self.assertRaises(RuntimeError):
|
|
config.get_assistant_mode()
|
|
|
|
def test_yandex_model_is_full_gpt_uri(self) -> None:
|
|
with patch("assistant_bot.config.load_env_file"), patch.dict(
|
|
os.environ,
|
|
{
|
|
config.YANDEX_CLOUD_FOLDER_ENV_NAME: "folder-id",
|
|
config.YANDEX_CLOUD_MODEL_ENV_NAME: "yandexgpt/latest",
|
|
},
|
|
clear=False,
|
|
):
|
|
self.assertEqual(
|
|
config.get_default_yandex_model(),
|
|
"gpt://folder-id/yandexgpt/latest",
|
|
)
|
|
|
|
|
|
class PasswordConfigTests(unittest.TestCase):
|
|
def test_password_is_required(self) -> None:
|
|
with patch("assistant_bot.config.load_env_file"), patch.dict(
|
|
os.environ,
|
|
{},
|
|
clear=False,
|
|
):
|
|
os.environ.pop(config.PASSWORD_ENV_NAME, None)
|
|
with self.assertRaises(RuntimeError):
|
|
config.get_assistant_password()
|
|
|
|
def test_password_is_read_from_environment(self) -> None:
|
|
with patch("assistant_bot.config.load_env_file"), patch.dict(
|
|
os.environ,
|
|
{config.PASSWORD_ENV_NAME: " test-password "},
|
|
clear=False,
|
|
):
|
|
self.assertEqual(config.get_assistant_password(), "test-password")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|