Make met config flow tests robust (#30689)
* Make met config flow tests more robust * Fix test with default form values * Remove not needed test * Clean create entry test * Clean double test * Clean last tests * Fix docstring
This commit is contained in:
parent
117efb5a04
commit
91f738127d
1 changed files with 58 additions and 102 deletions
|
@ -1,32 +1,24 @@
|
|||
"""Tests for Met.no config flow."""
|
||||
from unittest.mock import Mock, patch
|
||||
from asynctest import patch
|
||||
import pytest
|
||||
|
||||
from homeassistant.components.met import config_flow
|
||||
from homeassistant.components.met.const import DOMAIN, HOME_LOCATION_NAME
|
||||
from homeassistant.const import CONF_ELEVATION, CONF_LATITUDE, CONF_LONGITUDE
|
||||
|
||||
from tests.common import MockConfigEntry, mock_coro
|
||||
from tests.common import MockConfigEntry
|
||||
|
||||
|
||||
async def test_show_config_form():
|
||||
@pytest.fixture(name="met_setup", autouse=True)
|
||||
def met_setup_fixture():
|
||||
"""Patch met setup entry."""
|
||||
with patch("homeassistant.components.met.async_setup_entry", return_value=True):
|
||||
yield
|
||||
|
||||
|
||||
async def test_show_config_form(hass):
|
||||
"""Test show configuration form."""
|
||||
hass = Mock()
|
||||
flow = config_flow.MetFlowHandler()
|
||||
flow.hass = hass
|
||||
|
||||
result = await flow._show_config_form()
|
||||
|
||||
assert result["type"] == "form"
|
||||
assert result["step_id"] == "user"
|
||||
|
||||
|
||||
async def test_show_config_form_default_values():
|
||||
"""Test show configuration form."""
|
||||
hass = Mock()
|
||||
flow = config_flow.MetFlowHandler()
|
||||
flow.hass = hass
|
||||
|
||||
result = await flow._show_config_form(
|
||||
name="test", latitude="0", longitude="0", elevation="0"
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": "user"}
|
||||
)
|
||||
|
||||
assert result["type"] == "form"
|
||||
|
@ -34,117 +26,81 @@ async def test_show_config_form_default_values():
|
|||
|
||||
|
||||
async def test_flow_with_home_location(hass):
|
||||
"""Test config flow .
|
||||
"""Test config flow.
|
||||
|
||||
Tests the flow when a default location is configured
|
||||
then it should return a form with default values
|
||||
Test the flow when a default location is configured.
|
||||
Then it should return a form with default values.
|
||||
"""
|
||||
flow = config_flow.MetFlowHandler()
|
||||
flow.hass = hass
|
||||
|
||||
hass.config.location_name = "Home"
|
||||
hass.config.latitude = 1
|
||||
hass.config.longitude = 1
|
||||
hass.config.elevation = 1
|
||||
hass.config.longitude = 2
|
||||
hass.config.elevation = 3
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": "user"}
|
||||
)
|
||||
|
||||
result = await flow.async_step_user()
|
||||
assert result["type"] == "form"
|
||||
assert result["step_id"] == "user"
|
||||
|
||||
|
||||
async def test_flow_show_form():
|
||||
"""Test show form scenarios first time.
|
||||
|
||||
Test when the form should show when no configurations exists
|
||||
"""
|
||||
hass = Mock()
|
||||
flow = config_flow.MetFlowHandler()
|
||||
flow.hass = hass
|
||||
|
||||
with patch.object(
|
||||
flow, "_show_config_form", return_value=mock_coro()
|
||||
) as config_form:
|
||||
await flow.async_step_user()
|
||||
assert len(config_form.mock_calls) == 1
|
||||
default_data = result["data_schema"]({})
|
||||
assert default_data["name"] == HOME_LOCATION_NAME
|
||||
assert default_data["latitude"] == 1
|
||||
assert default_data["longitude"] == 2
|
||||
assert default_data["elevation"] == 3
|
||||
|
||||
|
||||
async def test_flow_entry_created_from_user_input():
|
||||
"""Test that create data from user input.
|
||||
|
||||
Test when the form should show when no configurations exists
|
||||
"""
|
||||
hass = Mock()
|
||||
flow = config_flow.MetFlowHandler()
|
||||
flow.hass = hass
|
||||
|
||||
async def test_create_entry(hass):
|
||||
"""Test create entry from user input."""
|
||||
test_data = {
|
||||
"name": "home",
|
||||
CONF_LONGITUDE: "0",
|
||||
CONF_LATITUDE: "0",
|
||||
CONF_ELEVATION: "0",
|
||||
CONF_LONGITUDE: 0,
|
||||
CONF_LATITUDE: 0,
|
||||
CONF_ELEVATION: 0,
|
||||
}
|
||||
|
||||
# Test that entry created when user_input name not exists
|
||||
with patch.object(
|
||||
flow, "_show_config_form", return_value=mock_coro()
|
||||
) as config_form, patch.object(
|
||||
flow.hass.config_entries, "async_entries", return_value=mock_coro()
|
||||
) as config_entries:
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": "user"}, data=test_data
|
||||
)
|
||||
|
||||
result = await flow.async_step_user(user_input=test_data)
|
||||
|
||||
assert result["type"] == "create_entry"
|
||||
assert result["data"] == test_data
|
||||
assert len(config_entries.mock_calls) == 1
|
||||
assert not config_form.mock_calls
|
||||
assert result["type"] == "create_entry"
|
||||
assert result["title"] == "home"
|
||||
assert result["data"] == test_data
|
||||
|
||||
|
||||
async def test_flow_entry_config_entry_already_exists():
|
||||
"""Test that create data from user input and config_entry already exists.
|
||||
async def test_flow_entry_already_exists(hass):
|
||||
"""Test user input for config_entry that already exists.
|
||||
|
||||
Test when the form should show when user puts existing location
|
||||
in the config gui. Then the form should show with error
|
||||
in the config gui. Then the form should show with error.
|
||||
"""
|
||||
hass = Mock()
|
||||
|
||||
flow = config_flow.MetFlowHandler()
|
||||
flow.hass = hass
|
||||
|
||||
first_entry = MockConfigEntry(domain="met")
|
||||
first_entry.data["name"] = "home"
|
||||
first_entry.data[CONF_LONGITUDE] = "0"
|
||||
first_entry.data[CONF_LATITUDE] = "0"
|
||||
first_entry.data[CONF_LONGITUDE] = 0
|
||||
first_entry.data[CONF_LATITUDE] = 0
|
||||
first_entry.data[CONF_ELEVATION] = 0
|
||||
first_entry.add_to_hass(hass)
|
||||
|
||||
test_data = {
|
||||
"name": "home",
|
||||
CONF_LONGITUDE: "0",
|
||||
CONF_LATITUDE: "0",
|
||||
CONF_ELEVATION: "0",
|
||||
CONF_LONGITUDE: 0,
|
||||
CONF_LATITUDE: 0,
|
||||
CONF_ELEVATION: 0,
|
||||
}
|
||||
|
||||
with patch.object(
|
||||
flow, "_show_config_form", return_value=mock_coro()
|
||||
) as config_form, patch.object(
|
||||
flow.hass.config_entries, "async_entries", return_value=[first_entry]
|
||||
) as config_entries:
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": "user"}, data=test_data
|
||||
)
|
||||
|
||||
await flow.async_step_user(user_input=test_data)
|
||||
|
||||
assert len(config_form.mock_calls) == 1
|
||||
assert len(config_entries.mock_calls) == 1
|
||||
assert len(flow._errors) == 1
|
||||
assert result["type"] == "form"
|
||||
assert result["errors"]["name"] == "name_exists"
|
||||
|
||||
|
||||
async def test_onboarding_step(hass, mock_weather):
|
||||
async def test_onboarding_step(hass):
|
||||
"""Test initializing via onboarding step."""
|
||||
hass = Mock()
|
||||
|
||||
flow = config_flow.MetFlowHandler()
|
||||
flow.hass = hass
|
||||
|
||||
result = await flow.async_step_onboarding({})
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": "onboarding"}, data={}
|
||||
)
|
||||
|
||||
assert result["type"] == "create_entry"
|
||||
assert result["title"] == "Home"
|
||||
assert result["title"] == HOME_LOCATION_NAME
|
||||
assert result["data"] == {"track_home": True}
|
||||
|
|
Loading…
Add table
Reference in a new issue