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
|
||||
|
||||
import asyncio
|
||||
import base64
|
||||
from functools import partial
|
||||
import logging
|
||||
@@ -15,7 +14,6 @@ from aioesphomeapi import (
|
||||
APIVersion,
|
||||
DeviceInfo as EsphomeDeviceInfo,
|
||||
EncryptionPlaintextAPIError,
|
||||
EntityInfo,
|
||||
HomeassistantServiceCall,
|
||||
InvalidAuthAPIError,
|
||||
InvalidEncryptionKeyAPIError,
|
||||
@@ -63,7 +61,6 @@ from homeassistant.helpers.issue_registry import (
|
||||
)
|
||||
from homeassistant.helpers.service import async_set_service_schema
|
||||
from homeassistant.helpers.template import Template
|
||||
from homeassistant.util.async_ import create_eager_task
|
||||
|
||||
from .bluetooth import async_connect_scanner
|
||||
from .const import (
|
||||
@@ -425,14 +422,7 @@ class ESPHomeManager:
|
||||
unique_id_is_mac_address = unique_id and ":" in unique_id
|
||||
if entry.options.get(CONF_SUBSCRIBE_LOGS):
|
||||
self._async_subscribe_logs(self._async_get_equivalent_log_level())
|
||||
results = await asyncio.gather(
|
||||
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_info, entity_infos, services = await cli.device_info_and_list_entities()
|
||||
|
||||
device_mac = format_mac(device_info.mac_address)
|
||||
mac_address_matches = unique_id == device_mac
|
||||
|
@@ -17,7 +17,7 @@
|
||||
"mqtt": ["esphome/discover/#"],
|
||||
"quality_scale": "platinum",
|
||||
"requirements": [
|
||||
"aioesphomeapi==38.2.1",
|
||||
"aioesphomeapi==39.0.0",
|
||||
"esphome-dashboard-api==1.3.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
|
||||
|
||||
# homeassistant.components.esphome
|
||||
aioesphomeapi==38.2.1
|
||||
aioesphomeapi==39.0.0
|
||||
|
||||
# homeassistant.components.flo
|
||||
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
|
||||
|
||||
# homeassistant.components.esphome
|
||||
aioesphomeapi==38.2.1
|
||||
aioesphomeapi==39.0.0
|
||||
|
||||
# homeassistant.components.flo
|
||||
aioflo==2021.11.0
|
||||
|
@@ -517,6 +517,9 @@ async def _mock_generic_device_entry(
|
||||
mock_client.list_entities_services = AsyncMock(
|
||||
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(
|
||||
*,
|
||||
|
@@ -1045,8 +1045,11 @@ async def test_encryption_key_valid_psk(
|
||||
assert result["step_id"] == "encryption_key"
|
||||
assert result["description_placeholders"] == {"name": "ESPHome"}
|
||||
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(uses_password=False, name="test")
|
||||
device_info = 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["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"]["base"] == "invalid_psk"
|
||||
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(
|
||||
device_info = DeviceInfo(
|
||||
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["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"]["base"] == "invalid_psk"
|
||||
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(
|
||||
device_info = DeviceInfo(
|
||||
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["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",
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(name="test8266", mac_address="1122334455aa")
|
||||
device_info = 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(
|
||||
@@ -1496,8 +1508,11 @@ async def test_discovery_dhcp_does_not_update_host_wrong_mac(
|
||||
unique_id="11:22:33:44:55:aa",
|
||||
)
|
||||
entry.add_to_hass(hass)
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(name="test8266", mac_address="1122334455ff")
|
||||
device_info = 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(
|
||||
@@ -1602,7 +1617,12 @@ async def test_discovery_dhcp_no_changes(
|
||||
)
|
||||
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(
|
||||
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",
|
||||
)
|
||||
existing_entry.add_to_hass(hass)
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(
|
||||
device_info = DeviceInfo(
|
||||
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_init(
|
||||
@@ -2084,12 +2107,15 @@ async def test_user_flow_name_conflict_overwrite(
|
||||
unique_id="11:22:33:44:55:cc",
|
||||
)
|
||||
existing_entry.add_to_hass(hass)
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(
|
||||
device_info = DeviceInfo(
|
||||
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_init(
|
||||
|
@@ -214,6 +214,9 @@ async def test_entities_removed_after_reload(
|
||||
mock_device.client.list_entities_services = AsyncMock(
|
||||
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)
|
||||
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}
|
||||
)
|
||||
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
|
||||
|
||||
await mock_device.mock_connect()
|
||||
@@ -952,6 +962,9 @@ async def test_entity_switches_between_devices(
|
||||
mock_client.list_entities_services = AsyncMock(
|
||||
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
|
||||
await device.mock_disconnect(expected_disconnect=False)
|
||||
await device.mock_connect()
|
||||
@@ -979,6 +992,9 @@ async def test_entity_switches_between_devices(
|
||||
mock_client.list_entities_services = AsyncMock(
|
||||
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_connect()
|
||||
|
||||
@@ -1005,6 +1021,9 @@ async def test_entity_switches_between_devices(
|
||||
mock_client.list_entities_services = AsyncMock(
|
||||
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_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
|
||||
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
|
||||
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
|
||||
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
|
||||
await device.mock_disconnect(expected_disconnect=False)
|
||||
@@ -1415,6 +1440,9 @@ async def test_unique_id_migration_between_sub_devices(
|
||||
|
||||
# Update the 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
|
||||
await device.mock_disconnect(expected_disconnect=False)
|
||||
@@ -1534,6 +1562,9 @@ async def test_entity_device_id_rename_in_yaml(
|
||||
|
||||
# Update the 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
|
||||
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 = (
|
||||
async_subscribe_home_assistant_states_and_services
|
||||
)
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(
|
||||
mac_address="1122334455aa",
|
||||
)
|
||||
device_info = DeviceInfo(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, [], [])
|
||||
)
|
||||
|
||||
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 = (
|
||||
async_subscribe_home_assistant_states_and_services
|
||||
)
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(
|
||||
device_info = DeviceInfo(
|
||||
mac_address="1122334455aa",
|
||||
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)
|
||||
@@ -493,8 +497,11 @@ async def test_unique_id_not_updated_if_name_same_and_already_mac(
|
||||
disconnect_done.set_result(None)
|
||||
|
||||
mock_client.disconnect = async_disconnect
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(mac_address="1122334455ab", name="test")
|
||||
device_info = 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)
|
||||
@@ -523,8 +530,11 @@ async def test_unique_id_updated_if_name_unset_and_already_mac(
|
||||
disconnect_done.set_result(None)
|
||||
|
||||
mock_client.disconnect = async_disconnect
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(mac_address="1122334455ab", name="test")
|
||||
device_info = 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)
|
||||
@@ -558,8 +568,11 @@ async def test_unique_id_not_updated_if_name_different_and_already_mac(
|
||||
disconnect_done.set_result(None)
|
||||
|
||||
mock_client.disconnect = async_disconnect
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(mac_address="1122334455ab", name="different")
|
||||
device_info = 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)
|
||||
@@ -597,8 +610,11 @@ async def test_name_updated_only_if_mac_matches(
|
||||
mock_client.subscribe_home_assistant_states_and_services = (
|
||||
async_subscribe_home_assistant_states_and_services
|
||||
)
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(mac_address="1122334455aa", name="new")
|
||||
device_info = 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)
|
||||
@@ -634,8 +650,11 @@ async def test_name_updated_only_if_mac_was_unset(
|
||||
mock_client.subscribe_home_assistant_states_and_services = (
|
||||
async_subscribe_home_assistant_states_and_services
|
||||
)
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(mac_address="1122334455aa", name="new")
|
||||
device_info = 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)
|
||||
@@ -672,8 +691,11 @@ async def test_connection_aborted_wrong_device(
|
||||
disconnect_done.set_result(None)
|
||||
|
||||
mock_client.disconnect = async_disconnect
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(mac_address="1122334455ab", name="different")
|
||||
device_info = 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)
|
||||
@@ -703,10 +725,12 @@ async def test_connection_aborted_wrong_device(
|
||||
hostname="test",
|
||||
macaddress="1122334455aa",
|
||||
)
|
||||
new_info = AsyncMock(
|
||||
return_value=DeviceInfo(mac_address="1122334455aa", name="test")
|
||||
)
|
||||
device_info = DeviceInfo(mac_address="1122334455aa", name="test")
|
||||
new_info = AsyncMock(return_value=device_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(
|
||||
"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"
|
||||
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
|
||||
|
||||
|
||||
@@ -749,8 +774,11 @@ async def test_connection_aborted_wrong_device_same_name(
|
||||
disconnect_done.set_result(None)
|
||||
|
||||
mock_client.disconnect = async_disconnect
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(mac_address="1122334455ab", name="test")
|
||||
device_info = 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)
|
||||
@@ -777,10 +805,12 @@ async def test_connection_aborted_wrong_device_same_name(
|
||||
hostname="test",
|
||||
macaddress="1122334455aa",
|
||||
)
|
||||
new_info = AsyncMock(
|
||||
return_value=DeviceInfo(mac_address="1122334455aa", name="test")
|
||||
)
|
||||
device_info = DeviceInfo(mac_address="1122334455aa", name="test")
|
||||
new_info = AsyncMock(return_value=device_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(
|
||||
"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"
|
||||
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
|
||||
|
||||
|
||||
@@ -823,6 +854,12 @@ async def test_failure_during_connect(
|
||||
|
||||
mock_client.disconnect = async_disconnect
|
||||
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.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
|
||||
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 hass.async_block_till_done()
|
||||
await device.mock_connect()
|
||||
@@ -1045,6 +1085,9 @@ async def test_esphome_user_services_ignores_invalid_arg_types(
|
||||
|
||||
# Verify the service can be removed
|
||||
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 hass.async_block_till_done()
|
||||
await device.mock_connect()
|
||||
@@ -1153,6 +1196,9 @@ async def test_esphome_user_services_changes(
|
||||
|
||||
# Verify the service can be updated
|
||||
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 hass.async_block_till_done()
|
||||
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"}
|
||||
)
|
||||
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 hass.async_block_till_done()
|
||||
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
|
||||
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
|
||||
await device.mock_connect()
|
||||
|
@@ -55,10 +55,13 @@ async def test_device_conflict_manual(
|
||||
disconnect_done.set_result(None)
|
||||
|
||||
mock_client.disconnect = async_disconnect
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(
|
||||
device_info = DeviceInfo(
|
||||
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.async_block_till_done()
|
||||
@@ -102,10 +105,13 @@ async def test_device_conflict_manual(
|
||||
assert data["type"] == FlowResultType.FORM
|
||||
assert data["step_id"] == "manual"
|
||||
|
||||
mock_client.device_info = AsyncMock(
|
||||
return_value=DeviceInfo(
|
||||
device_info = DeviceInfo(
|
||||
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()
|
||||
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"
|
||||
)
|
||||
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
|
||||
await hass.config_entries.async_reload(mock_config_entry.entry_id)
|
||||
await hass.async_block_till_done()
|
||||
|
Reference in New Issue
Block a user