forked from mttu-developers/konabot
79 lines
1.9 KiB
Python
79 lines
1.9 KiB
Python
import json
|
|
from unittest.mock import AsyncMock
|
|
import pytest
|
|
|
|
from konabot.common.apis.wolfx import CencEewReport, WolfxAPIService, WolfxWebSocket
|
|
|
|
|
|
obj_example = {
|
|
"ID": "bacby4yab1oyb",
|
|
"EventID": "202603100805.0001",
|
|
"ReportTime": "2026-03-10 08:05:29",
|
|
"ReportNum": 1,
|
|
"OriginTime": "2026-03-10 08:05:29",
|
|
"HypoCenter": "新疆昌吉州呼图壁县",
|
|
"Latitude": 43.687,
|
|
"Longitude": 86.427,
|
|
"Magnitude": 4.0,
|
|
"Depth": 14,
|
|
"MaxIntensity": 5,
|
|
}
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_wolfx_websocket_handle():
|
|
ws = WolfxWebSocket("")
|
|
|
|
mock_callback = AsyncMock()
|
|
ws.signal.append(mock_callback)
|
|
ws.signal.freeze()
|
|
|
|
obj1 = {
|
|
"type": "heartbeat",
|
|
"ver": 18,
|
|
"id": "a69edf6436c5b605",
|
|
"timestamp": 1773111106701,
|
|
}
|
|
data1 = json.dumps(obj1).encode()
|
|
await ws.handle(data1)
|
|
mock_callback.assert_not_called()
|
|
mock_callback.reset_mock()
|
|
|
|
obj2 = obj_example
|
|
data2 = json.dumps(obj2).encode()
|
|
await ws.handle(data2)
|
|
mock_callback.assert_called_once_with(data2)
|
|
mock_callback.reset_mock()
|
|
|
|
data3 = b"what the f"
|
|
await ws.handle(data3)
|
|
mock_callback.assert_not_called()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_wolfx_bind_pydantic():
|
|
sv = WolfxAPIService()
|
|
called: list[CencEewReport] = []
|
|
|
|
@sv.cenc_eew.append
|
|
async def _(data: CencEewReport):
|
|
called.append(data)
|
|
|
|
sv._cenc_eew_ws.signal.freeze()
|
|
sv.cenc_eew.freeze()
|
|
|
|
data = json.dumps(obj_example).encode()
|
|
await sv._cenc_eew_ws.signal.send(data)
|
|
|
|
assert len(called) == 1
|
|
data = called[0]
|
|
|
|
assert data.HypoCenter == obj_example["HypoCenter"]
|
|
assert data.EventID == obj_example["EventID"]
|
|
|
|
# Don't panic when the object is invalid
|
|
data = json.dumps({"type": "给"}).encode()
|
|
await sv._cenc_eew_ws.signal.send(data)
|
|
|
|
assert len(called) == 1
|