111 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
			
		
		
	
	
			111 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Python
		
	
	
"""Verify that WeMo device triggers work as expected."""
 | 
						|
import pytest
 | 
						|
from pywemo.subscribe import EVENT_TYPE_LONG_PRESS
 | 
						|
 | 
						|
from homeassistant.components.automation import DOMAIN as AUTOMATION_DOMAIN
 | 
						|
from homeassistant.components.device_automation import DeviceAutomationType
 | 
						|
from homeassistant.components.wemo.const import DOMAIN, WEMO_SUBSCRIPTION_EVENT
 | 
						|
from homeassistant.const import (
 | 
						|
    CONF_DEVICE_ID,
 | 
						|
    CONF_DOMAIN,
 | 
						|
    CONF_ENTITY_ID,
 | 
						|
    CONF_PLATFORM,
 | 
						|
    CONF_TYPE,
 | 
						|
    Platform,
 | 
						|
)
 | 
						|
from homeassistant.setup import async_setup_component
 | 
						|
 | 
						|
from tests.common import (
 | 
						|
    assert_lists_same,
 | 
						|
    async_get_device_automations,
 | 
						|
    async_mock_service,
 | 
						|
)
 | 
						|
 | 
						|
MOCK_DEVICE_ID = "some-device-id"
 | 
						|
DATA_MESSAGE = {"message": "service-called"}
 | 
						|
 | 
						|
 | 
						|
@pytest.fixture
 | 
						|
def pywemo_model():
 | 
						|
    """Pywemo LightSwitch models use the switch platform."""
 | 
						|
    return "LightSwitchLongPress"
 | 
						|
 | 
						|
 | 
						|
async def setup_automation(hass, device_id, trigger_type):
 | 
						|
    """Set up an automation trigger for testing triggering."""
 | 
						|
    return await async_setup_component(
 | 
						|
        hass,
 | 
						|
        AUTOMATION_DOMAIN,
 | 
						|
        {
 | 
						|
            AUTOMATION_DOMAIN: [
 | 
						|
                {
 | 
						|
                    "trigger": {
 | 
						|
                        CONF_PLATFORM: "device",
 | 
						|
                        CONF_DOMAIN: DOMAIN,
 | 
						|
                        CONF_DEVICE_ID: device_id,
 | 
						|
                        CONF_TYPE: trigger_type,
 | 
						|
                    },
 | 
						|
                    "action": {
 | 
						|
                        "service": "test.automation",
 | 
						|
                        "data": DATA_MESSAGE,
 | 
						|
                    },
 | 
						|
                },
 | 
						|
            ]
 | 
						|
        },
 | 
						|
    )
 | 
						|
 | 
						|
 | 
						|
async def test_get_triggers(hass, wemo_entity):
 | 
						|
    """Test that the triggers appear for a supported device."""
 | 
						|
    assert wemo_entity.device_id is not None
 | 
						|
 | 
						|
    expected_triggers = [
 | 
						|
        {
 | 
						|
            CONF_DEVICE_ID: wemo_entity.device_id,
 | 
						|
            CONF_DOMAIN: DOMAIN,
 | 
						|
            CONF_PLATFORM: "device",
 | 
						|
            CONF_TYPE: EVENT_TYPE_LONG_PRESS,
 | 
						|
            "metadata": {},
 | 
						|
        },
 | 
						|
        {
 | 
						|
            CONF_DEVICE_ID: wemo_entity.device_id,
 | 
						|
            CONF_DOMAIN: Platform.SWITCH,
 | 
						|
            CONF_ENTITY_ID: wemo_entity.entity_id,
 | 
						|
            CONF_PLATFORM: "device",
 | 
						|
            CONF_TYPE: "changed_states",
 | 
						|
            "metadata": {"secondary": False},
 | 
						|
        },
 | 
						|
        {
 | 
						|
            CONF_DEVICE_ID: wemo_entity.device_id,
 | 
						|
            CONF_DOMAIN: Platform.SWITCH,
 | 
						|
            CONF_ENTITY_ID: wemo_entity.entity_id,
 | 
						|
            CONF_PLATFORM: "device",
 | 
						|
            CONF_TYPE: "turned_off",
 | 
						|
            "metadata": {"secondary": False},
 | 
						|
        },
 | 
						|
        {
 | 
						|
            CONF_DEVICE_ID: wemo_entity.device_id,
 | 
						|
            CONF_DOMAIN: Platform.SWITCH,
 | 
						|
            CONF_ENTITY_ID: wemo_entity.entity_id,
 | 
						|
            CONF_PLATFORM: "device",
 | 
						|
            CONF_TYPE: "turned_on",
 | 
						|
            "metadata": {"secondary": False},
 | 
						|
        },
 | 
						|
    ]
 | 
						|
    triggers = await async_get_device_automations(
 | 
						|
        hass, DeviceAutomationType.TRIGGER, wemo_entity.device_id
 | 
						|
    )
 | 
						|
    assert_lists_same(triggers, expected_triggers)
 | 
						|
 | 
						|
 | 
						|
async def test_fires_on_long_press(hass):
 | 
						|
    """Test wemo long press trigger firing."""
 | 
						|
    assert await setup_automation(hass, MOCK_DEVICE_ID, EVENT_TYPE_LONG_PRESS)
 | 
						|
    calls = async_mock_service(hass, "test", "automation")
 | 
						|
 | 
						|
    message = {CONF_DEVICE_ID: MOCK_DEVICE_ID, CONF_TYPE: EVENT_TYPE_LONG_PRESS}
 | 
						|
    hass.bus.async_fire(WEMO_SUBSCRIPTION_EVENT, message)
 | 
						|
    await hass.async_block_till_done()
 | 
						|
    assert len(calls) == 1
 | 
						|
    assert calls[0].data == DATA_MESSAGE
 |