test_event_projection_router.py 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. #!/usr/bin/env python3
  2. # -*- coding: utf-8 -*-
  3. from data_modules.event_projection_router import EventProjectionRouter
  4. def test_router_maps_power_breakthrough_to_state_and_memory():
  5. router = EventProjectionRouter()
  6. targets = router.route(
  7. {"event_type": "power_breakthrough", "subject": "xiaoyan", "payload": {}}
  8. )
  9. assert targets == ["state", "memory", "vector"]
  10. def test_router_maps_relationship_changed_to_index():
  11. router = EventProjectionRouter()
  12. targets = router.route(
  13. {
  14. "event_type": "relationship_changed",
  15. "subject": "xiaoyan",
  16. "payload": {"to": "yaolao"},
  17. }
  18. )
  19. assert "index" in targets
  20. def test_router_maps_world_rule_broken_to_memory_only():
  21. router = EventProjectionRouter()
  22. targets = router.route(
  23. {
  24. "event_type": "world_rule_broken",
  25. "subject": "金手指",
  26. "payload": {"field": "world_rule"},
  27. }
  28. )
  29. assert targets == ["memory", "vector"]
  30. def test_router_collects_required_writers_from_commit_payload():
  31. router = EventProjectionRouter()
  32. targets = router.required_writers(
  33. {
  34. "accepted_events": [
  35. {"event_type": "power_breakthrough", "subject": "xiaoyan", "payload": {}},
  36. {
  37. "event_type": "relationship_changed",
  38. "subject": "xiaoyan",
  39. "payload": {"to": "yaolao"},
  40. },
  41. ],
  42. "summary_text": "本章摘要",
  43. }
  44. )
  45. assert targets == ["index", "memory", "state", "summary", "vector"]
  46. def test_router_maps_power_breakthrough_to_state_memory_vector():
  47. router = EventProjectionRouter()
  48. targets = router.route(
  49. {"event_type": "power_breakthrough", "subject": "xiaoyan", "payload": {}}
  50. )
  51. assert "vector" in targets
  52. assert "state" in targets
  53. assert "memory" in targets
  54. def test_router_maps_relationship_changed_to_index_and_vector():
  55. router = EventProjectionRouter()
  56. targets = router.route(
  57. {"event_type": "relationship_changed", "subject": "xiaoyan", "payload": {}}
  58. )
  59. assert "index" in targets
  60. assert "vector" in targets
  61. def test_required_writers_includes_vector_for_key_events():
  62. router = EventProjectionRouter()
  63. payload = {
  64. "meta": {"status": "accepted", "chapter": 5},
  65. "accepted_events": [
  66. {"event_type": "power_breakthrough", "subject": "xiaoyan", "payload": {}},
  67. ],
  68. "entity_deltas": [],
  69. "summary_text": "摘要",
  70. }
  71. writers = router.required_writers(payload)
  72. assert "vector" in writers
  73. def test_required_writers_includes_index_for_accepted_commit():
  74. router = EventProjectionRouter()
  75. writers = router.required_writers(
  76. {
  77. "meta": {"status": "accepted", "chapter": 5},
  78. "accepted_events": [],
  79. "entity_deltas": [],
  80. "summary_text": "",
  81. }
  82. )
  83. assert "index" in writers
  84. def test_router_ignores_unknown_and_non_dict_events():
  85. router = EventProjectionRouter()
  86. assert router.route({"event_type": "unknown"}) == []
  87. writers = router.required_writers(
  88. {
  89. "meta": {"status": "rejected"},
  90. "accepted_events": ["not-a-dict", {"event_type": "unknown"}],
  91. "entity_deltas": [],
  92. "summary_text": " ",
  93. }
  94. )
  95. assert writers == []