Skip to content

Commit 119fddc

Browse files
committed
Test fixes from environment/dep updates
1 parent 2303ef2 commit 119fddc

File tree

7 files changed

+370
-121
lines changed

7 files changed

+370
-121
lines changed

poetry.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyproject.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,8 +24,8 @@ mkdocs-material = ">=9.5.17"
2424

2525
[tool.poetry.group.test.dependencies]
2626
syrupy = ">=4.6.0"
27-
pytest = ">=8.2.0"
28-
pytest-asyncio = ">=0.23.0"
27+
pytest = ">=8.3.5"
28+
pytest-asyncio = ">=0.26.0"
2929
pytest-cov = ">=5.0.0"
3030
pytest-homeassistant-custom-component = "==0.13.251"
3131
mock = ">4.0.0"

tests/conftest.py

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@
2929
import attr
3030
import pytest
3131
from aiohttp import ClientSession, TCPConnector
32-
from custom_components.elasticsearch.config_flow import ElasticFlowHandler
3332
from freezegun.api import FrozenDateTimeFactory
3433

3534
# import custom_components.elasticsearch # noqa: F401
@@ -49,6 +48,7 @@
4948
AiohttpClientMocker,
5049
)
5150

51+
from custom_components.elasticsearch.config_flow import ElasticFlowHandler
5252
from tests import const as testconst
5353
from tests.test_util.es_mocker import es_mocker
5454

@@ -187,7 +187,9 @@ async def add_to_hass() -> bool:
187187
def mock_loop_handler_fixture():
188188
"""Return a mock loop handler that will return."""
189189
with (
190-
patch("custom_components.elasticsearch.es_publish_pipeline.LoopHandler") as loop_handler,
190+
patch(
191+
"custom_components.elasticsearch.es_publish_pipeline.LoopHandler"
192+
) as loop_handler,
191193
):
192194
loop_handler.start = AsyncMock()
193195

