| from __future__ import annotations |
|
|
| import unittest |
|
|
| from core.app_state import AppState |
| from core.events import Event, EventBus, EventType |
| from core.registry import Registry |
|
|
|
|
| class CoreTest(unittest.TestCase): |
| def test_event_bus_calls_registered_handler(self) -> None: |
| bus = EventBus() |
| seen = [] |
|
|
| @bus.on(EventType.DATASET_LOADED) |
| def handler(event: Event) -> None: |
| seen.append(event.payload["rows"]) |
|
|
| bus.emit(Event(EventType.DATASET_LOADED, {"rows": 3})) |
|
|
| self.assertEqual(seen, [3]) |
|
|
| def test_event_type_behaves_like_string_on_python_310(self) -> None: |
| self.assertIsInstance(EventType.DATASET_LOADED, str) |
| self.assertEqual(str(EventType.DATASET_LOADED), "dataset_loaded") |
| self.assertEqual(EventType.DATASET_LOADED.value, "dataset_loaded") |
|
|
| def test_registry_registers_and_gets_items(self) -> None: |
| registry: Registry[int] = Registry() |
| registry.register("answer", 42) |
|
|
| self.assertEqual(registry.get("answer"), 42) |
| self.assertEqual(registry.list(), ["answer"]) |
|
|
| def test_registry_raises_for_missing_item(self) -> None: |
| registry: Registry[int] = Registry() |
|
|
| with self.assertRaises(KeyError): |
| registry.get("missing") |
|
|
| def test_app_state_records_and_dispatches_events(self) -> None: |
| bus = EventBus() |
| state = AppState(bus) |
| seen = [] |
|
|
| @bus.on(EventType.FIELD_NOTE_SAVED) |
| def handler(event: Event) -> None: |
| seen.append(event.payload["model_id"]) |
|
|
| state.emit(Event(EventType.FIELD_NOTE_SAVED, {"model_id": "minicpm"})) |
|
|
| self.assertEqual(seen, ["minicpm"]) |
| self.assertEqual(state.recent_events()[0]["payload"]["model_id"], "minicpm") |
|
|
|
|
| if __name__ == "__main__": |
| unittest.main() |
|
|