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:
Martin Hjelmare 2020-01-12 05:00:02 +01:00 committed by Paulus Schoutsen
parent 117efb5a04
commit 91f738127d

View file

@ -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}