151 lines
5.9 KiB
Python
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()
|