async def test_remove_entry_exceptions_caught(hass, mock_light, mock_entry): """Assert that disconnect exceptions are caught.""" mock_light.disconnect.side_effect = pykulersky.PykulerskyException( "Mock error") await hass.config_entries.async_remove(mock_entry.entry_id) assert mock_light.disconnect.called
async def test_flow_exceptions_caught(hass): """Test we get the form.""" await setup.async_setup_component(hass, "persistent_notification", {}) result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_USER}) assert result["type"] == "form" assert result["errors"] is None with patch( "homeassistant.components.kulersky.config_flow.pykulersky.discover", side_effect=pykulersky.PykulerskyException("TEST"), ), patch("homeassistant.components.kulersky.async_setup", return_value=True) as mock_setup, patch( "homeassistant.components.kulersky.async_setup_entry", return_value=True, ) as mock_setup_entry: result2 = await hass.config_entries.flow.async_configure( result["flow_id"], {}, ) assert result2["type"] == "abort" assert result2["reason"] == "no_devices_found" await hass.async_block_till_done() assert len(mock_setup.mock_calls) == 0 assert len(mock_setup_entry.mock_calls) == 0
async def test_light_update(hass, mock_light): """Test KulerSkyLight update.""" utcnow = dt_util.utcnow() state = hass.states.get("light.bedroom") assert state.state == STATE_OFF assert state.attributes == { ATTR_FRIENDLY_NAME: "Bedroom", ATTR_SUPPORTED_FEATURES: SUPPORT_BRIGHTNESS | SUPPORT_COLOR | SUPPORT_WHITE_VALUE, } # Test an exception during discovery with patch.object(mock_light, "get_color", side_effect=pykulersky.PykulerskyException("TEST")): utcnow = utcnow + SCAN_INTERVAL async_fire_time_changed(hass, utcnow) await hass.async_block_till_done() state = hass.states.get("light.bedroom") assert state.state == STATE_UNAVAILABLE assert state.attributes == { ATTR_FRIENDLY_NAME: "Bedroom", ATTR_SUPPORTED_FEATURES: SUPPORT_BRIGHTNESS | SUPPORT_COLOR | SUPPORT_WHITE_VALUE, } with patch.object( mock_light, "get_color", return_value=(80, 160, 200, 240), ): utcnow = utcnow + SCAN_INTERVAL async_fire_time_changed(hass, utcnow) await hass.async_block_till_done() state = hass.states.get("light.bedroom") assert state.state == STATE_ON assert state.attributes == { ATTR_FRIENDLY_NAME: "Bedroom", ATTR_SUPPORTED_FEATURES: SUPPORT_BRIGHTNESS | SUPPORT_COLOR | SUPPORT_WHITE_VALUE, ATTR_BRIGHTNESS: 200, ATTR_HS_COLOR: (200, 60), ATTR_RGB_COLOR: (102, 203, 255), ATTR_WHITE_VALUE: 240, ATTR_XY_COLOR: (0.184, 0.261), }
async def test_light_update(opp, mock_light): """Test KulerSkyLight update.""" utcnow = dt_util.utcnow() state = opp.states.get("light.bedroom") assert state.state == STATE_OFF assert state.attributes == { ATTR_FRIENDLY_NAME: "Bedroom", ATTR_SUPPORTED_COLOR_MODES: [COLOR_MODE_HS, COLOR_MODE_RGBW], ATTR_SUPPORTED_FEATURES: SUPPORT_BRIGHTNESS | SUPPORT_COLOR | SUPPORT_WHITE_VALUE, } # Test an exception during discovery mock_light.get_color.side_effect = pykulersky.PykulerskyException("TEST") utcnow = utcnow + SCAN_INTERVAL async_fire_time_changed(opp, utcnow) await opp.async_block_till_done() state = opp.states.get("light.bedroom") assert state.state == STATE_UNAVAILABLE assert state.attributes == { ATTR_FRIENDLY_NAME: "Bedroom", ATTR_SUPPORTED_COLOR_MODES: [COLOR_MODE_HS, COLOR_MODE_RGBW], ATTR_SUPPORTED_FEATURES: SUPPORT_BRIGHTNESS | SUPPORT_COLOR | SUPPORT_WHITE_VALUE, } mock_light.get_color.side_effect = None mock_light.get_color.return_value = (80, 160, 200, 240) utcnow = utcnow + SCAN_INTERVAL async_fire_time_changed(opp, utcnow) await opp.async_block_till_done() state = opp.states.get("light.bedroom") assert state.state == STATE_ON assert state.attributes == { ATTR_FRIENDLY_NAME: "Bedroom", ATTR_SUPPORTED_COLOR_MODES: [COLOR_MODE_HS, COLOR_MODE_RGBW], ATTR_SUPPORTED_FEATURES: SUPPORT_BRIGHTNESS | SUPPORT_COLOR | SUPPORT_WHITE_VALUE, ATTR_COLOR_MODE: COLOR_MODE_RGBW, ATTR_BRIGHTNESS: 200, ATTR_HS_COLOR: (200, 60), ATTR_RGB_COLOR: (102, 203, 255), ATTR_RGBW_COLOR: (102, 203, 255, 240), ATTR_WHITE_VALUE: 240, ATTR_XY_COLOR: (0.184, 0.261), }
async def test_light_update(hass, mock_light): """Test KulerSkyLight update.""" utcnow = dt_util.utcnow() state = hass.states.get("light.bedroom") assert state.state == STATE_OFF assert dict(state.attributes) == { ATTR_FRIENDLY_NAME: "Bedroom", ATTR_SUPPORTED_COLOR_MODES: [ColorMode.RGBW], ATTR_SUPPORTED_FEATURES: 0, } # Test an exception during discovery mock_light.get_color.side_effect = pykulersky.PykulerskyException("TEST") utcnow = utcnow + SCAN_INTERVAL async_fire_time_changed(hass, utcnow) await hass.async_block_till_done() state = hass.states.get("light.bedroom") assert state.state == STATE_UNAVAILABLE assert dict(state.attributes) == { ATTR_FRIENDLY_NAME: "Bedroom", ATTR_SUPPORTED_COLOR_MODES: [ColorMode.RGBW], ATTR_SUPPORTED_FEATURES: 0, } mock_light.get_color.side_effect = None mock_light.get_color.return_value = (80, 160, 255, 0) utcnow = utcnow + SCAN_INTERVAL async_fire_time_changed(hass, utcnow) await hass.async_block_till_done() state = hass.states.get("light.bedroom") assert state.state == STATE_ON assert dict(state.attributes) == { ATTR_FRIENDLY_NAME: "Bedroom", ATTR_SUPPORTED_COLOR_MODES: [ColorMode.RGBW], ATTR_SUPPORTED_FEATURES: 0, ATTR_COLOR_MODE: ColorMode.RGBW, ATTR_BRIGHTNESS: 255, ATTR_HS_COLOR: (approx(212.571), approx(68.627)), ATTR_RGB_COLOR: (80, 160, 255), ATTR_RGBW_COLOR: (80, 160, 255, 0), ATTR_XY_COLOR: (approx(0.17), approx(0.193)), } mock_light.get_color.side_effect = None mock_light.get_color.return_value = (80, 160, 200, 255) utcnow = utcnow + SCAN_INTERVAL async_fire_time_changed(hass, utcnow) await hass.async_block_till_done() state = hass.states.get("light.bedroom") assert state.state == STATE_ON assert dict(state.attributes) == { ATTR_FRIENDLY_NAME: "Bedroom", ATTR_SUPPORTED_COLOR_MODES: [ColorMode.RGBW], ATTR_SUPPORTED_FEATURES: 0, ATTR_COLOR_MODE: ColorMode.RGBW, ATTR_BRIGHTNESS: 255, ATTR_HS_COLOR: (approx(199.701), approx(26.275)), ATTR_RGB_COLOR: (188, 233, 255), ATTR_RGBW_COLOR: (80, 160, 200, 255), ATTR_XY_COLOR: (approx(0.259), approx(0.306)), } mock_light.get_color.side_effect = None mock_light.get_color.return_value = (80, 160, 200, 240) utcnow = utcnow + SCAN_INTERVAL async_fire_time_changed(hass, utcnow) await hass.async_block_till_done() state = hass.states.get("light.bedroom") assert state.state == STATE_ON assert dict(state.attributes) == { ATTR_FRIENDLY_NAME: "Bedroom", ATTR_SUPPORTED_COLOR_MODES: [ColorMode.RGBW], ATTR_SUPPORTED_FEATURES: 0, ATTR_COLOR_MODE: ColorMode.RGBW, ATTR_BRIGHTNESS: 240, ATTR_HS_COLOR: (approx(200.0), approx(27.059)), ATTR_RGB_COLOR: (186, 232, 255), ATTR_RGBW_COLOR: (85, 170, 212, 255), ATTR_XY_COLOR: (approx(0.257), approx(0.305)), }