Persist an explicit timezone choice (timezone_configured)
The admin settings screen auto-set the browser zone whenever it loaded an empty timezone, guarded only by a per-mount ref. After an admin cleared the timezone (empty = API-host-local), the next open re-fetched "" and auto-set the browser zone again, so the empty choice could not persist. Add a twelfth settings field, timezone_configured (strict bool, default false), carried by the core settings table, the stored JSON document and the admin GET/PATCH. The screen now auto-sets only when the timezone is empty AND timezone_configured is false, patching the flag with the detected zone; saving the timezone field (including clearing it) also sends timezone_configured: true. Detection returning nothing sets nothing. Task: a0e7649c-58b0-4aa3-91b5-cf426e334a76 (release review TZ-001) Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -236,6 +236,25 @@ def test_from_options_reads_and_resiliently_defaults_timezone() -> None:
|
||||
)
|
||||
|
||||
|
||||
def test_settings_timezone_configured_defaults_false_and_is_strict() -> None:
|
||||
assert _settings.NestQuestSettings().timezone_configured is False
|
||||
assert _settings.NestQuestSettings.from_options({}).timezone_configured is False
|
||||
assert (
|
||||
_settings.NestQuestSettings.from_options(
|
||||
{"timezone_configured": True}
|
||||
).timezone_configured
|
||||
is True
|
||||
)
|
||||
for value in ("true", 1, None):
|
||||
with pytest.raises(ValueError, match="timezone_configured"):
|
||||
_settings.NestQuestSettings(timezone_configured=value)
|
||||
if value is not None:
|
||||
with pytest.raises(ValueError):
|
||||
_settings.NestQuestSettings.from_options(
|
||||
{"timezone_configured": value}
|
||||
)
|
||||
|
||||
|
||||
# --- the missed-sweep scheduler ----------------------------------------------
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user