From 90f7d0ddb9140dae92c446dd7274a7e27abd4f3d Mon Sep 17 00:00:00 2001 From: InTheDaylight14 <67400055+InTheDaylight14@users.noreply.github.com> Date: Wed, 21 Dec 2022 15:20:15 -0500 Subject: [PATCH] fix: handle battery range attributes NoneType (#453) closes #450 --- custom_components/tesla_custom/sensor.py | 9 +++-- tests/test_sensor.py | 45 +++++++++++++++++++----- 2 files changed, 42 insertions(+), 12 deletions(-) diff --git a/custom_components/tesla_custom/sensor.py b/custom_components/tesla_custom/sensor.py index b80f3c2e..77fbca69 100644 --- a/custom_components/tesla_custom/sensor.py +++ b/custom_components/tesla_custom/sensor.py @@ -325,9 +325,12 @@ def extra_state_attributes(self): est_battery_range = self._car._vehicle_data.get("charge_state", {}).get( "est_battery_range" ) - est_battery_range_km = DistanceConverter.convert( - est_battery_range, LENGTH_MILES, LENGTH_KILOMETERS - ) + if est_battery_range is not None: + est_battery_range_km = DistanceConverter.convert( + est_battery_range, LENGTH_MILES, LENGTH_KILOMETERS + ) + else: + est_battery_range_km = None return { "est_battery_range_miles": est_battery_range, diff --git a/tests/test_sensor.py b/tests/test_sensor.py index 101d4950..6a5f75d6 100644 --- a/tests/test_sensor.py +++ b/tests/test_sensor.py @@ -387,15 +387,42 @@ async def test_range_value(hass: HomeAssistant) -> None: assert state.attributes.get(ATTR_DEVICE_CLASS) == SensorDeviceClass.DISTANCE assert state.attributes.get(ATTR_STATE_CLASS) == SensorStateClass.MEASUREMENT - assert ( - state.attributes.get("est_battery_range_miles") - == car_mock_data.VEHICLE_DATA["charge_state"]["est_battery_range"] - ) - est_range_km = DistanceConverter.convert( - car_mock_data.VEHICLE_DATA["charge_state"]["est_battery_range"], - LENGTH_MILES, - LENGTH_KILOMETERS, - ) + est_range_miles = car_mock_data.VEHICLE_DATA["charge_state"]["est_battery_range"] + + assert state.attributes.get("est_battery_range_miles") == est_range_miles + + if est_range_miles is not None: + est_range_km = DistanceConverter.convert( + car_mock_data.VEHICLE_DATA["charge_state"]["est_battery_range"], + LENGTH_MILES, + LENGTH_KILOMETERS, + ) + else: + est_range_km = None + + assert state.attributes.get("est_battery_range_km") == est_range_km + + +async def test_range_attributes_not_available(hass: HomeAssistant) -> None: + """Tests range attributes handle None correctly.""" + car_mock_data.VEHICLE_DATA["charge_state"]["est_battery_range"] = None + + await setup_platform(hass, SENSOR_DOMAIN) + + state = hass.states.get("sensor.my_model_s_range") + + est_range_miles = car_mock_data.VEHICLE_DATA["charge_state"]["est_battery_range"] + + assert state.attributes.get("est_battery_range_miles") == est_range_miles + + if est_range_miles is not None: + est_range_km = DistanceConverter.convert( + car_mock_data.VEHICLE_DATA["charge_state"]["est_battery_range"], + LENGTH_MILES, + LENGTH_KILOMETERS, + ) + else: + est_range_km = None assert state.attributes.get("est_battery_range_km") == est_range_km