Files
AISHub/tests/test_merge.py
T
2026-05-04 08:13:38 +03:00

64 lines
1.9 KiB
Python

from ais_hub.core import merge
from ais_hub.core.models import AisReport, MergedTarget
def test_eager_merge_updates_dynamic_fields():
t = MergedTarget(mmsi=123)
rep = AisReport(
ts=100.0, source="src", kind="dynamic", mmsi=123, msg_type=1,
channel="A", data={"lat": 10.5, "lon": 20.5, "sog": 7.1, "cog": 180.0},
)
changed = merge.apply(t, rep)
assert changed is True
assert t.lat == 10.5
assert t.sog == 7.1
assert t.last_dynamic_ts == 100.0
assert t.last_seen == 100.0
def test_stale_dynamic_report_is_ignored():
t = MergedTarget(mmsi=123)
t.last_dynamic_ts = 200.0
t.lat = 1.0
older = AisReport(
ts=100.0, source="src", kind="dynamic", mmsi=123, msg_type=1,
data={"lat": 50.0},
)
merge.apply(t, older)
assert t.lat == 1.0 # unchanged
def test_static_and_dynamic_keep_separate_timestamps():
t = MergedTarget(mmsi=42)
dyn = AisReport(
ts=100.0, source="a", kind="dynamic", mmsi=42, msg_type=1,
data={"lat": 1.0, "lon": 2.0},
)
stat = AisReport(
ts=110.0, source="a", kind="static", mmsi=42, msg_type=5,
data={"name": "MV TEST", "callsign": "ABCD", "imo": 9999999},
)
merge.apply(t, dyn)
merge.apply(t, stat)
assert t.lat == 1.0 and t.name == "MV TEST"
assert t.last_dynamic_ts == 100.0
assert t.last_static_ts == 110.0
assert t.last_seen == 110.0
def test_msg24_name_and_callsign_combine():
t = MergedTarget(mmsi=7)
# Msg 24A -> name
merge.apply(t, AisReport(
ts=10.0, source="a", kind="static", mmsi=7, msg_type=24,
data={"name": "BOAT"},
))
# Msg 24B -> callsign + dims (later, must not wipe name)
merge.apply(t, AisReport(
ts=11.0, source="a", kind="static", mmsi=7, msg_type=24,
data={"callsign": "CALL", "dim_a": 10, "dim_b": 20},
))
assert t.name == "BOAT"
assert t.callsign == "CALL"
assert t.dim_a == 10