fix: resolve test pollution from freeze_saves and fix os_listener toggle
All checks were successful
Lint & Test / test (push) Successful in 27s

- Add unfreeze_saves() to base_store.py and call it in e2e cleanup.
  The backup restore flow calls freeze_saves() which sets a module-level
  flag that silently disables all store _save() calls. Without reset,
  this poisoned all subsequent persistence tests (9 failures).
- Fix os_listener toggle to use toggle-switch/toggle-slider CSS classes
  instead of nonexistent switch/slider classes (was showing plain checkbox).
- Add mandatory test run to CLAUDE.md pre-commit checks.

All 341 tests now pass.
This commit is contained in:
2026-03-24 22:26:57 +03:00
parent ea5dc47641
commit 29fb944494
4 changed files with 16 additions and 4 deletions

View File

@@ -24,6 +24,12 @@ def freeze_saves() -> None:
logger.info("Store saves frozen — awaiting server restart")
def unfreeze_saves() -> None:
"""Re-enable store saves (used in tests to reset after restore flow)."""
global _saves_frozen
_saves_frozen = False
class EntityNotFoundError(ValueError):
"""Raised when an entity is not found in the store."""
pass

View File

@@ -381,9 +381,9 @@
<button type="button" class="hint-toggle" onclick="toggleHint(this)" title="?" data-i18n-aria-label="aria.hint">?</button>
</div>
<small class="input-hint" style="display:none" data-i18n="color_strip.notification.os_listener.hint">When enabled, this source automatically fires when a desktop notification appears (Windows toast / Linux D-Bus). Requires the app to have notification access permission.</small>
<label class="switch">
<label class="toggle-switch">
<input type="checkbox" id="css-editor-notification-os-listener">
<span class="slider"></span>
<span class="toggle-slider"></span>
</label>
</div>

View File

@@ -46,6 +46,11 @@ def client(_test_client):
def _clear_stores():
"""Remove all entities from all stores for test isolation."""
# Reset the saves-frozen flag that freeze_saves() sets during restore flows.
# Without this, subsequent tests can't persist data because _save() is a no-op.
from wled_controller.storage.base_store import unfreeze_saves
unfreeze_saves()
from wled_controller.api import dependencies as deps
store_clearers = [