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:
+50
@@ -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
@@ -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"
|
||||
]
|
||||
}
|
||||
@@ -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)}"
|
||||
Reference in New Issue
Block a user