async def test_connect_exception(hass, mock_entry): """Test platform setup.""" await setup.async_setup_component(hass, "persistent_notification", {}) mock_entry.add_to_hass(hass) mock_light_1 = MagicMock(spec=pyzerproc.Light) mock_light_1.address = "AA:BB:CC:DD:EE:FF" mock_light_1.name = "LEDBlue-CCDDEEFF" mock_light_1.is_connected.return_value = False mock_light_2 = MagicMock(spec=pyzerproc.Light) mock_light_2.address = "11:22:33:44:55:66" mock_light_2.name = "LEDBlue-33445566" mock_light_2.is_connected.return_value = False with patch( "homeassistant.components.zerproc.light.pyzerproc.discover", return_value=[mock_light_1, mock_light_2], ), patch.object( mock_light_1, "connect", side_effect=pyzerproc.ZerprocException("TEST") ): await hass.config_entries.async_setup(mock_entry.entry_id) await hass.async_block_till_done() # The exception connecting to light 1 should be captured, but light 2 # should still be added assert len(hass.data[DOMAIN]["addresses"]) == 1
async def test_init(hass, mock_entry): """Test platform setup.""" await setup.async_setup_component(hass, "persistent_notification", {}) mock_entry.add_to_hass(hass) mock_light_1 = MagicMock(spec=pyzerproc.Light) mock_light_1.address = "AA:BB:CC:DD:EE:FF" mock_light_1.name = "LEDBlue-CCDDEEFF" mock_light_1.connected = True mock_light_2 = MagicMock(spec=pyzerproc.Light) mock_light_2.address = "11:22:33:44:55:66" mock_light_2.name = "LEDBlue-33445566" mock_light_2.connected = True mock_state_1 = pyzerproc.LightState(False, (0, 0, 0)) mock_state_2 = pyzerproc.LightState(True, (0, 80, 255)) mock_light_1.get_state.return_value = mock_state_1 mock_light_2.get_state.return_value = mock_state_2 with patch( "homeassistant.components.zerproc.light.pyzerproc.discover", return_value=[mock_light_1, mock_light_2], ): await hass.config_entries.async_setup(mock_entry.entry_id) await hass.async_block_till_done() state = hass.states.get("light.ledblue_ccddeeff") assert state.state == STATE_OFF assert state.attributes == { ATTR_FRIENDLY_NAME: "LEDBlue-CCDDEEFF", ATTR_SUPPORTED_FEATURES: SUPPORT_BRIGHTNESS | SUPPORT_COLOR, ATTR_ICON: "mdi:string-lights", } state = hass.states.get("light.ledblue_33445566") assert state.state == STATE_ON assert state.attributes == { ATTR_FRIENDLY_NAME: "LEDBlue-33445566", ATTR_SUPPORTED_FEATURES: SUPPORT_BRIGHTNESS | SUPPORT_COLOR, ATTR_ICON: "mdi:string-lights", ATTR_BRIGHTNESS: 255, ATTR_HS_COLOR: (221.176, 100.0), ATTR_RGB_COLOR: (0, 80, 255), ATTR_XY_COLOR: (0.138, 0.08), } with patch.object(hass.loop, "stop"): await hass.async_stop() assert mock_light_1.disconnect.called assert mock_light_2.disconnect.called
async def mock_light(hass, mock_entry): """Create a mock light entity.""" await setup.async_setup_component(hass, "persistent_notification", {}) mock_entry.add_to_hass(hass) light = MagicMock(spec=pyzerproc.Light) light.address = "AA:BB:CC:DD:EE:FF" light.name = "LEDBlue-CCDDEEFF" light.connected = False mock_state = pyzerproc.LightState(False, (0, 0, 0)) with patch( "homeassistant.components.zerproc.light.pyzerproc.discover", return_value=[light], ), patch.object(light, "connect"), patch.object( light, "get_state", return_value=mock_state ): await hass.config_entries.async_setup(mock_entry.entry_id) await hass.async_block_till_done() light.connected = True return light
async def mock_light(hass, mock_entry): """Create a mock light entity.""" await setup.async_setup_component(hass, "persistent_notification", {}) light = MagicMock(spec=pykulersky.Light) light.address = "AA:BB:CC:11:22:33" light.name = "Bedroom" light.connected = False with patch( "homeassistant.components.kulersky.light.pykulersky.discover_bluetooth_devices", return_value=[{ "address": "AA:BB:CC:11:22:33", "name": "Bedroom", }], ): with patch( "homeassistant.components.kulersky.light.pykulersky.Light", return_value=light, ), patch.object(light, "connect") as mock_connect, patch.object( light, "get_color", return_value=(0, 0, 0, 0)): mock_entry.add_to_hass(hass) await hass.config_entries.async_setup(mock_entry.entry_id) await hass.async_block_till_done() assert mock_connect.called light.connected = True yield light
async def test_discovery_connection_error(hass, mock_entry): """Test that invalid devices are skipped.""" await setup.async_setup_component(hass, "persistent_notification", {}) light = MagicMock(spec=pykulersky.Light) light.address = "AA:BB:CC:11:22:33" light.name = "Bedroom" light.connected = False with patch( "homeassistant.components.kulersky.light.pykulersky.discover_bluetooth_devices", return_value=[{ "address": "AA:BB:CC:11:22:33", "name": "Bedroom", }], ): with patch("homeassistant.components.kulersky.light.pykulersky.Light" ) as mockdevice, patch.object( light, "connect", side_effect=pykulersky.PykulerskyException): mockdevice.return_value = light mock_entry.add_to_hass(hass) await hass.config_entries.async_setup(mock_entry.entry_id) await hass.async_block_till_done() # Assert entity was not added state = hass.states.get("light.bedroom") assert state is None
async def test_connect_exception(hass, mock_entry): """Test platform setup.""" await setup.async_setup_component(hass, "persistent_notification", {}) mock_entry.add_to_hass(hass) mock_light = MagicMock(spec=pyzerproc.Light) mock_light.address = "AA:BB:CC:DD:EE:FF" mock_light.name = "LEDBlue-CCDDEEFF" mock_light.connected = False with patch( "homeassistant.components.zerproc.light.pyzerproc.discover", return_value=[mock_light], ), patch.object( mock_light, "connect", side_effect=pyzerproc.ZerprocException("TEST") ): await hass.config_entries.async_setup(mock_entry.entry_id) await hass.async_block_till_done() # The exception should be captured and no entities should be added assert len(hass.data[DOMAIN]["addresses"]) == 0