core/tests/components/netatmo/test_light.py

76 lines
2.3 KiB
Python

"""The tests for Netatmo light."""
from unittest.mock import patch
from homeassistant.components.light import (
DOMAIN as LIGHT_DOMAIN,
SERVICE_TURN_OFF,
SERVICE_TURN_ON,
)
from homeassistant.const import ATTR_ENTITY_ID, CONF_WEBHOOK_ID
from .common import FAKE_WEBHOOK_ACTIVATION, simulate_webhook
async def test_light_setup_and_services(hass, light_entry):
"""Test setup and services."""
webhook_id = light_entry.data[CONF_WEBHOOK_ID]
# Fake webhook activation
await simulate_webhook(hass, webhook_id, FAKE_WEBHOOK_ACTIVATION)
await hass.async_block_till_done()
light_entity = "light.netatmo_garden"
assert hass.states.get(light_entity).state == "unavailable"
# Trigger light mode change
response = {
"event_type": "light_mode",
"device_id": "12:34:56:00:a5:a4",
"camera_id": "12:34:56:00:a5:a4",
"event_id": "601dce1560abca1ebad9b723",
"push_type": "NOC-light_mode",
"sub_type": "on",
}
await simulate_webhook(hass, webhook_id, response)
assert hass.states.get(light_entity).state == "on"
# Trigger light mode change with erroneous webhook data
response = {
"event_type": "light_mode",
"device_id": "12:34:56:00:a5:a4",
}
await simulate_webhook(hass, webhook_id, response)
assert hass.states.get(light_entity).state == "on"
# Test turning light off
with patch("pyatmo.camera.CameraData.set_state") as mock_set_state:
await hass.services.async_call(
LIGHT_DOMAIN,
SERVICE_TURN_OFF,
{ATTR_ENTITY_ID: light_entity},
blocking=True,
)
await hass.async_block_till_done()
mock_set_state.assert_called_once_with(
home_id="91763b24c43d3e344f424e8b",
camera_id="12:34:56:00:a5:a4",
floodlight="auto",
)
# Test turning light on
with patch("pyatmo.camera.CameraData.set_state") as mock_set_state:
await hass.services.async_call(
LIGHT_DOMAIN,
SERVICE_TURN_ON,
{ATTR_ENTITY_ID: light_entity},
blocking=True,
)
await hass.async_block_till_done()
mock_set_state.assert_called_once_with(
home_id="91763b24c43d3e344f424e8b",
camera_id="12:34:56:00:a5:a4",
floodlight="on",
)