Merge pull request #40 from jdejaegh/midnight_bug

Fix midnight bug: between 12AM and 1AM hourly forecast was shifted by +1 day
This commit is contained in:
Jules 2024-06-01 18:33:17 +02:00 committed by GitHub
commit 2562b2b733
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
6 changed files with 3313 additions and 5 deletions

View file

@ -275,8 +275,8 @@ class IrmKmiCoordinator(TimestampDataUpdateCoordinator):
forecasts = list() forecasts = list()
day = datetime.now(tz=pytz.timezone('Europe/Brussels')).replace(hour=0, minute=0, second=0, microsecond=0) day = datetime.now(tz=pytz.timezone('Europe/Brussels')).replace(hour=0, minute=0, second=0, microsecond=0)
for f in data: for idx, f in enumerate(data):
if 'dateShow' in f: if 'dateShow' in f and idx > 0:
day = day + timedelta(days=1) day = day + timedelta(days=1)
hour = f.get('hour', None) hour = f.get('hour', None)

View file

@ -1,6 +1,6 @@
aiohttp==3.9.5 aiohttp==3.9.5
async-timeout==4.0.3 async-timeout==4.0.3
homeassistant==2024.5.5 homeassistant==2024.6.0b4
voluptuous==0.13.1 voluptuous==0.13.1
pytz==2024.1 pytz==2024.1
svgwrite==1.4.3 svgwrite==1.4.3

View file

@ -1,5 +1,5 @@
homeassistant==2024.5.5 homeassistant==2024.6.0b4
pytest pytest
pytest_homeassistant_custom_component==0.13.125 pytest_homeassistant_custom_component==0.13.128
freezegun freezegun
isort isort

File diff suppressed because it is too large Load diff

File diff suppressed because it is too large Load diff

View file

@ -141,6 +141,57 @@ def test_hourly_forecast() -> None:
assert result[8] == expected assert result[8] == expected
@freeze_time(datetime.fromisoformat('2024-05-31T01:50:00+02:00'))
def test_hourly_forecast_bis() -> None:
api_data = get_api_data("no-midnight-bug-31-05-2024T01-55.json").get('for', {}).get('hourly')
result = IrmKmiCoordinator.hourly_list_to_forecast(api_data)
assert isinstance(result, list)
times = ['2024-05-31T01:00:00+02:00', '2024-05-31T02:00:00+02:00', '2024-05-31T03:00:00+02:00',
'2024-05-31T04:00:00+02:00', '2024-05-31T05:00:00+02:00', '2024-05-31T06:00:00+02:00',
'2024-05-31T07:00:00+02:00', '2024-05-31T08:00:00+02:00', '2024-05-31T09:00:00+02:00']
actual = [f['datetime'] for f in result[:9]]
assert actual == times
@freeze_time(datetime.fromisoformat('2024-05-31T00:10:00+02:00'))
def test_hourly_forecast_midnight_bug() -> None:
# Related to https://github.com/jdejaegh/irm-kmi-ha/issues/38
api_data = get_api_data("midnight-bug-31-05-2024T00-13.json").get('for', {}).get('hourly')
result = IrmKmiCoordinator.hourly_list_to_forecast(api_data)
assert isinstance(result, list)
first = Forecast(
datetime='2024-05-31T00:00:00+02:00',
condition=ATTR_CONDITION_CLOUDY,
native_precipitation=0,
native_temperature=14,
native_templow=None,
native_wind_gust_speed=None,
native_wind_speed=10,
precipitation_probability=0,
wind_bearing=293,
native_pressure=1010,
is_daytime=False
)
assert result[0] == first
times = ['2024-05-31T00:00:00+02:00', '2024-05-31T01:00:00+02:00', '2024-05-31T02:00:00+02:00',
'2024-05-31T03:00:00+02:00', '2024-05-31T04:00:00+02:00', '2024-05-31T05:00:00+02:00',
'2024-05-31T06:00:00+02:00', '2024-05-31T07:00:00+02:00', '2024-05-31T08:00:00+02:00']
actual = [f['datetime'] for f in result[:9]]
assert actual == times
assert result[24]['datetime'] == '2024-06-01T00:00:00+02:00'
async def test_refresh_succeed_even_when_pollen_and_radar_fail( async def test_refresh_succeed_even_when_pollen_and_radar_fail(
hass: HomeAssistant, hass: HomeAssistant,
mock_config_entry: MockConfigEntry, mock_config_entry: MockConfigEntry,