Files
DbusSmsForward/tests/test_config_model.py

151 lines
5.9 KiB
Python

import unittest
from dbussmsforward.config import AppConfig, load_config_dict
class ConfigModelTests(unittest.TestCase):
def test_load_config_dict_maps_autmanpush_and_defaults(self):
raw = {
"daemon": {"mode": "web"},
"notifications": {
"autman_push": {
"enabled": True,
"api_url": "https://push.example/api",
"access_token": "***",
"method": "POST",
}
},
}
config = load_config_dict(raw)
self.assertIsInstance(config, AppConfig)
self.assertEqual(config.daemon.mode, "web")
self.assertTrue(config.forwarding.enable_sms_code_extraction)
self.assertTrue(config.notifications.autman_push.enabled)
self.assertEqual(config.notifications.autman_push.api_url, "https://push.example/api")
self.assertEqual(config.notifications.autman_push.access_token, "secret-token")
self.assertEqual(config.notifications.autman_push.method, "POST")
def test_load_config_dict_accepts_legacy_appsettings_wrapper(self):
raw = {
"appSettings": {
"DeviceName": "router-a",
"SmsCodeKey": "验证码±code",
"AutmanPushConfig": {
"ApiUrl": "https://legacy.example/push",
"AccessToken": "legacy-token",
"Method": "GET",
},
}
}
config = load_config_dict(raw)
self.assertEqual(config.forwarding.device_name, "router-a")
self.assertEqual(config.forwarding.sms_code_key, "验证码±code")
self.assertEqual(config.notifications.autman_push.api_url, "https://legacy.example/push")
self.assertEqual(config.notifications.autman_push.access_token, "legacy-token")
self.assertEqual(config.notifications.autman_push.method, "GET")
def test_load_config_dict_reads_sms_source_and_console_notification(self):
raw = {
"notifications": {"console": {"enabled": True}},
"sms_source": {
"kind": "file",
"path": "/tmp/messages.json",
"delete_after_read": True,
"poll_interval_seconds": 9,
},
}
config = load_config_dict(raw)
self.assertTrue(config.notifications.console.enabled)
self.assertEqual(config.sms_source.kind, "file")
self.assertEqual(config.sms_source.path, "/tmp/messages.json")
self.assertTrue(config.sms_source.delete_after_read)
self.assertEqual(config.sms_source.poll_interval_seconds, 9)
def test_load_config_dict_reads_modemmanager_sms_source_options(self):
raw = {
"sms_source": {
"kind": "modemmanager",
"modem_object_path": "auto",
"system_bus_address": "unix:path=/run/dbus/system_bus_socket",
"storage_blacklist": ["SM", "mt", "sm"],
"state_ready_values": [3, "4"],
}
}
config = load_config_dict(raw)
self.assertEqual(config.sms_source.kind, "modemmanager")
self.assertEqual(config.sms_source.modem_object_path, "auto")
self.assertEqual(config.sms_source.system_bus_address, "unix:path=/run/dbus/system_bus_socket")
self.assertEqual(config.sms_source.storage_blacklist, ["sm", "mt"])
self.assertEqual(config.sms_source.state_ready_values, [3, 4])
def test_load_config_dict_maps_all_notification_channels(self):
raw = {
"notifications": {
"email": {
"enabled": True,
"smtp_host": "smtp.example.com",
"smtp_port": 587,
"enable_ssl": False,
"email_key": "mail-key",
"send_email": "sender@example.com",
"receive_email": "receiver@example.com",
},
"pushplus": {
"enabled": True,
"token": "push-token",
"endpoint": "https://pushplus.example/send",
},
"dingtalk": {
"enabled": True,
"access_token": "ding-token",
"secret": "ding-secret",
},
"bark": {
"enabled": True,
"server_url": "https://bark.example",
"bark_key": "bark-key",
},
"wecom_application": {
"enabled": True,
"corp_id": "corp-id",
"agent_id": "1000001",
"application_secret": "app-secret",
},
"telegram_bot": {
"enabled": True,
"enable_custom_api": True,
"custom_api": "https://tg.example",
"bot_token": "bot-token",
"chat_id": "10001",
},
"shell": {
"enabled": True,
"shell_path": "/tmp/hook.sh",
},
}
}
config = load_config_dict(raw)
self.assertTrue(config.notifications.email.enabled)
self.assertEqual(config.notifications.email.smtp_host, "smtp.example.com")
self.assertEqual(config.notifications.pushplus.endpoint, "https://pushplus.example/send")
self.assertEqual(config.notifications.dingtalk.secret, "ding-secret")
self.assertEqual(config.notifications.bark.bark_key, "bark-key")
self.assertEqual(config.notifications.wecom_application.agent_id, "1000001")
self.assertTrue(config.notifications.telegram_bot.enable_custom_api)
self.assertEqual(config.notifications.telegram_bot.custom_api, "https://tg.example")
self.assertEqual(config.notifications.shell.shell_path, "/tmp/hook.sh")
if __name__ == "__main__":
unittest.main()