Fix language setting causing sensor to fail. Fix #10

This commit is contained in:
Jules 2024-02-25 14:19:49 +01:00
parent 274e53a9ca
commit e1c2e8a659
Signed by: jdejaegh
GPG key ID: 99D6D184CA66933A
3 changed files with 30 additions and 4 deletions

View file

@ -65,6 +65,6 @@ class IrmKmiWarning(CoordinatorEntity, BinarySensorEntity):
warning['is_active'] = warning.get('starts_at') < now < warning.get('ends_at') warning['is_active'] = warning.get('starts_at') < now < warning.get('ends_at')
attrs["active_warnings_friendly_names"] = ", ".join([warning['friendly_name'] for warning in attrs['warnings'] attrs["active_warnings_friendly_names"] = ", ".join([warning['friendly_name'] for warning in attrs['warnings']
if warning['is_active']]) if warning['is_active'] and warning['friendly_name'] != ''])
return attrs return attrs

View file

@ -56,7 +56,6 @@ class IrmKmiCoordinator(DataUpdateCoordinator):
""" """
if (zone := self.hass.states.get(self._zone)) is None: if (zone := self.hass.states.get(self._zone)) is None:
raise UpdateFailed(f"Zone '{self._zone}' not found") raise UpdateFailed(f"Zone '{self._zone}' not found")
try: try:
# Note: asyncio.TimeoutError and aiohttp.ClientError are already # Note: asyncio.TimeoutError and aiohttp.ClientError are already
# handled by the data update coordinator. # handled by the data update coordinator.
@ -371,13 +370,14 @@ class IrmKmiCoordinator(DataUpdateCoordinator):
except TypeError: except TypeError:
level = None level = None
lang = self.hass.config.language if self.hass.config.language in LANGS else 'en'
result.append( result.append(
WarningData( WarningData(
slug=SLUG_MAP.get(warning_id, 'unknown'), slug=SLUG_MAP.get(warning_id, 'unknown'),
id=warning_id, id=warning_id,
level=level, level=level,
friendly_name=data.get('warningType', {}).get('name', {}).get(self.hass.config.language), friendly_name=data.get('warningType', {}).get('name', {}).get(lang, ''),
text=data.get('text', {}).get(self.hass.config.language), text=data.get('text', {}).get(lang, ''),
starts_at=start, starts_at=start,
ends_at=end ends_at=end
) )

View file

@ -30,3 +30,29 @@ async def test_warning_data(
assert w['is_active'] assert w['is_active']
assert warning.extra_state_attributes['active_warnings_friendly_names'] == "Fog, Ice or snow" assert warning.extra_state_attributes['active_warnings_friendly_names'] == "Fog, Ice or snow"
@freeze_time(datetime.fromisoformat('2024-01-12T07:55:00+01:00'))
async def test_warning_data(
hass: HomeAssistant,
mock_config_entry: MockConfigEntry
) -> None:
# When language is unknown, default to english setting
hass.config.language = "foo"
api_data = get_api_data("be_forecast_warning.json")
coordinator = IrmKmiCoordinator(hass, mock_config_entry)
result = coordinator.warnings_from_data(api_data.get('for', {}).get('warning'))
coordinator.data = {'warnings': result}
warning = IrmKmiWarning(coordinator, mock_config_entry)
warning.hass = hass
assert warning.is_on
assert len(warning.extra_state_attributes['warnings']) == 2
for w in warning.extra_state_attributes['warnings']:
assert w['is_active']
assert warning.extra_state_attributes['active_warnings_friendly_names'] == "Fog, Ice or snow"