2026-03-11 15:01:57 -04:00
|
|
|
import decoder
|
|
|
|
|
|
|
|
|
|
|
2026-03-14 21:33:28 -04:00
|
|
|
def test_extract_device_role_ignores_model_and_origin_hints():
|
2026-03-11 15:01:57 -04:00
|
|
|
payload = {
|
|
|
|
|
"status": {
|
|
|
|
|
"model": "PyMC-Repeater",
|
2026-03-14 21:33:28 -04:00
|
|
|
"origin": "PR-Room-Server",
|
|
|
|
|
"client_version": "meshcore-room/1.2.3",
|
|
|
|
|
"description": "Living room node",
|
2026-03-11 15:01:57 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assert decoder._extract_device_role(payload, "meshcore/BOS/test/status"
|
2026-03-14 21:33:28 -04:00
|
|
|
) is None
|
2026-03-11 15:01:57 -04:00
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_extract_device_role_from_numeric_role_code_string():
|
|
|
|
|
payload = {
|
|
|
|
|
"payload": {
|
|
|
|
|
"decoded": {
|
|
|
|
|
"appData": {
|
|
|
|
|
"deviceRole": "3",
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assert decoder._extract_device_role(payload, "meshcore/BOS/test/packets"
|
|
|
|
|
) == "room"
|
|
|
|
|
|
|
|
|
|
|
2026-03-14 21:33:28 -04:00
|
|
|
def test_extract_device_role_from_explicit_nested_role_field():
|
|
|
|
|
payload = {
|
|
|
|
|
"payload": {
|
|
|
|
|
"decoded": {
|
|
|
|
|
"appData": {
|
|
|
|
|
"role": "repeater",
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
assert decoder._extract_device_role(payload, "meshcore/BOS/test/packets"
|
|
|
|
|
) == "repeater"
|
|
|
|
|
|
|
|
|
|
|
2026-03-11 15:01:57 -04:00
|
|
|
def test_apply_meta_role_accepts_numeric_string_role_codes():
|
|
|
|
|
debug = {"device_role": None}
|
|
|
|
|
|
|
|
|
|
decoder._apply_meta_role(debug, {"deviceRole": "2"})
|
|
|
|
|
|
|
|
|
|
assert debug["device_role"] == "repeater"
|