async def test_availability(hass): """Ensure that we mark the entities unavailable correctly when device causes an error.""" await init_integration(hass) state = hass.states.get("sensor.nettigo_air_monitor_bme280_temperature") assert state assert state.state != STATE_UNAVAILABLE assert state.state == "7.6" future = utcnow() + timedelta(minutes=6) with patch( "homeassistant.components.nam.NettigoAirMonitor._async_get_data", side_effect=ApiError("API Error"), ): async_fire_time_changed(hass, future) await hass.async_block_till_done() state = hass.states.get("sensor.nettigo_air_monitor_bme280_temperature") assert state assert state.state == STATE_UNAVAILABLE future = utcnow() + timedelta(minutes=12) with patch( "homeassistant.components.nam.NettigoAirMonitor._async_get_data", return_value=nam_data, ): async_fire_time_changed(hass, future) await hass.async_block_till_done() state = hass.states.get("sensor.nettigo_air_monitor_bme280_temperature") assert state assert state.state != STATE_UNAVAILABLE assert state.state == "7.6"
async def test_reauth_unsuccessful(hass): """Test starting a reauthentication flow.""" entry = MockConfigEntry( domain=DOMAIN, title="10.10.2.3", unique_id="aa:bb:cc:dd:ee:ff", data={"host": "10.10.2.3"}, ) entry.add_to_hass(hass) with patch( "homeassistant.components.nam.NettigoAirMonitor.initialize", side_effect=ApiError("API Error"), ): result = await hass.config_entries.flow.async_init( DOMAIN, context={ "source": SOURCE_REAUTH, "entry_id": entry.entry_id }, data=entry.data, ) assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert result["step_id"] == "reauth_confirm" result = await hass.config_entries.flow.async_configure( result["flow_id"], user_input=VALID_AUTH, ) assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT assert result["reason"] == "reauth_unsuccessful"
async def test_config_not_ready(hass): """Test for setup failure if the connection to the device fails.""" entry = MockConfigEntry( domain=DOMAIN, title="10.10.2.3", unique_id="aa:bb:cc:dd:ee:ff", data={"host": "10.10.2.3"}, ) with patch( "homeassistant.components.nam.NettigoAirMonitor.initialize", side_effect=ApiError("API Error"), ): entry.add_to_hass(hass) await hass.config_entries.async_setup(entry.entry_id) assert entry.state is ConfigEntryState.SETUP_RETRY
assert result["type"] == data_entry_flow.RESULT_TYPE_FORM assert result["step_id"] == "reauth_confirm" result = await hass.config_entries.flow.async_configure( result["flow_id"], user_input=VALID_AUTH, ) assert result["type"] == data_entry_flow.RESULT_TYPE_ABORT assert result["reason"] == "reauth_unsuccessful" @pytest.mark.parametrize( "error", [ (ApiError("API Error"), "cannot_connect"), (AuthFailed("Auth Error"), "invalid_auth"), (asyncio.TimeoutError, "cannot_connect"), (ValueError, "unknown"), ], ) async def test_form_with_auth_errors(hass, error): """Test we handle errors when auth is required.""" exc, base_error = error with patch( "homeassistant.components.nam.NettigoAirMonitor.initialize", side_effect=AuthFailed("Auth Error"), ): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_USER},
result = await hass.config_entries.flow.async_configure( result["flow_id"], VALID_CONFIG, ) await hass.async_block_till_done() assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY assert result["title"] == "10.10.2.3" assert result["data"]["host"] == "10.10.2.3" assert len(mock_setup_entry.mock_calls) == 1 @pytest.mark.parametrize( "error", [ (ApiError("Invalid response from device 10.10.2.3: 404"), "cannot_connect"), (asyncio.TimeoutError, "cannot_connect"), (ValueError, "unknown"), ], ) async def test_form_errors(hass, error): """Test we handle errors.""" exc, base_error = error with patch( "homeassistant.components.nam.NettigoAirMonitor.async_get_mac_address", side_effect=exc, ): result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": SOURCE_USER},
result = await hass.config_entries.flow.async_configure( result["flow_id"], VALID_CONFIG, ) await hass.async_block_till_done() assert result["type"] == data_entry_flow.RESULT_TYPE_CREATE_ENTRY assert result["title"] == "10.10.2.3" assert result["data"]["host"] == "10.10.2.3" assert len(mock_setup_entry.mock_calls) == 1 @pytest.mark.parametrize( "error", [ (ApiError("Invalid response from device 10.10.2.3: 404"), "cannot_connect"), (asyncio.TimeoutError, "cannot_connect"), (ValueError, "unknown"), ], ) async def test_form_errors(hass, error): """Test we handle errors.""" exc, base_error = error with patch( "homeassistant.components.nam.NettigoAirMonitor.async_get_mac_address", side_effect=exc, ): result = await hass.config_entries.flow.async_init( DOMAIN,