Files
core/tests/components/esphome/test_diagnostics.py
T
4b34d1bbb5 Merge config subentry feature branch to dev (#136121)
* Reapply "Add support for subentries to config entries" (#133470) (#136061)

* Reapply "Add support for subentries to config entries" (#133470)

This reverts commit ecb3bf79f3.

* Update test snapshot

* Add config subentry support to device registry (#128157)

* Add config subentry support to device registry

* Apply suggestions from code review

* Update syrupy serializer

* Update snapshots

* Address review comments

* Allow a device to be connected to no or a single subentry of a config entry

* Update snapshots

* Revert "Allow a device to be connected to no or a single subentry of a config entry"

This reverts commit ec6f613151cb4a806b7961033c004b71b76510c2.

* Update test snapshots

* Bump release version in comments

* Rename config_subentries to config_entries_subentries

* Add config subentry support to entity registry (#128155)

* Add config subentry support to entity registry

* Update syrupy serializer

* Update snapshots

* Update snapshots

* Accept suggested changes

* Clean registries when removing subentry (#136671)

* Clean up registries when removing subentry

* Update tests

* Clean up subentries from deleted devices when removing config entry (#136669)

* Clean up subentries from deleted devices when removing config entry

* Move

* Add config subentry support to entity platform (#128161)

* Add config subentry support to entity platform

* Rename subentry_id to config_subentry_id

* Store subentry type in subentry (#136687)

* Add reconfigure support to config subentries (#133353)

* Add reconfigure support to config subentries

* Update test

* Minor adjustment

* Rename supported_subentry_flows to supported_subentry_types

* Address review comments

* Add subentry support to kitchen sink (#136755)

* Add subentry support to kitchen sink

* Add subentry reconfigure support to kitchen_sink

* Update kitchen_sink tests with subentry type stored in config entry

* Update kitchen_sink

* Update kitchen_sink

* Adjust kitchen sink tests

* Fix hassfest

* Apply suggestions from code review

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* Improve docstrings and strings.json

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>

* Update snapshots

* Update snapshots

* Update snapshots

* Update snapshots

* Update snapshots

* Update snapshots

* Update snapshots

---------

Co-authored-by: Martin Hjelmare <marhje52@gmail.com>
2025-02-10 16:40:07 +01:00

111 lines
3.7 KiB
Python

"""Tests for the diagnostics data provided by the ESPHome integration."""
from typing import Any
from unittest.mock import ANY
import pytest
from syrupy import SnapshotAssertion
from syrupy.filters import props
from homeassistant.components import bluetooth
from homeassistant.core import HomeAssistant
from .conftest import MockESPHomeDevice
from tests.common import MockConfigEntry
from tests.components.diagnostics import get_diagnostics_for_config_entry
from tests.typing import ClientSessionGenerator
@pytest.mark.usefixtures("enable_bluetooth")
async def test_diagnostics(
hass: HomeAssistant,
hass_client: ClientSessionGenerator,
init_integration: MockConfigEntry,
mock_dashboard: dict[str, Any],
snapshot: SnapshotAssertion,
) -> None:
"""Test diagnostics for config entry."""
result = await get_diagnostics_for_config_entry(hass, hass_client, init_integration)
assert result == snapshot(exclude=props("created_at", "modified_at"))
async def test_diagnostics_with_bluetooth(
hass: HomeAssistant,
hass_client: ClientSessionGenerator,
mock_bluetooth_entry_with_raw_adv: MockESPHomeDevice,
) -> None:
"""Test diagnostics for config entry with Bluetooth."""
scanner = bluetooth.async_scanner_by_source(hass, "11:22:33:44:55:AA")
assert scanner is not None
assert scanner.connectable is True
entry = mock_bluetooth_entry_with_raw_adv.entry
result = await get_diagnostics_for_config_entry(hass, hass_client, entry)
assert result == {
"bluetooth": {
"available": True,
"connections_free": 0,
"connections_limit": 0,
"scanner": {
"connectable": True,
"discovered_device_timestamps": {},
"discovered_devices_and_advertisement_data": [],
"last_detection": ANY,
"monotonic_time": ANY,
"name": "test (11:22:33:44:55:AA)",
"scanning": True,
"source": "11:22:33:44:55:AA",
"start_time": ANY,
"time_since_last_device_detection": {},
"type": "ESPHomeScanner",
},
},
"config": {
"created_at": ANY,
"data": {
"device_name": "test",
"host": "test.local",
"password": "",
"port": 6053,
},
"disabled_by": None,
"discovery_keys": {},
"domain": "esphome",
"entry_id": ANY,
"minor_version": 1,
"modified_at": ANY,
"options": {"allow_service_calls": False},
"pref_disable_new_entities": False,
"pref_disable_polling": False,
"source": "user",
"subentries": [],
"title": "Mock Title",
"unique_id": "11:22:33:44:55:aa",
"version": 1,
},
"storage_data": {
"api_version": {"major": 99, "minor": 99},
"device_info": {
"bluetooth_proxy_feature_flags": 63,
"compilation_time": "",
"esphome_version": "1.0.0",
"friendly_name": "Test",
"has_deep_sleep": False,
"legacy_bluetooth_proxy_version": 0,
"mac_address": "**REDACTED**",
"manufacturer": "",
"model": "",
"name": "test",
"project_name": "",
"project_version": "",
"suggested_area": "",
"uses_password": False,
"legacy_voice_assistant_version": 0,
"voice_assistant_feature_flags": 0,
"webserver_port": 0,
},
"services": [],
},
}