49 lines
1.7 KiB
Python
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,
|
|
}
|