From 26cb588ee2d54088d5750d9492057d8a7fe30592 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Thu, 5 Aug 2021 12:47:14 -0500 Subject: [PATCH] Handle empty software version when setting up HomeKit (#54068) Fixes #54059 Fixes #54024 --- .../components/homekit/accessories.py | 8 +++--- tests/components/homekit/test_accessories.py | 27 +++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/homeassistant/components/homekit/accessories.py b/homeassistant/components/homekit/accessories.py index e86135fb9a1..c1f5078e2d6 100644 --- a/homeassistant/components/homekit/accessories.py +++ b/homeassistant/components/homekit/accessories.py @@ -228,17 +228,17 @@ class HomeAccessory(Accessory): self.config = config or {} domain = split_entity_id(entity_id)[0].replace("_", " ") - if ATTR_MANUFACTURER in self.config: + if self.config.get(ATTR_MANUFACTURER) is not None: manufacturer = self.config[ATTR_MANUFACTURER] - elif ATTR_INTEGRATION in self.config: + elif self.config.get(ATTR_INTEGRATION) is not None: manufacturer = self.config[ATTR_INTEGRATION].replace("_", " ").title() else: manufacturer = f"{MANUFACTURER} {domain}".title() - if ATTR_MODEL in self.config: + if self.config.get(ATTR_MODEL) is not None: model = self.config[ATTR_MODEL] else: model = domain.title() - if ATTR_SW_VERSION in self.config: + if self.config.get(ATTR_SW_VERSION) is not None: sw_version = format_sw_version(self.config[ATTR_SW_VERSION]) else: sw_version = __version__ diff --git a/tests/components/homekit/test_accessories.py b/tests/components/homekit/test_accessories.py index 9b70bf4830e..5904d1c11c6 100644 --- a/tests/components/homekit/test_accessories.py +++ b/tests/components/homekit/test_accessories.py @@ -41,6 +41,7 @@ from homeassistant.const import ( STATE_ON, STATE_UNAVAILABLE, __version__, + __version__ as hass_version, ) from homeassistant.helpers.event import TRACK_STATE_CHANGE_CALLBACKS @@ -130,6 +131,7 @@ async def test_home_accessory(hass, hk_driver): serv.get_characteristic(CHAR_SERIAL_NUMBER).value == "light.accessory_that_exceeds_the_maximum_maximum_maximum_maximum" ) + assert serv.get_characteristic(CHAR_FIRMWARE_REVISION).value == "0.4.3" hass.states.async_set(entity_id, "on") await hass.async_block_till_done() @@ -157,6 +159,31 @@ async def test_home_accessory(hass, hk_driver): assert serv.get_characteristic(CHAR_MODEL).value == "Test Model" +async def test_accessory_with_missing_basic_service_info(hass, hk_driver): + """Test HomeAccessory class.""" + entity_id = "sensor.accessory" + hass.states.async_set(entity_id, "on") + acc = HomeAccessory( + hass, + hk_driver, + "Home Accessory", + entity_id, + 3, + { + ATTR_MODEL: None, + ATTR_MANUFACTURER: None, + ATTR_SW_VERSION: None, + ATTR_INTEGRATION: None, + }, + ) + serv = acc.get_service(SERV_ACCESSORY_INFO) + assert serv.get_characteristic(CHAR_NAME).value == "Home Accessory" + assert serv.get_characteristic(CHAR_MANUFACTURER).value == "Home Assistant Sensor" + assert serv.get_characteristic(CHAR_MODEL).value == "Sensor" + assert serv.get_characteristic(CHAR_SERIAL_NUMBER).value == entity_id + assert serv.get_characteristic(CHAR_FIRMWARE_REVISION).value == hass_version + + async def test_battery_service(hass, hk_driver, caplog): """Test battery service.""" entity_id = "homekit.accessory"