async def async_step_zeroconf( self, discovery_info: zeroconf.ZeroconfServiceInfo) -> FlowResult: """Handle zeroconf discovery.""" if not discovery_info.get(zeroconf.ATTR_NAME, "").startswith("Bosch SHC"): return self.async_abort(reason="not_bosch_shc") try: hosts = (discovery_info[zeroconf.ATTR_HOST] if isinstance( discovery_info[zeroconf.ATTR_HOST], list) else [discovery_info[zeroconf.ATTR_HOST]]) for host in hosts: if host.startswith("169."): # skip link local address continue self.info = await self._get_info(host) self.host = host if self.info is None or self.host is None: return self.async_abort(reason="cannot_connect") except SHCConnectionError: return self.async_abort(reason="cannot_connect") local_name = discovery_info[zeroconf.ATTR_HOSTNAME][:-1] node_name = local_name[:-len(".local")] await self.async_set_unique_id(self.info["unique_id"]) self._abort_if_unique_id_configured({CONF_HOST: self.host}) self.context["title_placeholders"] = {"name": node_name} return await self.async_step_confirm_discovery()
async def test_zeroconf_form_not_sonos( hass: core.HomeAssistant, zeroconf_payload: zeroconf.ZeroconfServiceInfo): """Test we abort on non-sonos devices.""" mock_manager = hass.data[DATA_SONOS_DISCOVERY_MANAGER] = MagicMock() zeroconf_payload.hostname = "not-aaa" result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_ZEROCONF}, data=zeroconf_payload, ) assert result["type"] == "abort" assert result["reason"] == "not_sonos_device" assert len(mock_manager.mock_calls) == 0
async def test_zeroconf_flow_create_entry( hass: HomeAssistant, device1_requests_mock_standby: Mocker) -> None: """Test the zeroconf flow from start to finish.""" result = await hass.config_entries.flow.async_init( DOMAIN, context={CONF_SOURCE: SOURCE_ZEROCONF}, data=ZeroconfServiceInfo( host=DEVICE_1_IP, addresses=[DEVICE_1_IP], port=8090, hostname="Bose-SM2-060000000001.local.", type="_soundtouch._tcp.local.", name=f"{DEVICE_1_NAME}._soundtouch._tcp.local.", properties={ "DESCRIPTION": "SoundTouch", "MAC": DEVICE_1_ID, "MANUFACTURER": "Bose Corporation", "MODEL": "SoundTouch", }, ), ) assert result.get("type") == FlowResultType.FORM assert result.get("step_id") == "zeroconf_confirm" assert result.get("description_placeholders") == {"name": DEVICE_1_NAME} with patch("homeassistant.components.soundtouch.async_setup_entry", return_value=True) as mock_setup_entry: result = await hass.config_entries.flow.async_configure( result["flow_id"], user_input={}) assert len(mock_setup_entry.mock_calls) == 1 assert result.get("type") == FlowResultType.CREATE_ENTRY assert result.get("title") == DEVICE_1_NAME assert result.get("data") == { CONF_HOST: DEVICE_1_IP, } assert "result" in result assert result["result"].unique_id == DEVICE_1_ID assert result["result"].title == DEVICE_1_NAME
TEST_PASSWORD2 = "test-password2" TEST_HUB = "somfy_europe" TEST_HUB2 = "hi_kumo_europe" TEST_GATEWAY_ID = "1234-5678-9123" TEST_GATEWAY_ID2 = "4321-5678-9123" MOCK_GATEWAY_RESPONSE = [Mock(id=TEST_GATEWAY_ID)] MOCK_GATEWAY2_RESPONSE = [Mock(id=TEST_GATEWAY_ID2)] FAKE_ZERO_CONF_INFO = ZeroconfServiceInfo( host="192.168.0.51", addresses=["192.168.0.51"], port=443, hostname=f"gateway-{TEST_GATEWAY_ID}.local.", type="_kizbox._tcp.local.", name=f"gateway-{TEST_GATEWAY_ID}._kizbox._tcp.local.", properties={ "api_version": "1", "gateway_pin": TEST_GATEWAY_ID, "fw_version": "2021.5.4-29", }, ) async def test_form(hass: HomeAssistant) -> None: """Test we get the form.""" result = await hass.config_entries.flow.async_init( DOMAIN, context={"source": config_entries.SOURCE_USER}) assert result["type"] == "form" assert result["errors"] == {}
TEST_HOST = "1.1.1.1" TEST_HOSTNAME = "smileabcdef" TEST_HOSTNAME2 = "stretchabc" TEST_PASSWORD = "******" TEST_PORT = 81 TEST_USERNAME = "******" TEST_USERNAME2 = "stretch" TEST_DISCOVERY = ZeroconfServiceInfo( host=TEST_HOST, addresses=[TEST_HOST], hostname=f"{TEST_HOSTNAME}.local.", name="mock_name", port=DEFAULT_PORT, properties={ "product": "smile", "version": "1.2.3", "hostname": f"{TEST_HOSTNAME}.local.", }, type="mock_type", ) TEST_DISCOVERY2 = ZeroconfServiceInfo( host=TEST_HOST, addresses=[TEST_HOST], hostname=f"{TEST_HOSTNAME2}.local.", name="mock_name", port=DEFAULT_PORT, properties={ "product": "stretch",
DEVICE_ID = "98F33163" MODULE = "homeassistant.components.lookin" MODULE_CONFIG_FLOW = "homeassistant.components.lookin.config_flow" IP_ADDRESS = "127.0.0.1" DEVICE_NAME = "Living Room" DEFAULT_ENTRY_TITLE = DEVICE_NAME ZC_NAME = f"LOOKin_{DEVICE_ID}" ZC_TYPE = "_lookin._tcp." ZEROCONF_DATA = ZeroconfServiceInfo( host=IP_ADDRESS, addresses=[IP_ADDRESS], hostname=f"{ZC_NAME.lower()}.local.", port=80, type=ZC_TYPE, name=ZC_NAME, properties={}, ) def _mocked_climate() -> Climate: climate = MagicMock(auto_spec=Climate) return climate def _mocked_remote() -> Remote: remote = MagicMock(auto_spec=Remote) return remote