feat: standards polish — G7 sensor translation_key naming + entity strings, G10 protocol-push device identity on the registry card, G12 unrecorded poll-driven attributes (media player DAG internals + sensors), G14 async_redact_data with an explicit redaction list behind the marker scan (t30)
This commit is contained in:
1 parent
194a97ce34
commit
2e70587871
8 files changed
+178
-5
No files matched your search
@@ -102,7 +102,7 @@ def make_player(modules, manager=None, jellyfin_entity=None, options=None):
|
||||
mp_module = modules["media_player"]
|
||||
if manager is None:
|
||||
manager = make_manager()
|
||||
entry = SimpleNamespace(options={}, data={}, title="mdarcy")
|
||||
entry = SimpleNamespace(entry_id="e1", options={}, data={}, title="mdarcy")
|
||||
manager.entry = entry
|
||||
|
||||
def _set_option(key, value):
|
||||
@@ -754,6 +754,69 @@ class _SetupHass:
|
||||
self.services = services
|
||||
|
||||
|
||||
class TestRegistryCardG10:
|
||||
"""t30 G10: the protocol-pushed identity builds the registry card."""
|
||||
|
||||
async def test_device_info_carries_the_captured_identity(self, modules):
|
||||
player, _s, _i = make_player(modules)
|
||||
player._manager.protocol_device_data = (
|
||||
"Living Room Shield", "Google", "SHIELD Android TV", "9.2"
|
||||
)
|
||||
|
||||
info = player.device_info
|
||||
|
||||
assert info["name"] == "Living Room Shield"
|
||||
assert info["manufacturer"] == "Google"
|
||||
assert info["model"] == "SHIELD Android TV"
|
||||
assert info["sw_version"] == "9.2"
|
||||
|
||||
async def test_fallback_card_before_capture(self, modules):
|
||||
player, _s, _i = make_player(modules)
|
||||
|
||||
info = player.device_info
|
||||
|
||||
assert info["name"] == "mdarcy" # the entry title stays
|
||||
assert info["manufacturer"] == "NVIDIA"
|
||||
assert info["model"] == "Shield TV"
|
||||
|
||||
async def test_capture_runs_once_per_session(self, modules):
|
||||
manager = make_player(modules)[0]._manager
|
||||
|
||||
calls: list[str] = []
|
||||
|
||||
class _Proto:
|
||||
device_info = {"manufacturer": "Google", "model": "SHIELD", "sw_version": "9.2"}
|
||||
|
||||
async def async_get_name_and_mac(self):
|
||||
calls.append("1")
|
||||
return "Living Room Shield", "aa:bb:cc:dd:ee:ff"
|
||||
|
||||
manager._protocol = _Proto()
|
||||
|
||||
await manager.async_capture_protocol_device_data()
|
||||
await manager.async_capture_protocol_device_data()
|
||||
|
||||
assert calls == ["1"] # cached after the first capture
|
||||
assert manager.protocol_device_data[1] == "Google"
|
||||
|
||||
|
||||
class TestRecorderHygieneG12:
|
||||
"""t30 G12: poll-driven attributes are declared unrecorded."""
|
||||
|
||||
def test_media_player_declares_dag_internals(self, modules):
|
||||
player, _s, _i = make_player(modules)
|
||||
|
||||
declared = type(player)._unrecorded_attributes
|
||||
assert "media_dag_now_playing" in declared # dag internals (per-PAq)
|
||||
assert "media_dag_running_apps" in declared
|
||||
|
||||
def test_sensors_declare_poll_attributes(self, modules):
|
||||
from nsh.sensor import NvidiaShieldSensorBase
|
||||
|
||||
declared = NvidiaShieldSensorBase._unrecorded_attributes
|
||||
assert {"app_id", "app_name", "playback_state"} <= set(declared)
|
||||
|
||||
|
||||
class TestChannelDigitDelayConsumed:
|
||||
"""t26 F3: a non-default digit delay reaches the sequence's sleep."""
|
||||
|
||||
|
||||
Reference in new issue
Block a user