2018-10-08 18:16:37 +00:00
|
|
|
"""The tests for the webhook automation trigger."""
|
2019-04-09 22:42:44 +00:00
|
|
|
import pytest
|
|
|
|
|
2018-10-08 18:16:37 +00:00
|
|
|
from homeassistant.core import callback
|
|
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
|
|
|
|
|
2019-04-09 22:42:44 +00:00
|
|
|
@pytest.fixture(autouse=True)
|
|
|
|
async def setup_http(hass):
|
|
|
|
"""Set up http."""
|
|
|
|
assert await async_setup_component(hass, 'http', {})
|
|
|
|
assert await async_setup_component(hass, 'webhook', {})
|
|
|
|
|
|
|
|
|
2018-10-08 18:16:37 +00:00
|
|
|
async def test_webhook_json(hass, aiohttp_client):
|
|
|
|
"""Test triggering with a JSON webhook."""
|
|
|
|
events = []
|
|
|
|
|
|
|
|
@callback
|
|
|
|
def store_event(event):
|
|
|
|
"""Helepr to store events."""
|
|
|
|
events.append(event)
|
|
|
|
|
|
|
|
hass.bus.async_listen('test_success', store_event)
|
|
|
|
|
|
|
|
assert await async_setup_component(hass, 'automation', {
|
|
|
|
'automation': {
|
|
|
|
'trigger': {
|
|
|
|
'platform': 'webhook',
|
|
|
|
'webhook_id': 'json_webhook'
|
|
|
|
},
|
|
|
|
'action': {
|
|
|
|
'event': 'test_success',
|
|
|
|
'event_data_template': {
|
|
|
|
'hello': 'yo {{ trigger.json.hello }}',
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
client = await aiohttp_client(hass.http.app)
|
|
|
|
|
|
|
|
await client.post('/api/webhook/json_webhook', json={
|
|
|
|
'hello': 'world'
|
|
|
|
})
|
|
|
|
|
|
|
|
assert len(events) == 1
|
|
|
|
assert events[0].data['hello'] == 'yo world'
|
|
|
|
|
|
|
|
|
|
|
|
async def test_webhook_post(hass, aiohttp_client):
|
|
|
|
"""Test triggering with a POST webhook."""
|
|
|
|
events = []
|
|
|
|
|
|
|
|
@callback
|
|
|
|
def store_event(event):
|
|
|
|
"""Helepr to store events."""
|
|
|
|
events.append(event)
|
|
|
|
|
|
|
|
hass.bus.async_listen('test_success', store_event)
|
|
|
|
|
|
|
|
assert await async_setup_component(hass, 'automation', {
|
|
|
|
'automation': {
|
|
|
|
'trigger': {
|
|
|
|
'platform': 'webhook',
|
|
|
|
'webhook_id': 'post_webhook'
|
|
|
|
},
|
|
|
|
'action': {
|
|
|
|
'event': 'test_success',
|
|
|
|
'event_data_template': {
|
|
|
|
'hello': 'yo {{ trigger.data.hello }}',
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
client = await aiohttp_client(hass.http.app)
|
|
|
|
|
|
|
|
await client.post('/api/webhook/post_webhook', data={
|
|
|
|
'hello': 'world'
|
|
|
|
})
|
|
|
|
|
|
|
|
assert len(events) == 1
|
|
|
|
assert events[0].data['hello'] == 'yo world'
|
2019-04-14 17:53:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
async def test_webhook_query(hass, aiohttp_client):
|
|
|
|
"""Test triggering with a query POST webhook."""
|
|
|
|
events = []
|
|
|
|
|
|
|
|
@callback
|
|
|
|
def store_event(event):
|
|
|
|
"""Helepr to store events."""
|
|
|
|
events.append(event)
|
|
|
|
|
|
|
|
hass.bus.async_listen('test_success', store_event)
|
|
|
|
|
|
|
|
assert await async_setup_component(hass, 'automation', {
|
|
|
|
'automation': {
|
|
|
|
'trigger': {
|
|
|
|
'platform': 'webhook',
|
|
|
|
'webhook_id': 'query_webhook'
|
|
|
|
},
|
|
|
|
'action': {
|
|
|
|
'event': 'test_success',
|
|
|
|
'event_data_template': {
|
|
|
|
'hello': 'yo {{ trigger.query.hello }}',
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
client = await aiohttp_client(hass.http.app)
|
|
|
|
|
|
|
|
await client.post('/api/webhook/query_webhook?hello=world')
|
|
|
|
|
|
|
|
assert len(events) == 1
|
|
|
|
assert events[0].data['hello'] == 'yo world'
|