From 57bcec8cf963499b9fca76484619ec57e4a7c088 Mon Sep 17 00:00:00 2001 From: TheJulianJES Date: Sat, 11 Jan 2025 23:42:02 +0100 Subject: [PATCH] Fix test modifying real device registry (#3703) * Move `real_device` fixture to `conftest` * Fix test modifying real device registry --- tests/conftest.py | 22 ++++++++++++++++++++++ tests/test_quirks.py | 9 +++++---- tests/test_tuya_builder.py | 22 ---------------------- 3 files changed, 27 insertions(+), 26 deletions(-) diff --git a/tests/conftest.py b/tests/conftest.py index c1f0785726..68db9842fe 100644 --- a/tests/conftest.py +++ b/tests/conftest.py @@ -5,6 +5,7 @@ import pytest import zigpy.application import zigpy.device +from zigpy.device import Device import zigpy.quirks import zigpy.types from zigpy.zcl import foundation @@ -21,6 +22,8 @@ PROFILE_ID, ) +from .async_mock import sentinel + class MockApp(zigpy.application.ControllerApplication): """App Controller.""" @@ -204,6 +207,25 @@ def _dev( return _dev +@pytest.fixture(name="device_mock") +def real_device(MockAppController): + """Device fixture with a single endpoint.""" + ieee = sentinel.ieee + nwk = 0x2233 + device = Device(MockAppController, ieee, nwk) + + device.add_endpoint(1) + device[1].profile_id = 0x0104 + device[1].device_type = 0x0051 + device.model = "model" + device.manufacturer = "manufacturer" + device[1].add_input_cluster(0x0000) + device[1].add_input_cluster(0xEF00) + device[1].add_output_cluster(0x000A) + device[1].add_output_cluster(0x0019) + return device + + @pytest.fixture def assert_signature_matches_quirk(): """Return a function that can be used to check if a given quirk matches a signature.""" diff --git a/tests/test_quirks.py b/tests/test_quirks.py index 1833935172..01e6ce7db2 100644 --- a/tests/test_quirks.py +++ b/tests/test_quirks.py @@ -14,7 +14,7 @@ import zigpy.endpoint import zigpy.profiles import zigpy.quirks as zq -from zigpy.quirks import CustomDevice +from zigpy.quirks import CustomDevice, DeviceRegistry from zigpy.quirks.v2 import QuirkBuilder import zigpy.types from zigpy.zcl import foundation @@ -845,8 +845,9 @@ def check_for_duplicate_cluster_ids(clusters) -> None: check_for_duplicate_cluster_ids(ep_data.get(OUTPUT_CLUSTERS, [])) -async def test_local_data_cluster(zigpy_device_from_v2_quirk) -> None: +async def test_local_data_cluster(device_mock) -> None: """Ensure reading attributes from a LocalDataCluster works as expected.""" + registry = DeviceRegistry() class TestLocalCluster(zhaquirks.LocalDataCluster): """Test cluster.""" @@ -856,11 +857,11 @@ class TestLocalCluster(zhaquirks.LocalDataCluster): _VALID_ATTRIBUTES = [2] ( - QuirkBuilder("manufacturer-local-test", "model") + QuirkBuilder(device_mock.manufacturer, device_mock.model, registry=registry) .adds(TestLocalCluster) .add_to_registry() ) - device = zigpy_device_from_v2_quirk("manufacturer-local-test", "model") + device = registry.get_device(device_mock) assert isinstance(device.endpoints[1].in_clusters[0x1234], TestLocalCluster) # reading invalid attribute return unsupported attribute diff --git a/tests/test_tuya_builder.py b/tests/test_tuya_builder.py index 2f251153c5..f8850cbcbe 100644 --- a/tests/test_tuya_builder.py +++ b/tests/test_tuya_builder.py @@ -3,7 +3,6 @@ from unittest import mock import pytest -from zigpy.device import Device from zigpy.quirks.registry import DeviceRegistry from zigpy.quirks.v2 import CustomDeviceV2 import zigpy.types as t @@ -25,30 +24,9 @@ ) from zhaquirks.tuya.mcu import TuyaMCUCluster, TuyaOnOffNM -from .async_mock import sentinel - zhaquirks.setup() -@pytest.fixture(name="device_mock") -def real_device(MockAppController): - """Device fixture with a single endpoint.""" - ieee = sentinel.ieee - nwk = 0x2233 - device = Device(MockAppController, ieee, nwk) - - device.add_endpoint(1) - device[1].profile_id = 0x0104 - device[1].device_type = 0x0051 - device.model = "model" - device.manufacturer = "manufacturer" - device[1].add_input_cluster(0x0000) - device[1].add_input_cluster(0xEF00) - device[1].add_output_cluster(0x000A) - device[1].add_output_cluster(0x0019) - return device - - @pytest.mark.parametrize( "method_name,attr_name,exp_class", [