147 lines
4.4 KiB
Python
147 lines
4.4 KiB
Python
"""Test config flow."""
|
|
from unittest.mock import patch
|
|
|
|
import pytest
|
|
|
|
from homeassistant.setup import async_setup_component
|
|
|
|
from tests.common import MockConfigEntry, mock_coro
|
|
|
|
|
|
@pytest.fixture(autouse=True)
|
|
def mock_finish_setup():
|
|
"""Mock out the finish setup method."""
|
|
with patch(
|
|
"homeassistant.components.mqtt.MQTT.async_connect", return_value=mock_coro(True)
|
|
) as mock_finish:
|
|
yield mock_finish
|
|
|
|
|
|
@pytest.fixture
|
|
def mock_try_connection():
|
|
"""Mock the try connection method."""
|
|
with patch("homeassistant.components.mqtt.config_flow.try_connection") as mock_try:
|
|
yield mock_try
|
|
|
|
|
|
async def test_user_connection_works(hass, mock_try_connection, mock_finish_setup):
|
|
"""Test we can finish a config flow."""
|
|
mock_try_connection.return_value = True
|
|
|
|
result = await hass.config_entries.flow.async_init(
|
|
"mqtt", context={"source": "user"}
|
|
)
|
|
assert result["type"] == "form"
|
|
|
|
result = await hass.config_entries.flow.async_configure(
|
|
result["flow_id"], {"broker": "127.0.0.1"}
|
|
)
|
|
|
|
assert result["type"] == "create_entry"
|
|
assert result["result"].data == {
|
|
"broker": "127.0.0.1",
|
|
"port": 1883,
|
|
"discovery": False,
|
|
}
|
|
# Check we tried the connection
|
|
assert len(mock_try_connection.mock_calls) == 1
|
|
# Check config entry got setup
|
|
assert len(mock_finish_setup.mock_calls) == 1
|
|
|
|
|
|
async def test_user_connection_fails(hass, mock_try_connection, mock_finish_setup):
|
|
"""Test if connection cannot be made."""
|
|
mock_try_connection.return_value = False
|
|
|
|
result = await hass.config_entries.flow.async_init(
|
|
"mqtt", context={"source": "user"}
|
|
)
|
|
assert result["type"] == "form"
|
|
|
|
result = await hass.config_entries.flow.async_configure(
|
|
result["flow_id"], {"broker": "127.0.0.1"}
|
|
)
|
|
|
|
assert result["type"] == "form"
|
|
assert result["errors"]["base"] == "cannot_connect"
|
|
|
|
# Check we tried the connection
|
|
assert len(mock_try_connection.mock_calls) == 1
|
|
# Check config entry did not setup
|
|
assert len(mock_finish_setup.mock_calls) == 0
|
|
|
|
|
|
async def test_manual_config_set(hass, mock_try_connection, mock_finish_setup):
|
|
"""Test we ignore entry if manual config available."""
|
|
assert await async_setup_component(hass, "mqtt", {"mqtt": {"broker": "bla"}})
|
|
await hass.async_block_till_done()
|
|
assert len(mock_finish_setup.mock_calls) == 1
|
|
|
|
mock_try_connection.return_value = True
|
|
|
|
result = await hass.config_entries.flow.async_init(
|
|
"mqtt", context={"source": "user"}
|
|
)
|
|
assert result["type"] == "abort"
|
|
|
|
|
|
async def test_user_single_instance(hass):
|
|
"""Test we only allow a single config flow."""
|
|
MockConfigEntry(domain="mqtt").add_to_hass(hass)
|
|
|
|
result = await hass.config_entries.flow.async_init(
|
|
"mqtt", context={"source": "user"}
|
|
)
|
|
assert result["type"] == "abort"
|
|
assert result["reason"] == "single_instance_allowed"
|
|
|
|
|
|
async def test_hassio_single_instance(hass):
|
|
"""Test we only allow a single config flow."""
|
|
MockConfigEntry(domain="mqtt").add_to_hass(hass)
|
|
|
|
result = await hass.config_entries.flow.async_init(
|
|
"mqtt", context={"source": "hassio"}
|
|
)
|
|
assert result["type"] == "abort"
|
|
assert result["reason"] == "single_instance_allowed"
|
|
|
|
|
|
async def test_hassio_confirm(hass, mock_try_connection, mock_finish_setup):
|
|
"""Test we can finish a config flow."""
|
|
mock_try_connection.return_value = True
|
|
|
|
result = await hass.config_entries.flow.async_init(
|
|
"mqtt",
|
|
data={
|
|
"addon": "Mock Addon",
|
|
"host": "mock-broker",
|
|
"port": 1883,
|
|
"username": "mock-user",
|
|
"password": "mock-pass",
|
|
"protocol": "3.1.1",
|
|
},
|
|
context={"source": "hassio"},
|
|
)
|
|
assert result["type"] == "form"
|
|
assert result["step_id"] == "hassio_confirm"
|
|
assert result["description_placeholders"] == {"addon": "Mock Addon"}
|
|
|
|
result = await hass.config_entries.flow.async_configure(
|
|
result["flow_id"], {"discovery": True}
|
|
)
|
|
|
|
assert result["type"] == "create_entry"
|
|
assert result["result"].data == {
|
|
"broker": "mock-broker",
|
|
"port": 1883,
|
|
"username": "mock-user",
|
|
"password": "mock-pass",
|
|
"protocol": "3.1.1",
|
|
"discovery": True,
|
|
}
|
|
# Check we tried the connection
|
|
assert len(mock_try_connection.mock_calls) == 1
|
|
# Check config entry got setup
|
|
assert len(mock_finish_setup.mock_calls) == 1
|