From 7f85dd9426856a1ad7428270ef9ce73909c9f04f Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Mon, 15 Jun 2026 09:50:45 -0500 Subject: [PATCH] Persist the expert_mode preference the frontend already writes --- esphome_device_builder/models/preferences.py | 4 ++++ tests/test_config_controller.py | 9 +++++++++ 2 files changed, 13 insertions(+) diff --git a/esphome_device_builder/models/preferences.py b/esphome_device_builder/models/preferences.py index c0be862cc..9c397f85c 100644 --- a/esphome_device_builder/models/preferences.py +++ b/esphome_device_builder/models/preferences.py @@ -46,6 +46,10 @@ class UserPreferences(DataClassORJSONMixin): navigator_visible: bool = True yaml_diff_button: bool = False + # Frontend "Expert Mode" master switch: gates the editor diff view, the + # device-navigator search box, and the command-palette YAML content search. + expert_mode: bool = False + # Table view settings table_page_size: int = 25 table_column_visibility: dict[str, bool] = field(default_factory=dict) diff --git a/tests/test_config_controller.py b/tests/test_config_controller.py index 5ac219cef..97c5faa57 100644 --- a/tests/test_config_controller.py +++ b/tests/test_config_controller.py @@ -747,6 +747,15 @@ async def test_set_prefs_merges_partial_update(tmp_path: Path) -> None: assert controller.prefs.snapshot() == result +async def test_set_prefs_persists_expert_mode(tmp_path: Path) -> None: + """The frontend's Expert Mode toggle round-trips through set/get prefs.""" + controller = _make_controller(tmp_path) + + result = await controller.set_prefs(expert_mode=True) + assert result.expert_mode is True + assert (await controller.get_prefs()).expert_mode is True + + async def test_set_prefs_concurrent_updates_do_not_lose_writes(tmp_path: Path) -> None: """Partial updates of distinct fields all survive on the RAM-canonical store.