Add support for Reolink Floodlight PoE/WiFi (#146778)

* Add support for Floodlight PoE/WiFi

* Adjust test

* Add test
This commit is contained in:
starkillerOG
2025-06-23 20:43:01 +02:00
committed by GitHub
parent 3806e5b65c
commit 2862f76fca
6 changed files with 86 additions and 4 deletions

View File

@@ -10,6 +10,7 @@ from reolink_aio.exceptions import ReolinkError
from homeassistant.components.reolink.config_flow import DEFAULT_PROTOCOL
from homeassistant.components.reolink.const import (
CONF_BC_ONLY,
CONF_BC_PORT,
CONF_SUPPORTS_PRIVACY_MODE,
CONF_USE_HTTPS,
@@ -219,6 +220,7 @@ def config_entry(hass: HomeAssistant) -> MockConfigEntry:
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_SUPPORTS_PRIVACY_MODE: TEST_PRIVACY,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: False,
},
options={
CONF_PROTOCOL: DEFAULT_PROTOCOL,

View File

@@ -19,6 +19,7 @@ from homeassistant import config_entries
from homeassistant.components.reolink import DEVICE_UPDATE_INTERVAL
from homeassistant.components.reolink.config_flow import DEFAULT_PROTOCOL
from homeassistant.components.reolink.const import (
CONF_BC_ONLY,
CONF_BC_PORT,
CONF_SUPPORTS_PRIVACY_MODE,
CONF_USE_HTTPS,
@@ -91,6 +92,7 @@ async def test_config_flow_manual_success(
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_SUPPORTS_PRIVACY_MODE: TEST_PRIVACY,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: False,
}
assert result["options"] == {
CONF_PROTOCOL: DEFAULT_PROTOCOL,
@@ -144,6 +146,7 @@ async def test_config_flow_privacy_success(
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_SUPPORTS_PRIVACY_MODE: TEST_PRIVACY,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: False,
}
assert result["options"] == {
CONF_PROTOCOL: DEFAULT_PROTOCOL,
@@ -153,6 +156,49 @@ async def test_config_flow_privacy_success(
reolink_connect.baichuan.privacy_mode.return_value = False
async def test_config_flow_baichuan_only(
hass: HomeAssistant, reolink_connect: MagicMock, mock_setup_entry: MagicMock
) -> None:
"""Successful flow manually initialized by the user for baichuan only device."""
reolink_connect.baichuan_only = True
result = await hass.config_entries.flow.async_init(
DOMAIN, context={"source": config_entries.SOURCE_USER}
)
assert result["type"] is FlowResultType.FORM
assert result["step_id"] == "user"
assert result["errors"] == {}
result = await hass.config_entries.flow.async_configure(
result["flow_id"],
{
CONF_USERNAME: TEST_USERNAME,
CONF_PASSWORD: TEST_PASSWORD,
CONF_HOST: TEST_HOST,
},
)
assert result["type"] is FlowResultType.CREATE_ENTRY
assert result["title"] == TEST_NVR_NAME
assert result["data"] == {
CONF_HOST: TEST_HOST,
CONF_USERNAME: TEST_USERNAME,
CONF_PASSWORD: TEST_PASSWORD,
CONF_PORT: TEST_PORT,
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_SUPPORTS_PRIVACY_MODE: TEST_PRIVACY,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: True,
}
assert result["options"] == {
CONF_PROTOCOL: DEFAULT_PROTOCOL,
}
assert result["result"].unique_id == TEST_MAC
reolink_connect.baichuan_only = False
async def test_config_flow_errors(
hass: HomeAssistant, reolink_connect: MagicMock, mock_setup_entry: MagicMock
) -> None:
@@ -308,6 +354,7 @@ async def test_config_flow_errors(
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_SUPPORTS_PRIVACY_MODE: TEST_PRIVACY,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: False,
}
assert result["options"] == {
CONF_PROTOCOL: DEFAULT_PROTOCOL,
@@ -329,6 +376,7 @@ async def test_options_flow(hass: HomeAssistant, mock_setup_entry: MagicMock) ->
CONF_PORT: TEST_PORT,
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: False,
},
options={
CONF_PROTOCOL: "rtsp",
@@ -368,6 +416,7 @@ async def test_reauth(hass: HomeAssistant, mock_setup_entry: MagicMock) -> None:
CONF_PORT: TEST_PORT,
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: False,
},
options={
CONF_PROTOCOL: DEFAULT_PROTOCOL,
@@ -414,6 +463,7 @@ async def test_reauth_abort_unique_id_mismatch(
CONF_PORT: TEST_PORT,
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: False,
},
options={
CONF_PROTOCOL: DEFAULT_PROTOCOL,
@@ -484,6 +534,7 @@ async def test_dhcp_flow(hass: HomeAssistant, mock_setup_entry: MagicMock) -> No
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_SUPPORTS_PRIVACY_MODE: TEST_PRIVACY,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: False,
}
assert result["options"] == {
CONF_PROTOCOL: DEFAULT_PROTOCOL,
@@ -507,6 +558,7 @@ async def test_dhcp_ip_update_aborted_if_wrong_mac(
CONF_PORT: TEST_PORT,
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: False,
},
options={
CONF_PROTOCOL: DEFAULT_PROTOCOL,
@@ -548,6 +600,7 @@ async def test_dhcp_ip_update_aborted_if_wrong_mac(
timeout=DEFAULT_TIMEOUT,
aiohttp_get_session_callback=ANY,
bc_port=TEST_BC_PORT,
bc_only=False,
)
assert expected_call in reolink_connect_class.call_args_list
@@ -606,6 +659,7 @@ async def test_dhcp_ip_update(
CONF_PORT: TEST_PORT,
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: False,
},
options={
CONF_PROTOCOL: DEFAULT_PROTOCOL,
@@ -649,6 +703,7 @@ async def test_dhcp_ip_update(
timeout=DEFAULT_TIMEOUT,
aiohttp_get_session_callback=ANY,
bc_port=TEST_BC_PORT,
bc_only=False,
)
assert expected_call in reolink_connect_class.call_args_list
@@ -686,6 +741,7 @@ async def test_dhcp_ip_update_ingnored_if_still_connected(
CONF_PORT: TEST_PORT,
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: False,
},
options={
CONF_PROTOCOL: DEFAULT_PROTOCOL,
@@ -718,6 +774,7 @@ async def test_dhcp_ip_update_ingnored_if_still_connected(
timeout=DEFAULT_TIMEOUT,
aiohttp_get_session_callback=ANY,
bc_port=TEST_BC_PORT,
bc_only=False,
)
assert expected_call in reolink_connect_class.call_args_list
@@ -748,6 +805,7 @@ async def test_reconfig(hass: HomeAssistant, mock_setup_entry: MagicMock) -> Non
CONF_PORT: TEST_PORT,
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: False,
},
options={
CONF_PROTOCOL: DEFAULT_PROTOCOL,
@@ -795,6 +853,7 @@ async def test_reconfig_abort_unique_id_mismatch(
CONF_PORT: TEST_PORT,
CONF_USE_HTTPS: TEST_USE_HTTPS,
CONF_BC_PORT: TEST_BC_PORT,
CONF_BC_ONLY: False,
},
options={
CONF_PROTOCOL: DEFAULT_PROTOCOL,