test: capture golden baselines from existing descriptors

Generates regression oracle from DISHWASHER and REFRIGERATOR descriptors:
- tests/fixtures/golden/dishwasher.json: 21 state keys, 23 discovery entities
- tests/fixtures/golden/refrigerator.json: 26 state keys, 24 discovery entities
- tests/test_golden_regression.py: parametrized test that will turn green as
  Tasks 9-12 port capabilities into the new registry
This commit is contained in:
Marc Billow
2026-06-30 16:32:37 -05:00
parent 299719f727
commit d720b29a67
3 changed files with 137 additions and 0 deletions
+50
View File
@@ -0,0 +1,50 @@
{
"state_keys": [
"alarm_code",
"child_lock",
"child_lock_binary",
"completion_minutes",
"completion_time",
"delay_start_time",
"energy_kwh",
"filter_status",
"filter_usage",
"led_brightness",
"led_night_light",
"machine_state",
"power_state",
"power_state_binary",
"power_watts",
"progress",
"progress_percentage",
"remote_control",
"remote_control_binary",
"sound_mode",
"water_liters"
],
"discovery_unique_ids": [
"samsung_dishwasher_alarm_code",
"samsung_dishwasher_child_lock_active",
"samsung_dishwasher_completion_minutes",
"samsung_dishwasher_completion_time",
"samsung_dishwasher_delay_start_time",
"samsung_dishwasher_energy_kwh",
"samsung_dishwasher_filter_status",
"samsung_dishwasher_filter_usage",
"samsung_dishwasher_led_brightness_select",
"samsung_dishwasher_led_night_light_switch",
"samsung_dishwasher_machine_state",
"samsung_dishwasher_pause",
"samsung_dishwasher_power_state",
"samsung_dishwasher_power_watts",
"samsung_dishwasher_progress",
"samsung_dishwasher_progress_percentage",
"samsung_dishwasher_remote_control_enabled",
"samsung_dishwasher_running",
"samsung_dishwasher_sound_mode",
"samsung_dishwasher_sound_mode_select",
"samsung_dishwasher_start",
"samsung_dishwasher_stop",
"samsung_dishwasher_water_liters"
]
}
+56
View File
@@ -0,0 +1,56 @@
{
"state_keys": [
"alarm_code",
"any_door_open",
"autofill",
"beverage_zone_mode",
"cabinet_light",
"cabinet_light_on",
"door_freezer_open",
"door_fridge_open",
"energy_kwh",
"filter_status",
"filter_usage",
"firmware_update",
"freezer_setpoint_f",
"freezer_temp_f",
"fridge_setpoint_f",
"fridge_temp_f",
"ice1_making_status",
"ice1_on",
"ice1_state",
"ice2_making_status",
"ice2_type",
"ice_maker_enabled",
"power_watts",
"rapid_freezing",
"rapid_fridge",
"sabbath_mode"
],
"discovery_unique_ids": [
"samsung_refrigerator_alarm_code",
"samsung_refrigerator_autofill_switch",
"samsung_refrigerator_bzone_mode_select",
"samsung_refrigerator_cabinet_light_switch",
"samsung_refrigerator_door_freezer_open",
"samsung_refrigerator_door_fridge_open",
"samsung_refrigerator_energy_kwh",
"samsung_refrigerator_filter_status",
"samsung_refrigerator_filter_usage",
"samsung_refrigerator_firmware_update",
"samsung_refrigerator_freezer_setpoint_f",
"samsung_refrigerator_freezer_setpoint_num",
"samsung_refrigerator_freezer_temp_f",
"samsung_refrigerator_fridge_setpoint_f",
"samsung_refrigerator_fridge_setpoint_num",
"samsung_refrigerator_fridge_temp_f",
"samsung_refrigerator_ice1_making_status",
"samsung_refrigerator_ice1_on",
"samsung_refrigerator_ice1_switch_switch",
"samsung_refrigerator_ice2_making_status",
"samsung_refrigerator_ice2_type_select",
"samsung_refrigerator_power_watts",
"samsung_refrigerator_rapid_freezing_switch",
"samsung_refrigerator_rapid_fridge_switch"
]
}
+31
View File
@@ -0,0 +1,31 @@
import json
from pathlib import Path
import pytest
GOLDEN = Path(__file__).parent / 'fixtures' / 'golden'
def _new_state_and_uids(name, resources):
from samsung_appliance.registry.registry import CAPABILITIES
from samsung_appliance.registry.discovery import discover
from samsung_appliance.registry.adapter import build_runtime_descriptor
bound = discover(resources, CAPABILITIES)
rd = build_runtime_descriptor(
bound, topic_prefix=f'samsung_{name}', ha_prefix='homeassistant',
device_name=name.title(), model='M', name=name, default_port=49154)
state = rd.flatten(resources)
uids = [json.loads(p)['unique_id'] for _, p in rd.discovery_payloads]
return sorted(state.keys()), sorted(uids)
@pytest.mark.parametrize('name,ip', [
('dishwasher', '10.0.0.129'),
('refrigerator', '10.0.0.254'),
])
def test_registry_reproduces_golden_state_keys(name, ip, request):
resources = json.load(open(f'local-tools/dumps/{ip}.json'))['resources']
golden = json.loads((GOLDEN / f'{name}.json').read_text())
state_keys, _ = _new_state_and_uids(name, resources)
missing = set(golden['state_keys']) - set(state_keys)
assert not missing, f"registry missing state keys: {sorted(missing)}"