build 059.12: add runtime event models

This commit is contained in:
2026-07-17 20:19:00 +03:00
parent d2d8f8fad4
commit f2bacb80c9
3 changed files with 818 additions and 0 deletions

View File

@@ -0,0 +1,116 @@
# app/tests/unit/market_data/acquisition/runtime/test_runtime_events.py
from __future__ import annotations
from dataclasses import FrozenInstanceError
import pytest
from src.market_data.acquisition.runtime.runtime_events import (
ConnectedEvent,
ConnectFailedEvent,
DisconnectedEvent,
HeartbeatTimeoutEvent,
MessageReceivedEvent,
MessageSentEvent,
ReconnectCompletedEvent,
ReconnectFailedEvent,
ReconnectStartedEvent,
)
from src.market_data.acquisition.runtime.transport_messages import (
TransportBinaryMessage,
TransportTextMessage,
)
def test_connected_event_is_marker_event() -> None:
assert ConnectedEvent() == ConnectedEvent()
def test_disconnected_event_is_marker_event() -> None:
assert DisconnectedEvent() == DisconnectedEvent()
def test_connect_failed_event_contains_reason() -> None:
event = ConnectFailedEvent(reason="connection refused")
assert event.reason == "connection refused"
def test_message_received_event_supports_text_message() -> None:
message = TransportTextMessage(payload="market-data")
event = MessageReceivedEvent(message=message)
assert event.message is message
def test_message_received_event_supports_binary_message() -> None:
message = TransportBinaryMessage(payload=b"\x01\x02")
event = MessageReceivedEvent(message=message)
assert event.message is message
def test_message_sent_event_contains_transport_message() -> None:
message = TransportTextMessage(payload="ping")
event = MessageSentEvent(message=message)
assert event.message is message
def test_reconnect_started_event_contains_attempt() -> None:
event = ReconnectStartedEvent(attempt=1)
assert event.attempt == 1
def test_reconnect_completed_event_contains_attempt() -> None:
event = ReconnectCompletedEvent(attempt=2)
assert event.attempt == 2
def test_reconnect_failed_event_contains_attempt_and_reason() -> None:
event = ReconnectFailedEvent(
attempt=3,
reason="timeout",
)
assert event.attempt == 3
assert event.reason == "timeout"
def test_heartbeat_timeout_event_contains_timeout_seconds() -> None:
event = HeartbeatTimeoutEvent(timeout_seconds=30.0)
assert event.timeout_seconds == 30.0
def test_connect_failed_event_is_immutable() -> None:
event = ConnectFailedEvent(reason="timeout")
with pytest.raises(FrozenInstanceError):
setattr(event, "reason", "connection refused")
def test_message_received_event_is_immutable() -> None:
event = MessageReceivedEvent(
message=TransportTextMessage(payload="payload"),
)
with pytest.raises(FrozenInstanceError):
setattr(
event,
"message",
TransportTextMessage(payload="other"),
)
def test_reconnect_failed_event_is_immutable() -> None:
event = ReconnectFailedEvent(
attempt=1,
reason="timeout",
)
with pytest.raises(FrozenInstanceError):
setattr(event, "attempt", 2)