"""Test the init file of IFTTT."""
from unittest.mock import Mock, patch

from homeassistant import data_entry_flow
from homeassistant.core import callback
from homeassistant.components import ifttt


async def test_config_flow_registers_webhook(hass, aiohttp_client):
    """Test setting up IFTTT and sending webhook."""
    with patch('homeassistant.util.get_local_ip', return_value='example.com'):
        result = await hass.config_entries.flow.async_init('ifttt', context={
            'source': 'user'
        })
    assert result['type'] == data_entry_flow.RESULT_TYPE_FORM, result

    result = await hass.config_entries.flow.async_configure(
        result['flow_id'], {})
    assert result['type'] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY
    webhook_id = result['result'].data['webhook_id']

    ifttt_events = []

    @callback
    def handle_event(event):
        """Handle IFTTT event."""
        ifttt_events.append(event)

    hass.bus.async_listen(ifttt.EVENT_RECEIVED, handle_event)

    client = await aiohttp_client(hass.http.app)
    await client.post('/api/webhook/{}'.format(webhook_id), json={
        'hello': 'ifttt'
    })

    assert len(ifttt_events) == 1
    assert ifttt_events[0].data['webhook_id'] == webhook_id
    assert ifttt_events[0].data['hello'] == 'ifttt'


async def test_config_flow_aborts_external_url(hass, aiohttp_client):
    """Test setting up IFTTT and sending webhook."""
    hass.config.api = Mock(base_url='http://192.168.1.10')
    result = await hass.config_entries.flow.async_init('ifttt', context={
        'source': 'user'
    })
    assert result['type'] == data_entry_flow.RESULT_TYPE_ABORT
    assert result['reason'] == 'not_internet_accessible'