Netgear catch no info error (#100212)
parent
f50d47121e
commit
d2b5ffc9fc
|
@ -190,8 +190,6 @@ class NetgearFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||
)
|
||||
except CannotLoginException:
|
||||
errors["base"] = "config"
|
||||
|
||||
if errors:
|
||||
return await self._show_setup_form(user_input, errors)
|
||||
|
||||
config_data = {
|
||||
|
@ -204,6 +202,10 @@ class NetgearFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
|
|||
|
||||
# Check if already configured
|
||||
info = await self.hass.async_add_executor_job(api.get_info)
|
||||
if info is None:
|
||||
errors["base"] = "info"
|
||||
return await self._show_setup_form(user_input, errors)
|
||||
|
||||
await self.async_set_unique_id(info["SerialNumber"], raise_on_progress=False)
|
||||
self._abort_if_unique_id_configured(updates=config_data)
|
||||
|
||||
|
|
|
@ -11,7 +11,8 @@
|
|||
}
|
||||
},
|
||||
"error": {
|
||||
"config": "Connection or login error: please check your configuration"
|
||||
"config": "Connection or login error: please check your configuration",
|
||||
"info": "Failed to get info from router"
|
||||
},
|
||||
"abort": {
|
||||
"already_configured": "[%key:common::config_flow::abort::already_configured_device%]",
|
||||
|
|
|
@ -76,41 +76,6 @@ def mock_controller_service():
|
|||
yield service_mock
|
||||
|
||||
|
||||
@pytest.fixture(name="service_5555")
|
||||
def mock_controller_service_5555():
|
||||
"""Mock a successful service."""
|
||||
with patch(
|
||||
"homeassistant.components.netgear.async_setup_entry", return_value=True
|
||||
), patch("homeassistant.components.netgear.router.Netgear") as service_mock:
|
||||
service_mock.return_value.get_info = Mock(return_value=ROUTER_INFOS)
|
||||
service_mock.return_value.port = 5555
|
||||
service_mock.return_value.ssl = True
|
||||
yield service_mock
|
||||
|
||||
|
||||
@pytest.fixture(name="service_incomplete")
|
||||
def mock_controller_service_incomplete():
|
||||
"""Mock a successful service."""
|
||||
router_infos = ROUTER_INFOS.copy()
|
||||
router_infos.pop("DeviceName")
|
||||
with patch(
|
||||
"homeassistant.components.netgear.async_setup_entry", return_value=True
|
||||
), patch("homeassistant.components.netgear.router.Netgear") as service_mock:
|
||||
service_mock.return_value.get_info = Mock(return_value=router_infos)
|
||||
service_mock.return_value.port = 80
|
||||
service_mock.return_value.ssl = False
|
||||
yield service_mock
|
||||
|
||||
|
||||
@pytest.fixture(name="service_failed")
|
||||
def mock_controller_service_failed():
|
||||
"""Mock a failed service."""
|
||||
with patch("homeassistant.components.netgear.router.Netgear") as service_mock:
|
||||
service_mock.return_value.login_try_port = Mock(return_value=None)
|
||||
service_mock.return_value.get_info = Mock(return_value=None)
|
||||
yield service_mock
|
||||
|
||||
|
||||
async def test_user(hass: HomeAssistant, service) -> None:
|
||||
"""Test user step."""
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
|
@ -138,7 +103,7 @@ async def test_user(hass: HomeAssistant, service) -> None:
|
|||
assert result["data"][CONF_PASSWORD] == PASSWORD
|
||||
|
||||
|
||||
async def test_user_connect_error(hass: HomeAssistant, service_failed) -> None:
|
||||
async def test_user_connect_error(hass: HomeAssistant, service) -> None:
|
||||
"""Test user step with connection failure."""
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_USER}
|
||||
|
@ -146,7 +111,23 @@ async def test_user_connect_error(hass: HomeAssistant, service_failed) -> None:
|
|||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
||||
assert result["step_id"] == "user"
|
||||
|
||||
service.return_value.get_info = Mock(return_value=None)
|
||||
|
||||
# Have to provide all config
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
{
|
||||
CONF_HOST: HOST,
|
||||
CONF_USERNAME: USERNAME,
|
||||
CONF_PASSWORD: PASSWORD,
|
||||
},
|
||||
)
|
||||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
||||
assert result["step_id"] == "user"
|
||||
assert result["errors"] == {"base": "info"}
|
||||
|
||||
service.return_value.login_try_port = Mock(return_value=None)
|
||||
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
{
|
||||
|
@ -160,7 +141,7 @@ async def test_user_connect_error(hass: HomeAssistant, service_failed) -> None:
|
|||
assert result["errors"] == {"base": "config"}
|
||||
|
||||
|
||||
async def test_user_incomplete_info(hass: HomeAssistant, service_incomplete) -> None:
|
||||
async def test_user_incomplete_info(hass: HomeAssistant, service) -> None:
|
||||
"""Test user step with incomplete device info."""
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN, context={"source": SOURCE_USER}
|
||||
|
@ -168,6 +149,10 @@ async def test_user_incomplete_info(hass: HomeAssistant, service_incomplete) ->
|
|||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
||||
assert result["step_id"] == "user"
|
||||
|
||||
router_infos = ROUTER_INFOS.copy()
|
||||
router_infos.pop("DeviceName")
|
||||
service.return_value.get_info = Mock(return_value=router_infos)
|
||||
|
||||
# Have to provide all config
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"],
|
||||
|
@ -313,7 +298,7 @@ async def test_ssdp(hass: HomeAssistant, service) -> None:
|
|||
assert result["data"][CONF_PASSWORD] == PASSWORD
|
||||
|
||||
|
||||
async def test_ssdp_port_5555(hass: HomeAssistant, service_5555) -> None:
|
||||
async def test_ssdp_port_5555(hass: HomeAssistant, service) -> None:
|
||||
"""Test ssdp step with port 5555."""
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
DOMAIN,
|
||||
|
@ -332,6 +317,9 @@ async def test_ssdp_port_5555(hass: HomeAssistant, service_5555) -> None:
|
|||
assert result["type"] == data_entry_flow.FlowResultType.FORM
|
||||
assert result["step_id"] == "user"
|
||||
|
||||
service.return_value.port = 5555
|
||||
service.return_value.ssl = True
|
||||
|
||||
result = await hass.config_entries.flow.async_configure(
|
||||
result["flow_id"], {CONF_PASSWORD: PASSWORD}
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue