Avoid a naive datetime.now() in huawei_lte (#178605)

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
soldier2008
2026-08-14 11:18:55 +02:00
committed by GitHub
co-authored by Martin Hjelmare
parent f4f71749e7
commit 35b284cb92
2 changed files with 35 additions and 3 deletions
@@ -28,6 +28,7 @@ from homeassistant.core import HomeAssistant
from homeassistant.helpers.entity import Entity
from homeassistant.helpers.entity_platform import AddConfigEntryEntitiesCallback
from homeassistant.helpers.typing import StateType
from homeassistant.util import dt as dt_util
from . import HuaweiLteConfigEntry, Router
from .const import (
@@ -76,11 +77,10 @@ def format_last_reset_elapsed_seconds(value: str | None) -> datetime | None:
if value is None:
return None
try:
last_reset = datetime.now() - timedelta(seconds=int(value)) # pylint: disable=home-assistant-enforce-naive-now
last_reset.replace(microsecond=0)
elapsed = timedelta(seconds=int(value))
except ValueError:
return None
return last_reset
return (dt_util.utcnow() - elapsed).replace(microsecond=0)
def format_ipv6(value: StateType) -> tuple[StateType, str | None]:
@@ -1,5 +1,8 @@
"""Huawei LTE sensor tests."""
from datetime import timedelta
from freezegun.api import FrozenDateTimeFactory
import pytest
from homeassistant.components.huawei_lte import sensor
@@ -7,6 +10,7 @@ from homeassistant.const import (
SIGNAL_STRENGTH_DECIBELS,
SIGNAL_STRENGTH_DECIBELS_MILLIWATT,
)
from homeassistant.util import dt as dt_util
@pytest.mark.parametrize(
@@ -22,3 +26,31 @@ from homeassistant.const import (
def test_format_default(value, expected) -> None:
"""Test that default formatter copes with expected values."""
assert sensor.format_default(value) == expected
@pytest.mark.parametrize(
("value", "expected_elapsed"),
[
("0", timedelta(0)),
("90", timedelta(seconds=90)),
("86400", timedelta(days=1)),
],
)
def test_format_last_reset_elapsed_seconds(
freezer: FrozenDateTimeFactory, value: str, expected_elapsed: timedelta
) -> None:
"""Test elapsed seconds are turned into an aware, truncated reset time."""
freezer.move_to("2026-01-02T03:04:05.678901+00:00")
result = sensor.format_last_reset_elapsed_seconds(value)
assert result is not None
assert result.tzinfo is not None
assert result.microsecond == 0
assert result == dt_util.utcnow().replace(microsecond=0) - expected_elapsed
@pytest.mark.parametrize("value", [None, "", "not a number"])
def test_format_last_reset_elapsed_seconds_invalid(value: str | None) -> None:
"""Test values that cannot be converted are ignored."""
assert sensor.format_last_reset_elapsed_seconds(value) is None