"""Test the Obihai config flow.""" from unittest.mock import AsyncMock, patch import pytest from homeassistant import config_entries from homeassistant.components.obihai.const import DOMAIN from homeassistant.core import HomeAssistant from homeassistant.data_entry_flow import FlowResultType from . import USER_INPUT VALIDATE_AUTH_PATCH = "homeassistant.components.obihai.config_flow.validate_auth" pytestmark = pytest.mark.usefixtures("mock_setup_entry") async def test_user_form(hass: HomeAssistant, mock_setup_entry: AsyncMock) -> None: """Test we get the user initiated form.""" result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_USER} ) assert result["type"] == FlowResultType.FORM assert result["step_id"] == "user" assert result["errors"] == {} with patch("pyobihai.PyObihai.check_account"): result = await hass.config_entries.flow.async_configure( result["flow_id"], USER_INPUT, ) await hass.async_block_till_done() assert result["type"] == FlowResultType.CREATE_ENTRY assert result["title"] == "10.10.10.30" assert result["data"] == {**USER_INPUT} assert len(mock_setup_entry.mock_calls) == 1 async def test_auth_failure(hass: HomeAssistant) -> None: """Test we get the authentication error.""" result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_USER} ) with patch(VALIDATE_AUTH_PATCH, return_value=False): result = await hass.config_entries.flow.async_configure( result["flow_id"], USER_INPUT, ) await hass.async_block_till_done() assert result["type"] == FlowResultType.FORM assert result["step_id"] == "user" assert result["errors"]["base"] == "cannot_connect" async def test_yaml_import(hass: HomeAssistant) -> None: """Test we get the YAML imported.""" with patch(VALIDATE_AUTH_PATCH, return_value=True): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=USER_INPUT, ) await hass.async_block_till_done() assert result["type"] == FlowResultType.CREATE_ENTRY assert "errors" not in result async def test_yaml_import_fail(hass: HomeAssistant) -> None: """Test the YAML import fails.""" with patch(VALIDATE_AUTH_PATCH, return_value=False): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_IMPORT}, data=USER_INPUT, ) await hass.async_block_till_done() assert result["type"] == FlowResultType.ABORT assert result["reason"] == "cannot_connect" assert "errors" not in result