* feat: add `adapt_only_on_ha_turn_on` to skip adapting externally turned-on lights When a light turns on from `off` via a source outside Home Assistant — a physical wall switch or a hub/manufacturer scene (e.g. Lutron) — and `detect_non_ha_changes` is enabled, Adaptive Lighting adapts the light on the resulting `off` → `on` event, overriding the brightness/color the external source just set. Disabling `detect_non_ha_changes` avoids this but also stops detection of manual changes to already-on lights; the two behaviors were coupled to a single flag. Add `adapt_only_on_ha_turn_on` (default `false`, requires `take_over_control`). When enabled, an `off` → `on` transition with no matching HA `light.turn_on` context is marked `manual_control` and left untouched, independent of `detect_non_ha_changes`, decoupling the two behaviors. The off→on guard reduces to the previous expression when the option is `false`, so existing configurations are unaffected. Includes a parametrized regression test, docs, and regenerated strings/services/README via scripts/update-generated-content. Refs #435 Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> * Shorten generated turn-on option description * Document shared turn-on policy limitations * Name external turn-on policy after manual-control behavior * Clarify settings needed to adapt unmatched turn-ons --------- Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com> Co-authored-by: Bas Nijholt <bas@nijho.lt> |
||
|---|---|---|
| .. | ||
| __init__.py | ||
| conftest.py | ||
| README.md | ||
| test_adaptation_utils.py | ||
| test_automation_examples.py | ||
| test_color_and_brightness.py | ||
| test_config_flow.py | ||
| test_diagnostics.py | ||
| test_hass_utils.py | ||
| test_init.py | ||
| test_switch.py | ||
Developer notes for the tests directory
To run the tests, check out the CI configuration to see how they are executed in the CI pipeline. Alternatively, you can use the provided Docker image to run the tests locally or run them with VS Code directly in the dev container.
Coverage reports
Open a pytest workflow run in GitHub Actions to see line and branch coverage in each job's summary. Download its coverage-<Home Assistant version>-py<Python version> artifact for the XML and JSON reports and the browsable HTML report. After extracting it, open htmlcov/index.html to inspect missing lines and branches. Supported stable Home Assistant versions require at least 89% line coverage and 80% branch coverage. The dev job reports coverage without enforcing these floors.
Coverage measures executed code, not whether assertions would catch a bug. Add tests for observable behavior: emitted light commands, final states, manual-control events, and timer expiry. The integration suite runs inside Home Assistant with simulated lights; it does not establish physical-device behavior. It also does not execute every documentation generator included in the package's coverage total.
The tests in test_automation_examples.py load YAML directly from README.md and execute it through Home Assistant's automation and script engines. Edit the README source when changing those examples, then run ./scripts/update-generated-content to update the documentation pages.
Prerequisites
Before running tests with Docker, you need a local Home Assistant core checkout with symlinks:
# Clone HA core (one-time setup)
git clone --depth 1 https://github.com/home-assistant/core.git core
# Setup symlinks (one-time setup)
./scripts/setup-symlinks
Running tests with Docker
Navigate to the adaptive-lighting repo folder and execute the following command.
Important: Mount the entire repo (-v $(pwd):/app), not individual directories, or the symlinks will break.
Linux / MacOS / Windows PowerShell:
docker run -v ${PWD}:/app basnijholt/adaptive-lighting:latest
- In windows command prompt, the command is:
docker run -v %cd%:/app basnijholt/adaptive-lighting:latest
This command will download the Docker image from the adaptive-lighting Docker Hub repo and run the tests.
If you prefer to build the image yourself, use the following command:
docker build -t basnijholt/adaptive-lighting:latest --no-cache --progress=plain .
This might be necessary if the image on Docker Hub is outdated or if the test_dependencies.py file is updated.
Passing arguments to pytest
You can pass arguments to pytest by appending them to the command:
For example, to run the tests with a custom log format, use the following command (this also gets rid of the captured stderr output):
docker run -v $(pwd):/app basnijholt/adaptive-lighting:latest --show-capture=log --log-format="%(asctime)s %(levelname)-8s %(name)s:%(filename)s:%(lineno)s %(message)s" --log-date-format="%H:%M:%S" tests/components/adaptive_lighting/