"""Tests for the /temperatures/vs/0 fallback helper in climate.py (PR #36). `_temps_vs_item` is a pure module-level function (plain dict in, plain dict out) with no coordinator/entity dependency, so -- like select.py's `_display` in test_select_display.py -- it's testable directly even though the LocalThingsClimate entity itself needs a coordinator/hass fixture to exercise. This covers the actual fallback-selection logic that the registry-level "no unbound hrefs" tests in test_airconditioner_capabilities.py don't reach: TP1X-class firmware has no OCF-standard /temperature/current+desired pair, so current_temperature/target_temperature would silently be None without this fallback. """ from custom_components.localthings.climate import _temps_vs_item def test_temps_vs_item_returns_first_item(): rep = { 'x.com.samsung.da.items': [ {'x.com.samsung.da.current': '17.0', 'x.com.samsung.da.desired': '25.0'}, ], } assert _temps_vs_item(rep) == { 'x.com.samsung.da.current': '17.0', 'x.com.samsung.da.desired': '25.0', } def test_temps_vs_item_empty_when_items_missing(): """OCF-pair devices don't populate /temperatures/vs/0's items at all -- callers must fall through to the OCF hrefs cleanly, not raise.""" assert _temps_vs_item({}) == {} def test_temps_vs_item_empty_when_items_is_empty_list(): assert _temps_vs_item({'x.com.samsung.da.items': []}) == {} def test_temps_vs_item_empty_when_items_entry_is_not_a_dict(): assert _temps_vs_item({'x.com.samsung.da.items': ['not-a-dict']}) == {}