From f86e85b931708772ec8dcc57271564ffe00e5040 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ab=C3=ADlio=20Costa?= Date: Thu, 24 Apr 2025 15:12:45 +0100 Subject: [PATCH] Use None for Unknown state in Whirlpool sensor (#143582) --- homeassistant/components/whirlpool/sensor.py | 4 +- .../whirlpool/snapshots/test_sensor.ambr | 2 - tests/components/whirlpool/test_sensor.py | 41 +++++++++++++++++++ 3 files changed, 43 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/whirlpool/sensor.py b/homeassistant/components/whirlpool/sensor.py index 60dd215ebb5..6b052834656 100644 --- a/homeassistant/components/whirlpool/sensor.py +++ b/homeassistant/components/whirlpool/sensor.py @@ -25,7 +25,7 @@ from .entity import WhirlpoolEntity SCAN_INTERVAL = timedelta(minutes=5) WASHER_TANK_FILL = { - 0: "unknown", + 0: None, 1: "empty", 2: "25", 3: "50", @@ -120,7 +120,7 @@ WASHER_SENSORS: tuple[WhirlpoolSensorEntityDescription, ...] = ( translation_key="whirlpool_tank", entity_registry_enabled_default=False, device_class=SensorDeviceClass.ENUM, - options=list(WASHER_TANK_FILL.values()), + options=[value for value in WASHER_TANK_FILL.values() if value], value_fn=lambda washer: WASHER_TANK_FILL.get(washer.get_dispense_1_level()), ), ) diff --git a/tests/components/whirlpool/snapshots/test_sensor.ambr b/tests/components/whirlpool/snapshots/test_sensor.ambr index a422fc02158..6a0465ba8b9 100644 --- a/tests/components/whirlpool/snapshots/test_sensor.ambr +++ b/tests/components/whirlpool/snapshots/test_sensor.ambr @@ -160,7 +160,6 @@ 'area_id': None, 'capabilities': dict({ 'options': list([ - 'unknown', 'empty', '25', '50', @@ -202,7 +201,6 @@ 'device_class': 'enum', 'friendly_name': 'Washer Detergent level', 'options': list([ - 'unknown', 'empty', '25', '50', diff --git a/tests/components/whirlpool/test_sensor.py b/tests/components/whirlpool/test_sensor.py index 92860b839d3..2424b37d6f5 100644 --- a/tests/components/whirlpool/test_sensor.py +++ b/tests/components/whirlpool/test_sensor.py @@ -299,3 +299,44 @@ async def test_washer_dryer_door_open_state( await trigger_attr_callback(hass, mock_instance) state = hass.states.get(entity_id) assert state.state == "running_maincycle" + + +@pytest.mark.parametrize( + ("entity_id", "mock_fixture", "mock_method_name", "values"), + [ + ( + "sensor.washer_detergent_level", + "mock_washer_api", + "get_dispense_1_level", + [ + (0, STATE_UNKNOWN), + (1, "empty"), + (2, "25"), + (3, "50"), + (4, "100"), + (5, "active"), + ], + ), + ], +) +@pytest.mark.usefixtures("entity_registry_enabled_by_default") +async def test_simple_enum_sensors( + hass: HomeAssistant, + entity_id: str, + mock_fixture: str, + mock_method_name: str, + values: list[tuple[int, str]], + request: pytest.FixtureRequest, +) -> None: + """Test simple enum sensors where state maps directly from a single API value.""" + await init_integration(hass) + + mock_instance = request.getfixturevalue(mock_fixture) + mock_method = getattr(mock_instance, mock_method_name) + for raw_value, expected_state in values: + mock_method.return_value = raw_value + + await trigger_attr_callback(hass, mock_instance) + state = hass.states.get(entity_id) + assert state is not None + assert state.state == expected_state