"""Tests for the /wind/oscillation/vs/0 swing fallback helper in climate.py (issue #126). `_oscillation_swing` is a pure module-level function, like `_temps_vs_item` in test_climate_temperature_fallback.py -- testable directly without a coordinator/entity. This covers the fallback-selection logic that the registry-level "no unbound hrefs" test in test_golden_regression.py doesn't reach: newer WindFree firmware reports no /wind/direction/vs/0 at all, so swing_mode/swing_modes would silently be None/empty without this fallback. """ from custom_components.localthings.climate import _oscillation_swing def test_oscillation_swing_off_when_both_fixed(): assert _oscillation_swing({'vertical': 'Fix', 'horizontal': 'Fix'}) == 'off' def test_oscillation_swing_vertical_only(): assert _oscillation_swing({'vertical': 'Swing', 'horizontal': 'Fix'}) == 'vertical' def test_oscillation_swing_horizontal_only(): assert _oscillation_swing({'vertical': 'Fix', 'horizontal': 'Swing'}) == 'horizontal' def test_oscillation_swing_both(): assert _oscillation_swing({'vertical': 'Swing', 'horizontal': 'Swing'}) == 'both' def test_oscillation_swing_none_when_resource_absent(): """Boards with /wind/direction/vs/0 instead don't populate this resource at all -- callers must fall through cleanly, not raise.""" assert _oscillation_swing({}) is None