from __future__ import annotations import asyncio import json from datetime import datetime import pytest from prod.clean_arch.adapters.hazelcast_feed import HazelcastDataFeed class _FakeMap: def __init__(self, payload: str) -> None: self.payload = payload def get(self, key: str): if key == "latest_eigen_scan": return self.payload return None def size(self) -> int: return 1 def test_single_result_scan_schema_is_accepted() -> None: payload = json.dumps( { "scan_number": 2576, "timestamp": 1779805956.9522693, "target_asset": "BTCUSDT", "result": { "asset": "BTCUSDT", "price": 77599.64, "eigenvalue_tracking": {"lambda_max": 24.6, "lambda_max_velocity": -0.0053}, "multi_window_results": { "50": {"tracking_data": {"lambda_max_velocity": -0.19346329413310556}}, "750": {"tracking_data": {"lambda_max_velocity": -0.0001833266579540457}}, }, "confidence": 0.79, }, } ) feed = HazelcastDataFeed({"hazelcast": {"cluster": "dolphin", "host": "localhost:5701"}}) feed.features_map = _FakeMap(payload) snapshot = asyncio.run(feed.get_latest_snapshot("BTCUSDT")) assert snapshot is not None assert snapshot.symbol == "BTCUSDT" assert snapshot.price == 77599.64 assert snapshot.velocity_divergence == pytest.approx(-0.19327996747515153) assert snapshot.irp_alignment == 0.79 assert snapshot.scan_number == 2576