tests/gateway/test_homeassistant.py::TestCheckRequirements::test_returns_false_without_token tests/gateway/test_homeassistant.py::TestCheckRequirements::test_returns_true_with_token tests/gateway/test_homeassistant.py::TestCheckRequirements::test_returns_false_without_aiohttp tests/gateway/test_homeassistant.py::TestFormatStateChange::test_climate_includes_temperatures tests/gateway/test_homeassistant.py::TestFormatStateChange::test_sensor_includes_unit tests/gateway/test_homeassistant.py::TestFormatStateChange::test_sensor_without_unit tests/gateway/test_homeassistant.py::TestFormatStateChange::test_binary_sensor_on tests/gateway/test_homeassistant.py::TestFormatStateChange::test_binary_sensor_off tests/gateway/test_homeassistant.py::TestFormatStateChange::test_light_turned_on tests/gateway/test_homeassistant.py::TestFormatStateChange::test_switch_turned_off tests/gateway/test_homeassistant.py::TestFormatStateChange::test_fan_domain_uses_light_switch_branch tests/gateway/test_homeassistant.py::TestFormatStateChange::test_alarm_panel tests/gateway/test_homeassistant.py::TestFormatStateChange::test_generic_domain_includes_entity_id tests/gateway/test_homeassistant.py::TestFormatStateChange::test_same_state_returns_none tests/gateway/test_homeassistant.py::TestFormatStateChange::test_empty_new_state_returns_none tests/gateway/test_homeassistant.py::TestFormatStateChange::test_no_old_state_uses_unknown tests/gateway/test_homeassistant.py::TestFormatStateChange::test_uses_entity_id_when_no_friendly_name tests/gateway/test_homeassistant.py::TestAdapterInit::test_url_and_token_from_config_extra tests/gateway/test_homeassistant.py::TestAdapterInit::test_url_fallback_to_env tests/gateway/test_homeassistant.py::TestAdapterInit::test_trailing_slash_stripped tests/gateway/test_homeassistant.py::TestAdapterInit::test_watch_filters_parsed tests/gateway/test_homeassistant.py::TestAdapterInit::test_watch_all_parsed tests/gateway/test_homeassistant.py::TestAdapterInit::test_defaults_when_no_extra tests/gateway/test_homeassistant.py::TestEventFilteringPipeline::test_ignored_entity_not_forwarded tests/gateway/test_homeassistant.py::TestEventFilteringPipeline::test_unwatched_domain_not_forwarded tests/gateway/test_homeassistant.py::TestEventFilteringPipeline::test_watched_domain_forwarded tests/gateway/test_homeassistant.py::TestEventFilteringPipeline::test_watched_entity_forwarded tests/gateway/test_homeassistant.py::TestEventFilteringPipeline::test_no_filters_blocks_everything tests/gateway/test_homeassistant.py::TestEventFilteringPipeline::test_watch_all_passes_everything tests/gateway/test_homeassistant.py::TestEventFilteringPipeline::test_same_state_not_forwarded tests/gateway/test_homeassistant.py::TestEventFilteringPipeline::test_empty_entity_id_skipped tests/gateway/test_homeassistant.py::TestEventFilteringPipeline::test_message_event_has_correct_source tests/gateway/test_homeassistant.py::TestCooldown::test_cooldown_blocks_rapid_events tests/gateway/test_homeassistant.py::TestCooldown::test_cooldown_expires tests/gateway/test_homeassistant.py::TestCooldown::test_different_entities_independent_cooldowns tests/gateway/test_homeassistant.py::TestCooldown::test_zero_cooldown_passes_all tests/gateway/test_homeassistant.py::TestConfigIntegration::test_env_override_creates_ha_platform tests/gateway/test_homeassistant.py::TestConfigIntegration::test_no_env_no_platform tests/gateway/test_homeassistant.py::TestConfigIntegration::test_config_roundtrip_preserves_extra tests/gateway/test_homeassistant.py::TestSendViaRestApi::test_send_success tests/gateway/test_homeassistant.py::TestSendViaRestApi::test_send_http_error tests/gateway/test_homeassistant.py::TestSendViaRestApi::test_send_truncates_long_message tests/gateway/test_homeassistant.py::TestSendViaRestApi::test_send_does_not_use_websocket tests/gateway/test_homeassistant.py::TestWsUrlConstruction::test_http_to_ws tests/gateway/test_homeassistant.py::TestWsUrlConstruction::test_https_to_wss