"""Tests for the read-only cooktop capability profile.""" from custom_components.localthings.registry.adapter import flatten from custom_components.localthings.registry.by_type import cooktop from custom_components.localthings.registry.capabilities.cooktop import ( COOKTOP_MODE, ) from custom_components.localthings.registry.discovery import discover from tests.conftest import _load_device def _state(resources): bound = discover( resources, cooktop.REGISTRY.capabilities, cooktop.REGISTRY.pattern_capabilities, ) return flatten(bound, resources) def test_real_cooktop_fixture_has_expected_idle_state(): state = _state(_load_device('cooktop')) assert state['power_state'] is True assert state['any_burner_active'] is False assert state['burner_0_state'] == 'Ready' assert state['burner_5_state'] == 'Ready' assert state['main_timer_state'] == 'Ready' assert state['main_timer_current'] == 0 assert state['cloud_connected'] is True assert state['paired_hood_connected'] is False assert state['paired_hood_power'] is False assert state['paired_hood_fan_speed'] == 0 assert state['paired_hood_light'] is False def test_run_operation_marks_any_burner_active(): resources = _load_device('cooktop') options = resources['/mode/vs/0']['x.com.samsung.da.options'] options[options.index('OperationState3_Ready')] = 'OperationState3_Run' state = _state(resources) assert state['burner_3_state'] == 'Run' assert state['any_burner_active'] is True def test_cooktop_profile_has_no_write_functions(): """A local integration must never expose unverified remote ignition.""" descriptions = [ desc for capabilities in cooktop.REGISTRY.capabilities.values() for capability in capabilities for desc in capability.entities ] assert descriptions assert all(not hasattr(desc, 'write_fn') or desc.write_fn is None for desc in descriptions) def test_static_slot_superset_has_headroom_for_other_layouts(): keys = {desc.key for desc in COOKTOP_MODE.entities} assert {f'burner_{slot}_state' for slot in range(8)} <= keys def test_variant_slot_outside_na9300k_layout_is_discovered(): resources = _load_device('cooktop') resources['/mode/vs/0']['x.com.samsung.da.options'].append( 'OperationState7_Ready', ) state = _state(resources) assert state['burner_7_state'] == 'Ready' assert 'burner_2_state' not in state