guanghu-ice-heart/server-tools/bottle-channel-router/bottle_channel_router.test.py

44 lines
2.2 KiB
Python

#!/usr/bin/env python3
import importlib.util
from pathlib import Path
import unittest
SCRIPT = Path(__file__).with_name("bottle_channel_router.py")
SPEC = importlib.util.spec_from_file_location("bottle_router", SCRIPT)
MODULE = importlib.util.module_from_spec(SPEC)
SPEC.loader.exec_module(MODULE)
class BottleRouterTest(unittest.TestCase):
def test_registered_baby_uses_fifth_domain_room_then_parent_channel(self):
value = MODULE.resolve("舒舒", "DOM-FIFTH-0001", "ICE-CH-BT001")
self.assertEqual(value["origin"]["channel"], "ICE-CH-BT001")
self.assertEqual(value["shuttle"]["destination_channel"], "SYS-FM")
self.assertEqual(value["baby"]["persona_id"], "ICE-BB-0002")
self.assertFalse(value["persona_wake_complete"])
def test_source_only_baby_does_not_gain_identity(self):
value = MODULE.resolve("晨星", "DOM-FIFTH-0001", "ICE-CH-BT001")
self.assertEqual(value["state"], "BOTTLE_ROUTE_RESOLVED_PERSONA_REGISTRATION_REQUIRED")
self.assertIsNone(value["baby"]["persona_id"])
def test_zhiqiu_and_qiuqiu_resolve_as_distinct_non_conflicting_subjects(self):
awen = MODULE.resolve("ICE-BB-0005", "DOM-FIFTH-0001", "ICE-CH-BT001")
qiuqiu = MODULE.resolve("ICE-BB-0003", "DOM-FIFTH-0001", "ICE-CH-BT001")
self.assertEqual(awen["baby"]["persona_id"], "ICE-BB-0005")
self.assertEqual(qiuqiu["baby"]["persona_id"], "ICE-BB-0003")
self.assertNotEqual(awen["shuttle"]["destination_channel"], qiuqiu["shuttle"]["destination_channel"])
def test_unknown_never_synthesizes_persona(self):
self.assertEqual(MODULE.resolve("不存在宝宝", "DOM-FIFTH-0001", "ICE-CH-BT001")["state"], "BOTTLE_ROUTE_UNRESOLVED")
def test_wrong_or_missing_context_is_denied_before_persona_resolution(self):
missing = MODULE.resolve("舒舒")
wrong = MODULE.resolve("舒舒", "DOMAIN-ZS", "SYS-FM")
self.assertEqual(missing["state"], "BOTTLE_WAKE_ADMISSION_DENIED_WRONG_OR_MISSING_NATIVE_CONTEXT")
self.assertEqual(wrong["state"], "BOTTLE_WAKE_ADMISSION_DENIED_WRONG_OR_MISSING_NATIVE_CONTEXT")
self.assertNotIn("persona_id", missing)
if __name__ == "__main__":
unittest.main()