Add SSDP discovery to unifi (#45364)
This commit is contained in:
parent
ded242a8fe
commit
b68c287ff1
6 changed files with 187 additions and 9 deletions
|
@ -3,7 +3,7 @@ from unittest.mock import patch
|
|||
|
||||
import aiounifi
|
||||
|
||||
from homeassistant import data_entry_flow
|
||||
from homeassistant import config_entries, data_entry_flow, setup
|
||||
from homeassistant.components.unifi.const import (
|
||||
CONF_ALLOW_BANDWIDTH_SENSORS,
|
||||
CONF_ALLOW_UPTIME_SENSORS,
|
||||
|
@ -466,3 +466,109 @@ async def test_simple_option_flow(hass):
|
|||
CONF_TRACK_DEVICES: False,
|
||||
CONF_BLOCK_CLIENT: [CLIENTS[0]["mac"]],
|
||||
}
|
||||
|
||||
|
||||
async def test_form_ssdp(hass):
|
||||
"""Test we get the form with ssdp source."""
|
||||
await setup.async_setup_component(hass, "persistent_notification", {})
|
||||
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
UNIFI_DOMAIN,
|
||||
context={"source": config_entries.SOURCE_SSDP},
|
||||
data={
|
||||
"friendlyName": "UniFi Dream Machine",
|
||||
"modelDescription": "UniFi Dream Machine Pro",
|
||||
"ssdp_location": "http://192.168.208.1:41417/rootDesc.xml",
|
||||
"serialNumber": "e0:63:da:20:14:a9",
|
||||
},
|
||||
)
|
||||
assert result["type"] == "form"
|
||||
assert result["step_id"] == "user"
|
||||
assert result["errors"] == {}
|
||||
context = next(
|
||||
flow["context"]
|
||||
for flow in hass.config_entries.flow.async_progress()
|
||||
if flow["flow_id"] == result["flow_id"]
|
||||
)
|
||||
assert context["title_placeholders"] == {
|
||||
"host": "192.168.208.1",
|
||||
"site": "default",
|
||||
}
|
||||
|
||||
|
||||
async def test_form_ssdp_aborts_if_host_already_exists(hass):
|
||||
"""Test we abort if the host is already configured."""
|
||||
await setup.async_setup_component(hass, "persistent_notification", {})
|
||||
entry = MockConfigEntry(
|
||||
domain=UNIFI_DOMAIN,
|
||||
data={"controller": {"host": "192.168.208.1", "site": "site_id"}},
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
UNIFI_DOMAIN,
|
||||
context={"source": config_entries.SOURCE_SSDP},
|
||||
data={
|
||||
"friendlyName": "UniFi Dream Machine",
|
||||
"modelDescription": "UniFi Dream Machine Pro",
|
||||
"ssdp_location": "http://192.168.208.1:41417/rootDesc.xml",
|
||||
"serialNumber": "e0:63:da:20:14:a9",
|
||||
},
|
||||
)
|
||||
assert result["type"] == "abort"
|
||||
assert result["reason"] == "already_configured"
|
||||
|
||||
|
||||
async def test_form_ssdp_aborts_if_serial_already_exists(hass):
|
||||
"""Test we abort if the serial is already configured."""
|
||||
await setup.async_setup_component(hass, "persistent_notification", {})
|
||||
entry = MockConfigEntry(
|
||||
domain=UNIFI_DOMAIN,
|
||||
data={"controller": {"host": "1.2.3.4", "site": "site_id"}},
|
||||
unique_id="e0:63:da:20:14:a9",
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
UNIFI_DOMAIN,
|
||||
context={"source": config_entries.SOURCE_SSDP},
|
||||
data={
|
||||
"friendlyName": "UniFi Dream Machine",
|
||||
"modelDescription": "UniFi Dream Machine Pro",
|
||||
"ssdp_location": "http://192.168.208.1:41417/rootDesc.xml",
|
||||
"serialNumber": "e0:63:da:20:14:a9",
|
||||
},
|
||||
)
|
||||
assert result["type"] == "abort"
|
||||
assert result["reason"] == "already_configured"
|
||||
|
||||
|
||||
async def test_form_ssdp_gets_form_with_ignored_entry(hass):
|
||||
"""Test we can still setup if there is an ignored entry."""
|
||||
await setup.async_setup_component(hass, "persistent_notification", {})
|
||||
entry = MockConfigEntry(
|
||||
domain=UNIFI_DOMAIN,
|
||||
data={},
|
||||
source=config_entries.SOURCE_IGNORE,
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
result = await hass.config_entries.flow.async_init(
|
||||
UNIFI_DOMAIN,
|
||||
context={"source": config_entries.SOURCE_SSDP},
|
||||
data={
|
||||
"friendlyName": "UniFi Dream Machine New",
|
||||
"modelDescription": "UniFi Dream Machine Pro",
|
||||
"ssdp_location": "http://1.2.3.4:41417/rootDesc.xml",
|
||||
"serialNumber": "e0:63:da:20:14:a9",
|
||||
},
|
||||
)
|
||||
assert result["type"] == "form"
|
||||
assert result["step_id"] == "user"
|
||||
assert result["errors"] == {}
|
||||
context = next(
|
||||
flow["context"]
|
||||
for flow in hass.config_entries.flow.async_progress()
|
||||
if flow["flow_id"] == result["flow_id"]
|
||||
)
|
||||
assert context["title_placeholders"] == {
|
||||
"host": "1.2.3.4",
|
||||
"site": "default",
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue