mirror of
https://github.com/Matysh/houseplan-card
synced 2026-09-30 19:58:50 +00:00
`python3 -m pytest tests_backend/` без Home Assistant обрывался НА СБОРКЕ: `test_coordinate_canonicalization.py` тянет HA через `store`, а `collect_ignore_glob` в conftest отсекает только `test_ha_*.py`. Ни один из трёх сотен чистых тестов при этом не выполнялся, хотя CLAUDE.md и PROCESS.md §8 обещают ровно обратное. В CI дефект невидим: там HA есть и список игнора пуст. Признак «нужен ли файлу HA» был подменён признаком «как файл назван» — та же конструкция, которая в #389 уронила 85 тестов с голым assert False. Вариант владельца — третий: `pytest.importorskip("homeassistant")` в самом файле, до импортов, которые тянут HA. Теперь это честный скип («1 skipped» вместо «Interrupted»), остальные файлы прогоняются, а в CI не скипается ничего. Обещанная проверка остальных файлов сделана пофайловым collect: из двадцати HA требует ровно один непоименованный — этот. Чтобы второй не появился молча, добавлен статический гейт: он читает импорты (не исполняет), строит множество модулей интеграции, тянущих HA, — с замыканием по относительным импортам, потому что `import_export` зависит от HA только через `store`, — и требует у такого теста либо имя `test_ha_*`, либо importorskip. Свидетели, каждый проверен отрицательным прогоном: - снять importorskip → красный «файлам нужен HA, но они этого не объявляют»; - новый чистый файл с импортом store → тот же красный; - убрать замыкание → красный синтетический тест сканера; - перестать исключать TYPE_CHECKING → красный он же; - считать импорты внутри функций → красный он же. Плюс два свидетеля самого сканера в теле гейта: `store` обязан быть найден, `coordinate_canonicalization` обязан остаться чистым — иначе «ничего не нашёл» выглядело бы как «всё в порядке». Мутант `pure-backend-test-pulls-home-assistant` в реестре: добавляет импорт store в чистый test_projection.py, guard — этот гейт. Гейты: npm test 1791 tests, 1790 pass, 0 fail; pytest без HA 312 passed, 3 skipped (было: Interrupted, 0 выполнено); mutation-gate --check зелёный. Issue: #436 User-Visible: no