Files
full-stack-fastapi/backend/tests/mqtt/test_mixed_parser.py
魏风 e81aadcd99
All checks were successful
Deploy to Production / deploy (push) Successful in 1m10s
feat: add realtime GNSS monitor with telemetry websocket
2026-03-20 11:48:04 +08:00

49 lines
1.7 KiB
Python

from app.mqtt.parsers.mixed import parse_mixed_payload
from app.mqtt.parsers.nmea import parse_nmea_sentences
def test_parse_nmea_sentences_extracts_gga_and_rmc() -> None:
payload = (
b"$GPGGA,123519,3723.2475,N,12158.3416,W,1,12,0.8,10.0,M,-25.0,M,,*65\r\n"
b"$GPRMC,123520,A,3723.2475,N,12158.3416,W,0.13,309.62,120598,,,A*74\r\n"
)
events = parse_nmea_sentences(payload)
assert {e["event_type"] for e in events} >= {"nmea_gga", "nmea_rmc"}
def test_parse_mixed_payload_returns_rtcm_summary() -> None:
payload = (
b"$GPGSV,1,1,04,02,17,213,40,05,29,121,37,12,66,314,44,25,14,048,39*71\r\n"
+ b"\xd3\x00\x04"
+ b"\x43\x50\x00\x00"
+ b"\x00\x00\x00"
)
events = parse_mixed_payload(payload)
event_types = {event["event_type"] for event in events}
assert "rtcm_summary" in event_types
def test_parse_nmea_sentences_extracts_satellite_details_and_used_ids() -> None:
payload = (
b"$GPGSA,A,3,02,05,12,,,,,,,,,,1.50,0.90,1.20*00\r\n"
b"$GPGSV,1,1,04,02,17,213,40,05,29,121,37,12,66,314,44,25,14,048,39*71\r\n"
)
events = parse_nmea_sentences(payload)
gsa_event = next(event for event in events if event["event_type"] == "nmea_gsa")
gsv_event = next(event for event in events if event["event_type"] == "nmea_gsv")
assert gsa_event["payload"]["used_satellite_ids"] == ["02", "05", "12"]
assert gsv_event["payload"]["constellation"] == "GPS"
assert len(gsv_event["payload"]["satellites"]) == 4
assert gsv_event["payload"]["satellites"][0] == {
"satellite_id": "02",
"elevation_deg": 17,
"azimuth_deg": 213,
"snr_dbhz": 40,
}