"""Tests for OwnTracks config flow."""
from unittest.mock import patch

from homeassistant.setup import async_setup_component
from tests.common import mock_coro


async def test_config_flow_import(hass):
    """Test that we automatically create a config flow."""
    assert not hass.config_entries.async_entries("owntracks")
    assert await async_setup_component(hass, "owntracks", {"owntracks": {}})
    await hass.async_block_till_done()
    assert hass.config_entries.async_entries("owntracks")


async def test_config_flow_unload(hass):
    """Test unloading a config flow."""
    with patch(
        "homeassistant.config_entries.ConfigEntries" ".async_forward_entry_setup"
    ) as mock_forward:
        result = await hass.config_entries.flow.async_init(
            "owntracks", context={"source": "import"}, data={}
        )

    assert len(mock_forward.mock_calls) == 1
    entry = result["result"]

    assert mock_forward.mock_calls[0][1][0] is entry
    assert mock_forward.mock_calls[0][1][1] == "device_tracker"
    assert entry.data["webhook_id"] in hass.data["webhook"]

    with patch(
        "homeassistant.config_entries.ConfigEntries" ".async_forward_entry_unload",
        return_value=mock_coro(),
    ) as mock_unload:
        assert await hass.config_entries.async_unload(entry.entry_id)

    assert len(mock_unload.mock_calls) == 1
    assert mock_forward.mock_calls[0][1][0] is entry
    assert mock_forward.mock_calls[0][1][1] == "device_tracker"
    assert entry.data["webhook_id"] not in hass.data["webhook"]


async def test_with_cloud_sub(hass):
    """Test creating a config flow while subscribed."""
    hass.config.components.add("cloud")
    with patch(
        "homeassistant.components.cloud.async_active_subscription", return_value=True
    ), patch(
        "homeassistant.components.cloud.async_create_cloudhook",
        return_value=mock_coro("https://hooks.nabu.casa/ABCD"),
    ):
        result = await hass.config_entries.flow.async_init(
            "owntracks", context={"source": "user"}, data={}
        )

    entry = result["result"]
    assert entry.data["cloudhook"]
    assert (
        result["description_placeholders"]["webhook_url"]
        == "https://hooks.nabu.casa/ABCD"
    )
