112 lines
3.0 KiB
Python
112 lines
3.0 KiB
Python
"""The tests for the webhook automation trigger."""
|
|
import pytest
|
|
|
|
from homeassistant.core import callback
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
|
|
@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", {})
|
|
|
|
|
|
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"
|
|
|
|
|
|
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"
|