async def test_reauth_auth_failed(hass: HomeAssistant, fritz: Mock): """Test starting a reauthentication flow with authentication failure.""" fritz().login.side_effect = LoginError("Boom") mock_config = MockConfigEntry(domain=DOMAIN, data=MOCK_USER_DATA) mock_config.add_to_hass(hass) result = await hass.config_entries.flow.async_init( DOMAIN, context={ "source": SOURCE_REAUTH, "entry_id": mock_config.entry_id }, data=mock_config.data, ) assert result["type"] == RESULT_TYPE_FORM assert result["step_id"] == "reauth_confirm" result = await hass.config_entries.flow.async_configure( result["flow_id"], user_input={ CONF_USERNAME: "******", CONF_PASSWORD: "******", }, ) assert result["type"] == RESULT_TYPE_FORM assert result["step_id"] == "reauth_confirm" assert result["errors"]["base"] == "invalid_auth"
async def test_user_auth_failed(hass: HomeAssistantType, fritz: Mock): """Test starting a flow by user with authentication failure.""" fritz().login.side_effect = [LoginError("Boom"), mock.DEFAULT] result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": "user"}, data=MOCK_USER_DATA) assert result["type"] == "form" assert result["step_id"] == "user" assert result["errors"]["base"] == "auth_failed"
async def test_user_auth_failed(opp: OpenPeerPower, fritz: Mock): """Test starting a flow by user with authentication failure.""" fritz().login.side_effect = [LoginError("Boom"), mock.DEFAULT] result = await opp.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_USER}, data=MOCK_USER_DATA) assert result["type"] == RESULT_TYPE_FORM assert result["step_id"] == "user" assert result["errors"]["base"] == "invalid_auth"
async def test_coordinator_update_after_password_change( hass: HomeAssistant, fritz: Mock): """Test coordinator after password change.""" entry = MockConfigEntry( domain=FB_DOMAIN, data=MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0], unique_id="any", ) entry.add_to_hass(hass) fritz().get_devices.side_effect = HTTPError() fritz().login.side_effect = ["", LoginError("some_user")] assert not await hass.config_entries.async_setup(entry.entry_id) assert fritz().get_devices.call_count == 1 assert fritz().login.call_count == 2
async def test_raise_config_entry_not_ready_when_offline(opp: OpenPeerPower): """Config entry state is SETUP_RETRY when fritzbox is offline.""" entry = MockConfigEntry( domain=FB_DOMAIN, data={CONF_HOST: "any", **MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0]}, unique_id="any", ) entry.add_to_opp(opp) with patch( "openpeerpower.components.fritzbox.Fritzhome.login", side_effect=LoginError("user"), ) as mock_login: await opp.config_entries.async_setup(entry.entry_id) await opp.async_block_till_done() mock_login.assert_called_once() entries = opp.config_entries.async_entries() config_entry = entries[0] assert config_entry.state is ConfigEntryState.SETUP_ERROR
async def test_ssdp_auth_failed(hass: HomeAssistantType, fritz: Mock): """Test starting a flow from discovery with authentication failure.""" fritz().login.side_effect = LoginError("Boom") result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": "ssdp"}, data=MOCK_SSDP_DATA) assert result["type"] == "form" assert result["step_id"] == "confirm" assert result["errors"] == {} result = await hass.config_entries.flow.async_configure( result["flow_id"], user_input={ CONF_PASSWORD: "******", CONF_USERNAME: "******" }, ) assert result["type"] == "form" assert result["step_id"] == "confirm" assert result["errors"]["base"] == "auth_failed"
async def test_ssdp_auth_failed(opp: OpenPeerPower, fritz: Mock): """Test starting a flow from discovery with authentication failure.""" fritz().login.side_effect = LoginError("Boom") result = await opp.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_SSDP}, data=MOCK_SSDP_DATA) assert result["type"] == RESULT_TYPE_FORM assert result["step_id"] == "confirm" assert result["errors"] == {} result = await opp.config_entries.flow.async_configure( result["flow_id"], user_input={ CONF_PASSWORD: "******", CONF_USERNAME: "******" }, ) assert result["type"] == RESULT_TYPE_FORM assert result["step_id"] == "confirm" assert result["errors"]["base"] == "invalid_auth"
async def test_raise_config_entry_not_ready_when_offline(hass: HomeAssistant): """Config entry state is ENTRY_STATE_SETUP_RETRY when fritzbox is offline.""" entry = MockConfigEntry( domain=FB_DOMAIN, data={ CONF_HOST: "any", **MOCK_CONFIG[FB_DOMAIN][CONF_DEVICES][0] }, unique_id="any", ) entry.add_to_hass(hass) with patch( "homeassistant.components.fritzbox.Fritzhome.login", side_effect=LoginError("user"), ) as mock_login: await hass.config_entries.async_setup(entry.entry_id) await hass.async_block_till_done() mock_login.assert_called_once() entries = hass.config_entries.async_entries() config_entry = entries[0] assert config_entry.state == ENTRY_STATE_SETUP_ERROR