mirror of
https://github.com/home-assistant/core.git
synced 2025-09-08 14:21:33 +02:00
Bump aioesphomeapi to 39.0.0 (#150523)
This commit is contained in:
@@ -2,7 +2,6 @@
|
|||||||
|
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
import asyncio
|
|
||||||
import base64
|
import base64
|
||||||
from functools import partial
|
from functools import partial
|
||||||
import logging
|
import logging
|
||||||
@@ -15,7 +14,6 @@ from aioesphomeapi import (
|
|||||||
APIVersion,
|
APIVersion,
|
||||||
DeviceInfo as EsphomeDeviceInfo,
|
DeviceInfo as EsphomeDeviceInfo,
|
||||||
EncryptionPlaintextAPIError,
|
EncryptionPlaintextAPIError,
|
||||||
EntityInfo,
|
|
||||||
HomeassistantServiceCall,
|
HomeassistantServiceCall,
|
||||||
InvalidAuthAPIError,
|
InvalidAuthAPIError,
|
||||||
InvalidEncryptionKeyAPIError,
|
InvalidEncryptionKeyAPIError,
|
||||||
@@ -63,7 +61,6 @@ from homeassistant.helpers.issue_registry import (
|
|||||||
)
|
)
|
||||||
from homeassistant.helpers.service import async_set_service_schema
|
from homeassistant.helpers.service import async_set_service_schema
|
||||||
from homeassistant.helpers.template import Template
|
from homeassistant.helpers.template import Template
|
||||||
from homeassistant.util.async_ import create_eager_task
|
|
||||||
|
|
||||||
from .bluetooth import async_connect_scanner
|
from .bluetooth import async_connect_scanner
|
||||||
from .const import (
|
from .const import (
|
||||||
@@ -425,14 +422,7 @@ class ESPHomeManager:
|
|||||||
unique_id_is_mac_address = unique_id and ":" in unique_id
|
unique_id_is_mac_address = unique_id and ":" in unique_id
|
||||||
if entry.options.get(CONF_SUBSCRIBE_LOGS):
|
if entry.options.get(CONF_SUBSCRIBE_LOGS):
|
||||||
self._async_subscribe_logs(self._async_get_equivalent_log_level())
|
self._async_subscribe_logs(self._async_get_equivalent_log_level())
|
||||||
results = await asyncio.gather(
|
device_info, entity_infos, services = await cli.device_info_and_list_entities()
|
||||||
create_eager_task(cli.device_info()),
|
|
||||||
create_eager_task(cli.list_entities_services()),
|
|
||||||
)
|
|
||||||
|
|
||||||
device_info: EsphomeDeviceInfo = results[0]
|
|
||||||
entity_infos_services: tuple[list[EntityInfo], list[UserService]] = results[1]
|
|
||||||
entity_infos, services = entity_infos_services
|
|
||||||
|
|
||||||
device_mac = format_mac(device_info.mac_address)
|
device_mac = format_mac(device_info.mac_address)
|
||||||
mac_address_matches = unique_id == device_mac
|
mac_address_matches = unique_id == device_mac
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
"mqtt": ["esphome/discover/#"],
|
"mqtt": ["esphome/discover/#"],
|
||||||
"quality_scale": "platinum",
|
"quality_scale": "platinum",
|
||||||
"requirements": [
|
"requirements": [
|
||||||
"aioesphomeapi==38.2.1",
|
"aioesphomeapi==39.0.0",
|
||||||
"esphome-dashboard-api==1.3.0",
|
"esphome-dashboard-api==1.3.0",
|
||||||
"bleak-esphome==3.1.0"
|
"bleak-esphome==3.1.0"
|
||||||
],
|
],
|
||||||
|
2
requirements_all.txt
generated
2
requirements_all.txt
generated
@@ -247,7 +247,7 @@ aioelectricitymaps==0.4.0
|
|||||||
aioemonitor==1.0.5
|
aioemonitor==1.0.5
|
||||||
|
|
||||||
# homeassistant.components.esphome
|
# homeassistant.components.esphome
|
||||||
aioesphomeapi==38.2.1
|
aioesphomeapi==39.0.0
|
||||||
|
|
||||||
# homeassistant.components.flo
|
# homeassistant.components.flo
|
||||||
aioflo==2021.11.0
|
aioflo==2021.11.0
|
||||||
|
2
requirements_test_all.txt
generated
2
requirements_test_all.txt
generated
@@ -235,7 +235,7 @@ aioelectricitymaps==0.4.0
|
|||||||
aioemonitor==1.0.5
|
aioemonitor==1.0.5
|
||||||
|
|
||||||
# homeassistant.components.esphome
|
# homeassistant.components.esphome
|
||||||
aioesphomeapi==38.2.1
|
aioesphomeapi==39.0.0
|
||||||
|
|
||||||
# homeassistant.components.flo
|
# homeassistant.components.flo
|
||||||
aioflo==2021.11.0
|
aioflo==2021.11.0
|
||||||
|
@@ -517,6 +517,9 @@ async def _mock_generic_device_entry(
|
|||||||
mock_client.list_entities_services = AsyncMock(
|
mock_client.list_entities_services = AsyncMock(
|
||||||
return_value=mock_list_entities_services
|
return_value=mock_list_entities_services
|
||||||
)
|
)
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(mock_device.device_info, *mock_list_entities_services)
|
||||||
|
)
|
||||||
|
|
||||||
def _subscribe_home_assistant_states_and_services(
|
def _subscribe_home_assistant_states_and_services(
|
||||||
*,
|
*,
|
||||||
|
@@ -1045,8 +1045,11 @@ async def test_encryption_key_valid_psk(
|
|||||||
assert result["step_id"] == "encryption_key"
|
assert result["step_id"] == "encryption_key"
|
||||||
assert result["description_placeholders"] == {"name": "ESPHome"}
|
assert result["description_placeholders"] == {"name": "ESPHome"}
|
||||||
|
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(uses_password=False, name="test")
|
||||||
return_value=DeviceInfo(uses_password=False, name="test")
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
result = await hass.config_entries.flow.async_configure(
|
result = await hass.config_entries.flow.async_configure(
|
||||||
result["flow_id"], user_input={CONF_NOISE_PSK: VALID_NOISE_PSK}
|
result["flow_id"], user_input={CONF_NOISE_PSK: VALID_NOISE_PSK}
|
||||||
@@ -1363,10 +1366,13 @@ async def test_reauth_confirm_invalid(
|
|||||||
assert result["errors"]
|
assert result["errors"]
|
||||||
assert result["errors"]["base"] == "invalid_psk"
|
assert result["errors"]["base"] == "invalid_psk"
|
||||||
|
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(
|
||||||
return_value=DeviceInfo(
|
uses_password=False, name="test", mac_address="11:22:33:44:55:aa"
|
||||||
uses_password=False, name="test", mac_address="11:22:33:44:55:aa"
|
)
|
||||||
)
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
result = await hass.config_entries.flow.async_configure(
|
result = await hass.config_entries.flow.async_configure(
|
||||||
result["flow_id"], user_input={CONF_NOISE_PSK: VALID_NOISE_PSK}
|
result["flow_id"], user_input={CONF_NOISE_PSK: VALID_NOISE_PSK}
|
||||||
@@ -1404,10 +1410,13 @@ async def test_reauth_confirm_invalid_with_unique_id(
|
|||||||
assert result["errors"]
|
assert result["errors"]
|
||||||
assert result["errors"]["base"] == "invalid_psk"
|
assert result["errors"]["base"] == "invalid_psk"
|
||||||
|
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(
|
||||||
return_value=DeviceInfo(
|
uses_password=False, name="test", mac_address="11:22:33:44:55:aa"
|
||||||
uses_password=False, name="test", mac_address="11:22:33:44:55:aa"
|
)
|
||||||
)
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
result = await hass.config_entries.flow.async_configure(
|
result = await hass.config_entries.flow.async_configure(
|
||||||
result["flow_id"], user_input={CONF_NOISE_PSK: VALID_NOISE_PSK}
|
result["flow_id"], user_input={CONF_NOISE_PSK: VALID_NOISE_PSK}
|
||||||
@@ -1460,8 +1469,11 @@ async def test_discovery_dhcp_updates_host(
|
|||||||
unique_id="11:22:33:44:55:aa",
|
unique_id="11:22:33:44:55:aa",
|
||||||
)
|
)
|
||||||
entry.add_to_hass(hass)
|
entry.add_to_hass(hass)
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(name="test8266", mac_address="1122334455aa")
|
||||||
return_value=DeviceInfo(name="test8266", mac_address="1122334455aa")
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
|
|
||||||
service_info = DhcpServiceInfo(
|
service_info = DhcpServiceInfo(
|
||||||
@@ -1496,8 +1508,11 @@ async def test_discovery_dhcp_does_not_update_host_wrong_mac(
|
|||||||
unique_id="11:22:33:44:55:aa",
|
unique_id="11:22:33:44:55:aa",
|
||||||
)
|
)
|
||||||
entry.add_to_hass(hass)
|
entry.add_to_hass(hass)
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(name="test8266", mac_address="1122334455ff")
|
||||||
return_value=DeviceInfo(name="test8266", mac_address="1122334455ff")
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
|
|
||||||
service_info = DhcpServiceInfo(
|
service_info = DhcpServiceInfo(
|
||||||
@@ -1602,7 +1617,12 @@ async def test_discovery_dhcp_no_changes(
|
|||||||
)
|
)
|
||||||
entry.add_to_hass(hass)
|
entry.add_to_hass(hass)
|
||||||
|
|
||||||
mock_client.device_info = AsyncMock(return_value=DeviceInfo(name="test8266"))
|
device_info = DeviceInfo(name="test8266")
|
||||||
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
|
)
|
||||||
|
|
||||||
service_info = DhcpServiceInfo(
|
service_info = DhcpServiceInfo(
|
||||||
ip="192.168.43.183",
|
ip="192.168.43.183",
|
||||||
@@ -2034,12 +2054,15 @@ async def test_user_flow_name_conflict_migrate(
|
|||||||
unique_id="11:22:33:44:55:cc",
|
unique_id="11:22:33:44:55:cc",
|
||||||
)
|
)
|
||||||
existing_entry.add_to_hass(hass)
|
existing_entry.add_to_hass(hass)
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(
|
||||||
return_value=DeviceInfo(
|
uses_password=False,
|
||||||
uses_password=False,
|
name="test",
|
||||||
name="test",
|
mac_address="11:22:33:44:55:AA",
|
||||||
mac_address="11:22:33:44:55:AA",
|
)
|
||||||
)
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
|
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
@@ -2084,12 +2107,15 @@ async def test_user_flow_name_conflict_overwrite(
|
|||||||
unique_id="11:22:33:44:55:cc",
|
unique_id="11:22:33:44:55:cc",
|
||||||
)
|
)
|
||||||
existing_entry.add_to_hass(hass)
|
existing_entry.add_to_hass(hass)
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(
|
||||||
return_value=DeviceInfo(
|
uses_password=False,
|
||||||
uses_password=False,
|
name="test",
|
||||||
name="test",
|
mac_address="11:22:33:44:55:AA",
|
||||||
mac_address="11:22:33:44:55:AA",
|
)
|
||||||
)
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
|
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
|
@@ -214,6 +214,9 @@ async def test_entities_removed_after_reload(
|
|||||||
mock_device.client.list_entities_services = AsyncMock(
|
mock_device.client.list_entities_services = AsyncMock(
|
||||||
return_value=(entity_info, [])
|
return_value=(entity_info, [])
|
||||||
)
|
)
|
||||||
|
mock_device.client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(mock_device.device_info, entity_info, [])
|
||||||
|
)
|
||||||
|
|
||||||
assert await hass.config_entries.async_setup(entry.entry_id)
|
assert await hass.config_entries.async_setup(entry.entry_id)
|
||||||
on_future = hass.loop.create_future()
|
on_future = hass.loop.create_future()
|
||||||
@@ -677,6 +680,13 @@ async def test_deep_sleep_added_after_setup(
|
|||||||
**{**asdict(mock_device.device_info), "has_deep_sleep": True}
|
**{**asdict(mock_device.device_info), "has_deep_sleep": True}
|
||||||
)
|
)
|
||||||
mock_device.client.device_info = AsyncMock(return_value=new_device_info)
|
mock_device.client.device_info = AsyncMock(return_value=new_device_info)
|
||||||
|
mock_device.client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(
|
||||||
|
new_device_info,
|
||||||
|
mock_device.client.list_entities_services.return_value[0],
|
||||||
|
mock_device.client.list_entities_services.return_value[1],
|
||||||
|
)
|
||||||
|
)
|
||||||
mock_device.device_info = new_device_info
|
mock_device.device_info = new_device_info
|
||||||
|
|
||||||
await mock_device.mock_connect()
|
await mock_device.mock_connect()
|
||||||
@@ -952,6 +962,9 @@ async def test_entity_switches_between_devices(
|
|||||||
mock_client.list_entities_services = AsyncMock(
|
mock_client.list_entities_services = AsyncMock(
|
||||||
return_value=(updated_entity_info, [])
|
return_value=(updated_entity_info, [])
|
||||||
)
|
)
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device.device_info, updated_entity_info, [])
|
||||||
|
)
|
||||||
# Trigger a reconnect to simulate the entity info update
|
# Trigger a reconnect to simulate the entity info update
|
||||||
await device.mock_disconnect(expected_disconnect=False)
|
await device.mock_disconnect(expected_disconnect=False)
|
||||||
await device.mock_connect()
|
await device.mock_connect()
|
||||||
@@ -979,6 +992,9 @@ async def test_entity_switches_between_devices(
|
|||||||
mock_client.list_entities_services = AsyncMock(
|
mock_client.list_entities_services = AsyncMock(
|
||||||
return_value=(updated_entity_info, [])
|
return_value=(updated_entity_info, [])
|
||||||
)
|
)
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device.device_info, updated_entity_info, [])
|
||||||
|
)
|
||||||
await device.mock_disconnect(expected_disconnect=False)
|
await device.mock_disconnect(expected_disconnect=False)
|
||||||
await device.mock_connect()
|
await device.mock_connect()
|
||||||
|
|
||||||
@@ -1005,6 +1021,9 @@ async def test_entity_switches_between_devices(
|
|||||||
mock_client.list_entities_services = AsyncMock(
|
mock_client.list_entities_services = AsyncMock(
|
||||||
return_value=(updated_entity_info, [])
|
return_value=(updated_entity_info, [])
|
||||||
)
|
)
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device.device_info, updated_entity_info, [])
|
||||||
|
)
|
||||||
await device.mock_disconnect(expected_disconnect=False)
|
await device.mock_disconnect(expected_disconnect=False)
|
||||||
await device.mock_connect()
|
await device.mock_connect()
|
||||||
|
|
||||||
@@ -1228,6 +1247,9 @@ async def test_unique_id_migration_when_entity_moves_between_devices(
|
|||||||
|
|
||||||
# Update the entity info by changing what the mock returns
|
# Update the entity info by changing what the mock returns
|
||||||
mock_client.list_entities_services = AsyncMock(return_value=(new_entity_info, []))
|
mock_client.list_entities_services = AsyncMock(return_value=(new_entity_info, []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device.device_info, new_entity_info, [])
|
||||||
|
)
|
||||||
|
|
||||||
# Trigger a reconnect to simulate the entity info update
|
# Trigger a reconnect to simulate the entity info update
|
||||||
await device.mock_disconnect(expected_disconnect=False)
|
await device.mock_disconnect(expected_disconnect=False)
|
||||||
@@ -1322,6 +1344,9 @@ async def test_unique_id_migration_sub_device_to_main_device(
|
|||||||
|
|
||||||
# Update the entity info
|
# Update the entity info
|
||||||
mock_client.list_entities_services = AsyncMock(return_value=(new_entity_info, []))
|
mock_client.list_entities_services = AsyncMock(return_value=(new_entity_info, []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device.device_info, new_entity_info, [])
|
||||||
|
)
|
||||||
|
|
||||||
# Trigger a reconnect
|
# Trigger a reconnect
|
||||||
await device.mock_disconnect(expected_disconnect=False)
|
await device.mock_disconnect(expected_disconnect=False)
|
||||||
@@ -1415,6 +1440,9 @@ async def test_unique_id_migration_between_sub_devices(
|
|||||||
|
|
||||||
# Update the entity info
|
# Update the entity info
|
||||||
mock_client.list_entities_services = AsyncMock(return_value=(new_entity_info, []))
|
mock_client.list_entities_services = AsyncMock(return_value=(new_entity_info, []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device.device_info, new_entity_info, [])
|
||||||
|
)
|
||||||
|
|
||||||
# Trigger a reconnect
|
# Trigger a reconnect
|
||||||
await device.mock_disconnect(expected_disconnect=False)
|
await device.mock_disconnect(expected_disconnect=False)
|
||||||
@@ -1534,6 +1562,9 @@ async def test_entity_device_id_rename_in_yaml(
|
|||||||
|
|
||||||
# Update the entity info
|
# Update the entity info
|
||||||
mock_client.list_entities_services = AsyncMock(return_value=(new_entity_info, []))
|
mock_client.list_entities_services = AsyncMock(return_value=(new_entity_info, []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(new_device_info, new_entity_info, [])
|
||||||
|
)
|
||||||
|
|
||||||
# Trigger a reconnect to simulate the YAML config change
|
# Trigger a reconnect to simulate the YAML config change
|
||||||
await device.mock_disconnect(expected_disconnect=False)
|
await device.mock_disconnect(expected_disconnect=False)
|
||||||
|
@@ -422,10 +422,11 @@ async def test_unique_id_updated_to_mac(
|
|||||||
mock_client.subscribe_home_assistant_states_and_services = (
|
mock_client.subscribe_home_assistant_states_and_services = (
|
||||||
async_subscribe_home_assistant_states_and_services
|
async_subscribe_home_assistant_states_and_services
|
||||||
)
|
)
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(mac_address="1122334455aa")
|
||||||
return_value=DeviceInfo(
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
mac_address="1122334455aa",
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
)
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
|
|
||||||
await hass.config_entries.async_setup(entry.entry_id)
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
@@ -455,11 +456,14 @@ async def test_add_missing_bluetooth_mac_address(
|
|||||||
mock_client.subscribe_home_assistant_states_and_services = (
|
mock_client.subscribe_home_assistant_states_and_services = (
|
||||||
async_subscribe_home_assistant_states_and_services
|
async_subscribe_home_assistant_states_and_services
|
||||||
)
|
)
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(
|
||||||
return_value=DeviceInfo(
|
mac_address="1122334455aa",
|
||||||
mac_address="1122334455aa",
|
bluetooth_mac_address="AA:BB:CC:DD:EE:FF",
|
||||||
bluetooth_mac_address="AA:BB:CC:DD:EE:FF",
|
)
|
||||||
)
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
|
|
||||||
await hass.config_entries.async_setup(entry.entry_id)
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
@@ -493,8 +497,11 @@ async def test_unique_id_not_updated_if_name_same_and_already_mac(
|
|||||||
disconnect_done.set_result(None)
|
disconnect_done.set_result(None)
|
||||||
|
|
||||||
mock_client.disconnect = async_disconnect
|
mock_client.disconnect = async_disconnect
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(mac_address="1122334455ab", name="test")
|
||||||
return_value=DeviceInfo(mac_address="1122334455ab", name="test")
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
|
|
||||||
await hass.config_entries.async_setup(entry.entry_id)
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
@@ -523,8 +530,11 @@ async def test_unique_id_updated_if_name_unset_and_already_mac(
|
|||||||
disconnect_done.set_result(None)
|
disconnect_done.set_result(None)
|
||||||
|
|
||||||
mock_client.disconnect = async_disconnect
|
mock_client.disconnect = async_disconnect
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(mac_address="1122334455ab", name="test")
|
||||||
return_value=DeviceInfo(mac_address="1122334455ab", name="test")
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
|
|
||||||
await hass.config_entries.async_setup(entry.entry_id)
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
@@ -558,8 +568,11 @@ async def test_unique_id_not_updated_if_name_different_and_already_mac(
|
|||||||
disconnect_done.set_result(None)
|
disconnect_done.set_result(None)
|
||||||
|
|
||||||
mock_client.disconnect = async_disconnect
|
mock_client.disconnect = async_disconnect
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(mac_address="1122334455ab", name="different")
|
||||||
return_value=DeviceInfo(mac_address="1122334455ab", name="different")
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
|
|
||||||
await hass.config_entries.async_setup(entry.entry_id)
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
@@ -597,8 +610,11 @@ async def test_name_updated_only_if_mac_matches(
|
|||||||
mock_client.subscribe_home_assistant_states_and_services = (
|
mock_client.subscribe_home_assistant_states_and_services = (
|
||||||
async_subscribe_home_assistant_states_and_services
|
async_subscribe_home_assistant_states_and_services
|
||||||
)
|
)
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(mac_address="1122334455aa", name="new")
|
||||||
return_value=DeviceInfo(mac_address="1122334455aa", name="new")
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
|
|
||||||
await hass.config_entries.async_setup(entry.entry_id)
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
@@ -634,8 +650,11 @@ async def test_name_updated_only_if_mac_was_unset(
|
|||||||
mock_client.subscribe_home_assistant_states_and_services = (
|
mock_client.subscribe_home_assistant_states_and_services = (
|
||||||
async_subscribe_home_assistant_states_and_services
|
async_subscribe_home_assistant_states_and_services
|
||||||
)
|
)
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(mac_address="1122334455aa", name="new")
|
||||||
return_value=DeviceInfo(mac_address="1122334455aa", name="new")
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
|
|
||||||
await hass.config_entries.async_setup(entry.entry_id)
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
@@ -672,8 +691,11 @@ async def test_connection_aborted_wrong_device(
|
|||||||
disconnect_done.set_result(None)
|
disconnect_done.set_result(None)
|
||||||
|
|
||||||
mock_client.disconnect = async_disconnect
|
mock_client.disconnect = async_disconnect
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(mac_address="1122334455ab", name="different")
|
||||||
return_value=DeviceInfo(mac_address="1122334455ab", name="different")
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
|
|
||||||
await hass.config_entries.async_setup(entry.entry_id)
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
@@ -703,10 +725,12 @@ async def test_connection_aborted_wrong_device(
|
|||||||
hostname="test",
|
hostname="test",
|
||||||
macaddress="1122334455aa",
|
macaddress="1122334455aa",
|
||||||
)
|
)
|
||||||
new_info = AsyncMock(
|
device_info = DeviceInfo(mac_address="1122334455aa", name="test")
|
||||||
return_value=DeviceInfo(mac_address="1122334455aa", name="test")
|
new_info = AsyncMock(return_value=device_info)
|
||||||
)
|
|
||||||
mock_client.device_info = new_info
|
mock_client.device_info = new_info
|
||||||
|
# Also need to update device_info_and_list_entities
|
||||||
|
new_combined_info = AsyncMock(return_value=(device_info, [], []))
|
||||||
|
mock_client.device_info_and_list_entities = new_combined_info
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
"esphome", context={"source": config_entries.SOURCE_DHCP}, data=service_info
|
"esphome", context={"source": config_entries.SOURCE_DHCP}, data=service_info
|
||||||
)
|
)
|
||||||
@@ -720,7 +744,8 @@ async def test_connection_aborted_wrong_device(
|
|||||||
}
|
}
|
||||||
assert entry.data[CONF_HOST] == "192.168.43.184"
|
assert entry.data[CONF_HOST] == "192.168.43.184"
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert len(new_info.mock_calls) == 2
|
# Check that either device_info or device_info_and_list_entities was called
|
||||||
|
assert len(new_info.mock_calls) + len(new_combined_info.mock_calls) == 2
|
||||||
assert "Unexpected device found at" not in caplog.text
|
assert "Unexpected device found at" not in caplog.text
|
||||||
|
|
||||||
|
|
||||||
@@ -749,8 +774,11 @@ async def test_connection_aborted_wrong_device_same_name(
|
|||||||
disconnect_done.set_result(None)
|
disconnect_done.set_result(None)
|
||||||
|
|
||||||
mock_client.disconnect = async_disconnect
|
mock_client.disconnect = async_disconnect
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(mac_address="1122334455ab", name="test")
|
||||||
return_value=DeviceInfo(mac_address="1122334455ab", name="test")
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
|
|
||||||
await hass.config_entries.async_setup(entry.entry_id)
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
@@ -777,10 +805,12 @@ async def test_connection_aborted_wrong_device_same_name(
|
|||||||
hostname="test",
|
hostname="test",
|
||||||
macaddress="1122334455aa",
|
macaddress="1122334455aa",
|
||||||
)
|
)
|
||||||
new_info = AsyncMock(
|
device_info = DeviceInfo(mac_address="1122334455aa", name="test")
|
||||||
return_value=DeviceInfo(mac_address="1122334455aa", name="test")
|
new_info = AsyncMock(return_value=device_info)
|
||||||
)
|
|
||||||
mock_client.device_info = new_info
|
mock_client.device_info = new_info
|
||||||
|
# Also need to update device_info_and_list_entities
|
||||||
|
new_combined_info = AsyncMock(return_value=(device_info, [], []))
|
||||||
|
mock_client.device_info_and_list_entities = new_combined_info
|
||||||
result = await hass.config_entries.flow.async_init(
|
result = await hass.config_entries.flow.async_init(
|
||||||
"esphome", context={"source": config_entries.SOURCE_DHCP}, data=service_info
|
"esphome", context={"source": config_entries.SOURCE_DHCP}, data=service_info
|
||||||
)
|
)
|
||||||
@@ -794,7 +824,8 @@ async def test_connection_aborted_wrong_device_same_name(
|
|||||||
}
|
}
|
||||||
assert entry.data[CONF_HOST] == "192.168.43.184"
|
assert entry.data[CONF_HOST] == "192.168.43.184"
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
assert len(new_info.mock_calls) == 2
|
# Check that either device_info or device_info_and_list_entities was called
|
||||||
|
assert len(new_info.mock_calls) + len(new_combined_info.mock_calls) == 2
|
||||||
assert "Unexpected device found at" not in caplog.text
|
assert "Unexpected device found at" not in caplog.text
|
||||||
|
|
||||||
|
|
||||||
@@ -823,6 +854,12 @@ async def test_failure_during_connect(
|
|||||||
|
|
||||||
mock_client.disconnect = async_disconnect
|
mock_client.disconnect = async_disconnect
|
||||||
mock_client.device_info = AsyncMock(side_effect=APIConnectionError("fail"))
|
mock_client.device_info = AsyncMock(side_effect=APIConnectionError("fail"))
|
||||||
|
mock_client.list_entities_services = AsyncMock(
|
||||||
|
side_effect=APIConnectionError("fail")
|
||||||
|
)
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
side_effect=APIConnectionError("fail")
|
||||||
|
)
|
||||||
|
|
||||||
await hass.config_entries.async_setup(entry.entry_id)
|
await hass.config_entries.async_setup(entry.entry_id)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
@@ -989,6 +1026,9 @@ async def test_esphome_device_with_dash_in_name_user_services(
|
|||||||
|
|
||||||
# Verify the service can be removed
|
# Verify the service can be removed
|
||||||
mock_client.list_entities_services = AsyncMock(return_value=([], [service1]))
|
mock_client.list_entities_services = AsyncMock(return_value=([], [service1]))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device.device_info, [], [service1])
|
||||||
|
)
|
||||||
await device.mock_disconnect(True)
|
await device.mock_disconnect(True)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
await device.mock_connect()
|
await device.mock_connect()
|
||||||
@@ -1045,6 +1085,9 @@ async def test_esphome_user_services_ignores_invalid_arg_types(
|
|||||||
|
|
||||||
# Verify the service can be removed
|
# Verify the service can be removed
|
||||||
mock_client.list_entities_services = AsyncMock(return_value=([], [service2]))
|
mock_client.list_entities_services = AsyncMock(return_value=([], [service2]))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device.device_info, [], [service2])
|
||||||
|
)
|
||||||
await device.mock_disconnect(True)
|
await device.mock_disconnect(True)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
await device.mock_connect()
|
await device.mock_connect()
|
||||||
@@ -1153,6 +1196,9 @@ async def test_esphome_user_services_changes(
|
|||||||
|
|
||||||
# Verify the service can be updated
|
# Verify the service can be updated
|
||||||
mock_client.list_entities_services = AsyncMock(return_value=([], [new_service1]))
|
mock_client.list_entities_services = AsyncMock(return_value=([], [new_service1]))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device.device_info, [], [new_service1])
|
||||||
|
)
|
||||||
await device.mock_disconnect(True)
|
await device.mock_disconnect(True)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
await device.mock_connect()
|
await device.mock_connect()
|
||||||
@@ -1486,6 +1532,10 @@ async def test_device_adds_friendly_name(
|
|||||||
**{**device.device_info.to_dict(), "friendly_name": "I have a friendly name"}
|
**{**device.device_info.to_dict(), "friendly_name": "I have a friendly name"}
|
||||||
)
|
)
|
||||||
mock_client.device_info = AsyncMock(return_value=device.device_info)
|
mock_client.device_info = AsyncMock(return_value=device.device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device.device_info, [], [])
|
||||||
|
)
|
||||||
await device.mock_connect()
|
await device.mock_connect()
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
dev = dev_reg.async_get_device(
|
dev = dev_reg.async_get_device(
|
||||||
@@ -1676,6 +1726,10 @@ async def test_sub_device_cleanup(
|
|||||||
|
|
||||||
# Update the mock client to return the new device info
|
# Update the mock client to return the new device info
|
||||||
mock_client.device_info = AsyncMock(return_value=device.device_info)
|
mock_client.device_info = AsyncMock(return_value=device.device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device.device_info, [], [])
|
||||||
|
)
|
||||||
|
|
||||||
# Simulate reconnection which triggers device registry update
|
# Simulate reconnection which triggers device registry update
|
||||||
await device.mock_connect()
|
await device.mock_connect()
|
||||||
|
@@ -55,10 +55,13 @@ async def test_device_conflict_manual(
|
|||||||
disconnect_done.set_result(None)
|
disconnect_done.set_result(None)
|
||||||
|
|
||||||
mock_client.disconnect = async_disconnect
|
mock_client.disconnect = async_disconnect
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(
|
||||||
return_value=DeviceInfo(
|
mac_address="1122334455ab", name="test", model="esp32-iso-poe"
|
||||||
mac_address="1122334455ab", name="test", model="esp32-iso-poe"
|
)
|
||||||
)
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
await hass.config_entries.async_setup(mock_config_entry.entry_id)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
@@ -102,10 +105,13 @@ async def test_device_conflict_manual(
|
|||||||
assert data["type"] == FlowResultType.FORM
|
assert data["type"] == FlowResultType.FORM
|
||||||
assert data["step_id"] == "manual"
|
assert data["step_id"] == "manual"
|
||||||
|
|
||||||
mock_client.device_info = AsyncMock(
|
device_info = DeviceInfo(
|
||||||
return_value=DeviceInfo(
|
mac_address="11:22:33:44:55:aa", name="test", model="esp32-iso-poe"
|
||||||
mac_address="11:22:33:44:55:aa", name="test", model="esp32-iso-poe"
|
)
|
||||||
)
|
mock_client.device_info = AsyncMock(return_value=device_info)
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=([], []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(device_info, [], [])
|
||||||
)
|
)
|
||||||
caplog.clear()
|
caplog.clear()
|
||||||
data = await process_repair_fix_flow(client, flow_id)
|
data = await process_repair_fix_flow(client, flow_id)
|
||||||
@@ -169,6 +175,11 @@ async def test_device_conflict_migration(
|
|||||||
mac_address="11:22:33:44:55:AB", name="test", model="esp32-iso-poe"
|
mac_address="11:22:33:44:55:AB", name="test", model="esp32-iso-poe"
|
||||||
)
|
)
|
||||||
mock_client.device_info = AsyncMock(return_value=new_device_info)
|
mock_client.device_info = AsyncMock(return_value=new_device_info)
|
||||||
|
# Keep the same entity_info when reloading
|
||||||
|
mock_client.list_entities_services = AsyncMock(return_value=(entity_info, []))
|
||||||
|
mock_client.device_info_and_list_entities = AsyncMock(
|
||||||
|
return_value=(new_device_info, entity_info, [])
|
||||||
|
)
|
||||||
device.device_info = new_device_info
|
device.device_info = new_device_info
|
||||||
await hass.config_entries.async_reload(mock_config_entry.entry_id)
|
await hass.config_entries.async_reload(mock_config_entry.entry_id)
|
||||||
await hass.async_block_till_done()
|
await hass.async_block_till_done()
|
||||||
|
Reference in New Issue
Block a user