Netgear catch no info error (#100212)

pull/100755/head
starkillerOG 2023-09-13 15:32:03 +02:00 committed by Franck Nijhof
parent f50d47121e
commit d2b5ffc9fc
No known key found for this signature in database
GPG Key ID: D62583BA8AB11CA3
3 changed files with 32 additions and 41 deletions

View File

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

View File

@ -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%]",

View File

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