# 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): ```bash pipenv run pytest tests/ -q ``` ### Browser tests (real browser) ```bash python tests/test_browser.py ``` Requires **Selenium**, Chrome/Chromium, and a matching **ChromeDriver**. ### Model tests only ```bash 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.