mirror of
https://github.com/home-assistant/core.git
synced 2026-08-24 10:13:52 -05:00
Do not use a naive datetime.now() in BraviaTV (#179806)
This commit is contained in:
@@ -23,6 +23,7 @@ from homeassistant.core import HomeAssistant
|
||||
from homeassistant.exceptions import ConfigEntryAuthFailed, HomeAssistantError
|
||||
from homeassistant.helpers.debounce import Debouncer
|
||||
from homeassistant.helpers.update_coordinator import DataUpdateCoordinator, UpdateFailed
|
||||
from homeassistant.util import dt as dt_util
|
||||
|
||||
from .const import (
|
||||
CONF_NICKNAME,
|
||||
@@ -240,11 +241,13 @@ class BraviaTVCoordinator(DataUpdateCoordinator[None]):
|
||||
self.source = None
|
||||
if start_datetime := playing_info.get("startDateTime"):
|
||||
start_datetime = datetime.fromisoformat(start_datetime)
|
||||
current_datetime = datetime.now().replace(tzinfo=start_datetime.tzinfo) # pylint: disable=home-assistant-enforce-naive-now
|
||||
self.media_position = int(
|
||||
(current_datetime - start_datetime).total_seconds()
|
||||
)
|
||||
self.media_position_updated_at = datetime.now() # pylint: disable=home-assistant-enforce-naive-now
|
||||
if start_datetime.tzinfo is None:
|
||||
start_datetime = start_datetime.replace(
|
||||
tzinfo=dt_util.get_default_time_zone()
|
||||
)
|
||||
now = dt_util.utcnow()
|
||||
self.media_position = int((now - start_datetime).total_seconds())
|
||||
self.media_position_updated_at = now
|
||||
else:
|
||||
self.media_position = None
|
||||
self.media_position_updated_at = None
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
"""Test the BraviaTV coordinator."""
|
||||
|
||||
from datetime import UTC, datetime
|
||||
from unittest.mock import AsyncMock
|
||||
|
||||
import pytest
|
||||
|
||||
from homeassistant.components.braviatv.const import CONF_USE_PSK, DOMAIN
|
||||
from homeassistant.components.braviatv.coordinator import BraviaTVCoordinator
|
||||
from homeassistant.const import CONF_HOST, CONF_MAC, CONF_PIN
|
||||
from homeassistant.core import HomeAssistant
|
||||
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"start_datetime",
|
||||
[
|
||||
"2026-08-22T12:00:00", # naive, treated as local time (CEST UTC+2)
|
||||
"2026-08-22T12:00:00+02:00", # aware
|
||||
],
|
||||
)
|
||||
@pytest.mark.freeze_time("2026-08-22T12:00:00+00:00")
|
||||
async def test_async_update_playing(
|
||||
hass: HomeAssistant,
|
||||
start_datetime: str,
|
||||
) -> None:
|
||||
"""Test updating playing info with a start datetime."""
|
||||
await hass.config.async_set_time_zone("Europe/Warsaw")
|
||||
config_entry = MockConfigEntry(
|
||||
domain=DOMAIN,
|
||||
data={
|
||||
CONF_HOST: "localhost",
|
||||
CONF_MAC: "AA:BB:CC:DD:EE:FF",
|
||||
CONF_USE_PSK: True,
|
||||
CONF_PIN: "12345qwerty",
|
||||
},
|
||||
)
|
||||
client = AsyncMock()
|
||||
client.get_playing_info.return_value = {"startDateTime": start_datetime}
|
||||
coordinator = BraviaTVCoordinator(hass, config_entry, client)
|
||||
|
||||
await coordinator.async_update_playing()
|
||||
|
||||
assert coordinator.media_position == 7200
|
||||
assert coordinator.media_position_updated_at == datetime(
|
||||
2026, 8, 22, 12, 0, 0, tzinfo=UTC
|
||||
)
|
||||
Reference in New Issue
Block a user