mirror of
https://github.com/home-assistant/core.git
synced 2026-08-24 10:13:52 -05:00
Avoid a naive datetime.now() in huawei_lte (#178605)
Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
This commit is contained in:
co-authored by
Martin Hjelmare
parent
f4f71749e7
commit
35b284cb92
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user