@@ -197,7 +199,9 @@ def mock_loop_handler_fixture():
197199
@pytest.fixture(autouse=True, name="fix_system_info")
198200
def fix_system_info_fixture():
199201
"""Return a mock system info."""
200-
with mock.patch("custom_components.elasticsearch.es_publish_pipeline.SystemInfo") as system_info:
202+
with mock.patch(
203+
"custom_components.elasticsearch.es_publish_pipeline.SystemInfo"
204+
) as system_info:
201205
system_info_instance = system_info.return_value
202206
system_info_instance.async_get_system_info = mock.AsyncMock(
203207
return_value=mock.Mock(
@@ -366,7 +370,9 @@ async def device(
366370
device_registry.async_update_device(device_id=device.id, area_id=device_area.id)
367371

368372
if device_labels is not None and len(device_labels) > 0:
369-
device_registry.async_update_device(device_id=device.id, labels={*device_labels})
373+
device_registry.async_update_device(
374+
device_id=device.id, labels={*device_labels}
375+
)
370376

371377
return device_registry.async_get(device.id)
372378

@@ -515,8 +521,8 @@ async def entity(
515521
entity_unit_of_measurement,
516522
entity_original_name: str,
517523
entity_name: str,
518-
device_id: str,
519-
request,
524+
attach_device: bool,
525+
device: DeviceEntry,
520526
):
521527
"""Mock an entity."""
522528
entity_registry.async_get_or_create(
@@ -534,16 +540,21 @@ async def entity(
534540
entity_registry.async_update_entity(entity_id=entity_id, name=entity_name)
535541

536542
if entity_device_class is not None:
537-
entity_registry.async_update_entity(entity_id=entity_id, device_class=entity_device_class)
543+
entity_registry.async_update_entity(
544+
entity_id=entity_id, device_class=entity_device_class
545+
)
538546

539547
if entity_labels is not None and len(entity_labels) > 0:
540-
entity_registry.async_update_entity(entity_id=entity_id, labels={*entity_labels})
548+
entity_registry.async_update_entity(
549+
entity_id=entity_id, labels={*entity_labels}
550+
)
541551

542552
if entity_area is not None:
543553
entity_registry.async_update_entity(entity_id=entity_id, area_id=entity_area.id)
544554

545-
if device_id is not None:
546-
entity_registry.async_update_entity(entity_id=entity_id, device_id=device_id)
555+
# Only attach device if requested and device is available
556+
if attach_device and device is not None:
557+
entity_registry.async_update_entity(entity_id=entity_id, device_id=device.id)
547558

548559
return entity_registry.async_get(entity_id)
549560

tests/snapshots/test_es_publish_pipeline.ambr

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -600,7 +600,23 @@
600600
'id': 'entity_area',
601601
'name': 'entity area',
602602
}),
603-
'device': None,
603+
'device': dict({
604+
'area': dict({
605+
'floor': dict({
606+
'id': 'device_floor',
607+
'name': 'device floor',
608+
}),
609+
'id': 'device_area',
610+
'name': 'device area',
611+
}),
612+
'id': 'very_unique_device_id',
613+
'labels': list([
614+
'device label 1',
615+
'device label 2',
616+
'device label 3',
617+
]),
618+
'name': 'device name',
619+
}),
604620
'device_class': 'user-modified entity device class',
605621
'domain': 'counter',
606622
'friendly_name': 'entity object id',

tests/test_entity_details.py

Lines changed: 52 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,15 @@
44
from unittest.mock import MagicMock, patch
55

66
import pytest
7+
from homeassistant.core import HomeAssistant
8+
79
from custom_components.elasticsearch import const as compconst
810
from custom_components.elasticsearch import utils
911
from custom_components.elasticsearch.entity_details import (
1012
ExtendedDeviceEntry,
1113
ExtendedEntityDetails,
1214
ExtendedRegistryEntry,
1315
)
14-
from homeassistant.core import HomeAssistant
15-
1616
from tests import const as testconst
1717

1818

@@ -53,17 +53,24 @@ async def test_init(self, hass: HomeAssistant, details):
5353
assert details.device_registry is not None
5454
assert details.entity_registry is not None
5555

56+
@pytest.mark.parametrize("attach_device", [False])
5657
async def test_get_entity(self, entity, entity_id, details, mock_extended_registry):
5758
"""Test retrieving extended details on an entity with no device."""
5859
details.async_get(entity_id)
5960

60-
mock_extended_registry.assert_called_once_with(details=details, entity=entity, device=None)
61+
mock_extended_registry.assert_called_once_with(
62+
details=details, entity=entity, device=None
63+
)
6164

62-
async def test_get_entity_with_device(self, entity, entity_id, device, details, mock_extended_registry):
65+
async def test_get_entity_with_device(
66+
self, entity, entity_id, device, details, mock_extended_registry
67+
):
6368
"""Test retrieving extended details on an entity with a device attached."""
6469
details.async_get(entity_id)
6570

66-
mock_extended_registry.assert_called_once_with(details=details, entity=entity, device=device)
71+
mock_extended_registry.assert_called_once_with(
72+
details=details, entity=entity, device=device
73+
)
6774

6875
async def test_get_entity_with_missing_device(
6976
self, entity, entity_id, device, details, mock_extended_registry
@@ -79,7 +86,9 @@ async def test_get_entity_with_missing_device(
7986
entity_id,
8087
)
8188

82-
mock_extended_registry.assert_called_once_with(details=details, entity=entity, device=None)
89+
mock_extended_registry.assert_called_once_with(
90+
details=details, entity=entity, device=None
91+
)
8392

8493
async def test_get_entity_missing(self, details, mock_extended_registry):
8594
"""Test retrieving extended details on an entity which is missing from the registry."""
@@ -117,7 +126,9 @@ async def test_init(
117126
device_labels,
118127
):
119128
"""Create an ExtendedRegistryEntry instance."""
120-
extended_entity = ExtendedRegistryEntry(details=details, entity=entity, device=device)
129+
extended_entity = ExtendedRegistryEntry(
130+
details=details, entity=entity, device=device
131+
)
121132

122133
assert extended_entity is not None
123134
assert extended_entity._entity == entity
@@ -184,7 +195,9 @@ async def test_init_entity_with_device(
184195
device_labels,
185196
):
186197
"""Create an ExtendedRegistryEntry instance."""
187-
extended_entity = ExtendedRegistryEntry(details=details, entity=entity, device=device)
198+
extended_entity = ExtendedRegistryEntry(
199+
details=details, entity=entity, device=device
200+
)
188201

189202
assert extended_entity is not None
190203
assert extended_entity._entity == entity
@@ -207,7 +220,9 @@ async def test_init_entity_with_device(
207220

208221
async def test_to_dict(self, details, entity, device, snapshot):
209222
"""Create an ExtendedRegistryEntry instance."""
210-
extended_entity = ExtendedRegistryEntry(details=details, entity=entity, device=device)
223+
extended_entity = ExtendedRegistryEntry(
224+
details=details, entity=entity, device=device
225+
)
211226

212227
assert extended_entity is not None
213228

@@ -229,19 +244,31 @@ async def test_to_dict(self, details, entity, device, snapshot):
229244
],
230245
)
231246
async def test_name_handling(
232-
self, entity_registry, details, entity, entity_original_name, entity_name, expected_name
247+
self,
248+
entity_registry,
249+
details,
250+
entity,
251+
entity_original_name,
252+
entity_name,
253+
expected_name,
233254
):
234255
"""Test our handling of the name and original_name properties."""
235256

236-
extended_entity = ExtendedRegistryEntry(details=details, entity=entity, device=None)
257+
extended_entity = ExtendedRegistryEntry(
258+
details=details, entity=entity, device=None
259+
)
237260

238261
assert extended_entity._entity.original_name == entity_original_name
239262
assert extended_entity._entity.name == entity_name
240263

241264
assert extended_entity.name == expected_name
242265

243266
@pytest.mark.parametrize(
244-
("entity_original_device_class", "entity_device_class", "expected_device_class"),
267+
(
268+
"entity_original_device_class",
269+
"entity_device_class",
270+
"expected_device_class",
271+
),
245272
[
246273
("Original", "New", "New"),
247274
("Original", None, "Original"),
@@ -266,9 +293,14 @@ async def test_device_class_handling(
266293
):
267294
"""Test our handling of the device_class and original_device_class properties."""
268295

269-
extended_entity = ExtendedRegistryEntry(details=details, entity=entity, device=None)
296+
extended_entity = ExtendedRegistryEntry(
297+
details=details, entity=entity, device=None
298+
)
270299

271-
assert extended_entity._entity.original_device_class == entity_original_device_class
300+
assert (
301+
extended_entity._entity.original_device_class
302+
== entity_original_device_class
303+
)
272304
assert extended_entity._entity.device_class == entity_device_class
273305

274306
assert extended_entity.device_class == expected_device_class
@@ -296,7 +328,9 @@ async def test_entity_device_combinations(
296328
device_labels,
297329
):
298330
"""Test the entity details edge cases."""
299-
entry_dict = ExtendedRegistryEntry(details=details, entity=entity, device=device).to_dict()
331+
entry_dict = ExtendedRegistryEntry(
332+
details=details, entity=entity, device=device
333+
).to_dict()
300334

301335
document = utils.flatten_dict(entry_dict)
302336

@@ -327,7 +361,9 @@ def name_to_id(name):
327361
assert document.pop("device.area.name", None) == device_area_name
328362
assert document.pop("device.area.id", None) == name_to_id(device_area_name)
329363
assert document.pop("device.area.floor.name", None) == device_floor_name
330-
assert document.pop("device.area.floor.id", None) == name_to_id(device_floor_name)
364+
assert document.pop("device.area.floor.id", None) == name_to_id(
365+
device_floor_name
366+
)
331367
assert document.pop("device.labels", None) == device_labels
332368

333369
# Ensure that remaining keys are trimmable

0 commit comments

Comments
 (0)