Propagate timezone setting to host in OS 16.2 and newer (#6099)

* Propagate timezone setting to host in OS 16.2 and newer

With home-assistant/operating-system#4224, timezone setting in OS can be
peristently set in HAOS as well. Propagate the timezone configured in
Supervisor config (which can be changed through general system settings
in HA Core) through the DBus API for setting the timezone.

* Persist timezone also when it's been obtained from Whoami

* Suppress pylint fixme error
This commit is contained in:
Jan Čermák
2025-08-20 01:30:57 +02:00
committed by GitHub
parent 4109c15a36
commit b49ce96df8
7 changed files with 112 additions and 1 deletions

View File

@@ -1,9 +1,12 @@
"""Test host control."""
import pytest
from supervisor.coresys import CoreSys
from tests.dbus_service_mocks.base import DBusServiceMock
from tests.dbus_service_mocks.hostname import Hostname as HostnameService
from tests.dbus_service_mocks.timedate import TimeDate as TimeDateService
async def test_set_hostname(
@@ -20,3 +23,33 @@ async def test_set_hostname(
assert hostname_service.SetStaticHostname.calls == [("test", False)]
await hostname_service.ping()
assert coresys.dbus.hostname.hostname == "test"
@pytest.mark.parametrize("os_available", ["16.2"], indirect=True)
async def test_set_timezone(
coresys: CoreSys,
all_dbus_services: dict[str, DBusServiceMock | dict[str, DBusServiceMock]],
os_available: str,
):
"""Test set timezone."""
timedate_service: TimeDateService = all_dbus_services["timedate"]
timedate_service.SetTimezone.calls.clear()
assert coresys.dbus.timedate.timezone == "Etc/UTC"
await coresys.host.control.set_timezone("Europe/Prague")
assert timedate_service.SetTimezone.calls == [("Europe/Prague", False)]
@pytest.mark.parametrize("os_available", ["16.1"], indirect=True)
async def test_set_timezone_unsupported(
coresys: CoreSys,
all_dbus_services: dict[str, DBusServiceMock | dict[str, DBusServiceMock]],
os_available: str,
):
"""Test DBus call is not made when OS doesn't support it."""
timedate_service: TimeDateService = all_dbus_services["timedate"]
timedate_service.SetTimezone.calls.clear()
await coresys.host.control.set_timezone("Europe/Prague")
assert timedate_service.SetTimezone.calls == []