- Serve GET /settings as JSON by removing duplicate HTML route (use /settings/page for the standalone UI). - Save global_brightness via PUT; broadcast to connected drivers; push saved level when outbound WS connects. - Zones UI loads brightness from GET /settings only (no localStorage). - Bump led-driver submodule for settings.save on brightness with save flag. - Extend API doc and endpoint tests for global_brightness. Co-authored-by: Cursor <cursoragent@cursor.com>
Tests
Tests for the LED Controller project live under tests/ (pytest + legacy scripts).
Layout
| Path | Role |
|---|---|
test_endpoints.py |
HTTP endpoint checks (LED_CONTROLLER_RUN_DEVICE_ENDPOINT_TESTS=1); test_zones / test_zone_edit_workflow hit /zones |
test_endpoints_pytest.py |
Pytest-style endpoint coverage |
test_browser.py |
Selenium UI flows (set LED_CONTROLLER_RUN_BROWSER_TESTS=1 to run; uses test_zones_ui and legacy tabsManager JS aliases) |
test_pattern_ota_send.py |
Pattern OTA / Wi-Fi send helpers |
tcp_test_server.py, async_tcp_server.py |
TCP test doubles for driver protocol |
udp_server.py |
UDP discovery / hello test listener (port 8766) |
ws.py |
WebSocket client checks |
p2p.py |
ESP-NOW–related helpers / experiments |
web.py |
Local dev static server (not the main app) |
conftest.py |
Pytest fixtures |
models/ |
Model unit tests (run_all.py, test_zone.py, …) |
Running tests
Pytest (recommended)
From the project root (with dev dependencies installed):
pipenv run pytest tests/ -q
Browser tests (real browser)
python tests/test_browser.py
Requires Selenium, Chrome/Chromium, and a matching ChromeDriver.
Model tests only
python tests/models/run_all.py
Local static server
tests/web.py serves files for quick UI experiments; it is not the Microdot app. For the real server use pipenv run run from the repo root.