From b657fd02cdb3a839adee909323ce9b69504b83b4 Mon Sep 17 00:00:00 2001 From: Raman Gupta <7243222+raman325@users.noreply.github.com> Date: Tue, 23 Feb 2021 18:58:25 -0500 Subject: [PATCH] deep copy zwave_js state in test fixtures so tests are more isolated (#46976) --- tests/components/zwave_js/conftest.py | 42 +++++++++++++++------------ 1 file changed, 23 insertions(+), 19 deletions(-) diff --git a/tests/components/zwave_js/conftest.py b/tests/components/zwave_js/conftest.py index b4b89fb14a2..2f082621c45 100644 --- a/tests/components/zwave_js/conftest.py +++ b/tests/components/zwave_js/conftest.py @@ -1,5 +1,6 @@ """Provide common Z-Wave JS fixtures.""" import asyncio +import copy import json from unittest.mock import AsyncMock, patch @@ -188,7 +189,7 @@ def mock_client_fixture(controller_state, version_state): @pytest.fixture(name="multisensor_6") def multisensor_6_fixture(client, multisensor_6_state): """Mock a multisensor 6 node.""" - node = Node(client, multisensor_6_state) + node = Node(client, copy.deepcopy(multisensor_6_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -196,7 +197,7 @@ def multisensor_6_fixture(client, multisensor_6_state): @pytest.fixture(name="ecolink_door_sensor") def legacy_binary_sensor_fixture(client, ecolink_door_sensor_state): """Mock a legacy_binary_sensor node.""" - node = Node(client, ecolink_door_sensor_state) + node = Node(client, copy.deepcopy(ecolink_door_sensor_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -204,7 +205,7 @@ def legacy_binary_sensor_fixture(client, ecolink_door_sensor_state): @pytest.fixture(name="hank_binary_switch") def hank_binary_switch_fixture(client, hank_binary_switch_state): """Mock a binary switch node.""" - node = Node(client, hank_binary_switch_state) + node = Node(client, copy.deepcopy(hank_binary_switch_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -212,7 +213,7 @@ def hank_binary_switch_fixture(client, hank_binary_switch_state): @pytest.fixture(name="bulb_6_multi_color") def bulb_6_multi_color_fixture(client, bulb_6_multi_color_state): """Mock a bulb 6 multi-color node.""" - node = Node(client, bulb_6_multi_color_state) + node = Node(client, copy.deepcopy(bulb_6_multi_color_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -220,7 +221,7 @@ def bulb_6_multi_color_fixture(client, bulb_6_multi_color_state): @pytest.fixture(name="eaton_rf9640_dimmer") def eaton_rf9640_dimmer_fixture(client, eaton_rf9640_dimmer_state): """Mock a Eaton RF9640 (V4 compatible) dimmer node.""" - node = Node(client, eaton_rf9640_dimmer_state) + node = Node(client, copy.deepcopy(eaton_rf9640_dimmer_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -228,7 +229,7 @@ def eaton_rf9640_dimmer_fixture(client, eaton_rf9640_dimmer_state): @pytest.fixture(name="lock_schlage_be469") def lock_schlage_be469_fixture(client, lock_schlage_be469_state): """Mock a schlage lock node.""" - node = Node(client, lock_schlage_be469_state) + node = Node(client, copy.deepcopy(lock_schlage_be469_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -236,7 +237,7 @@ def lock_schlage_be469_fixture(client, lock_schlage_be469_state): @pytest.fixture(name="lock_august_pro") def lock_august_asl03_fixture(client, lock_august_asl03_state): """Mock a August Pro lock node.""" - node = Node(client, lock_august_asl03_state) + node = Node(client, copy.deepcopy(lock_august_asl03_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -246,7 +247,7 @@ def climate_radio_thermostat_ct100_plus_fixture( client, climate_radio_thermostat_ct100_plus_state ): """Mock a climate radio thermostat ct100 plus node.""" - node = Node(client, climate_radio_thermostat_ct100_plus_state) + node = Node(client, copy.deepcopy(climate_radio_thermostat_ct100_plus_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -256,7 +257,10 @@ def climate_radio_thermostat_ct100_plus_different_endpoints_fixture( client, climate_radio_thermostat_ct100_plus_different_endpoints_state ): """Mock a climate radio thermostat ct100 plus node with values on different endpoints.""" - node = Node(client, climate_radio_thermostat_ct100_plus_different_endpoints_state) + node = Node( + client, + copy.deepcopy(climate_radio_thermostat_ct100_plus_different_endpoints_state), + ) client.driver.controller.nodes[node.node_id] = node return node @@ -264,7 +268,7 @@ def climate_radio_thermostat_ct100_plus_different_endpoints_fixture( @pytest.fixture(name="climate_danfoss_lc_13") def climate_danfoss_lc_13_fixture(client, climate_danfoss_lc_13_state): """Mock a climate radio danfoss LC-13 node.""" - node = Node(client, climate_danfoss_lc_13_state) + node = Node(client, copy.deepcopy(climate_danfoss_lc_13_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -272,7 +276,7 @@ def climate_danfoss_lc_13_fixture(client, climate_danfoss_lc_13_state): @pytest.fixture(name="climate_heatit_z_trm3") def climate_heatit_z_trm3_fixture(client, climate_heatit_z_trm3_state): """Mock a climate radio HEATIT Z-TRM3 node.""" - node = Node(client, climate_heatit_z_trm3_state) + node = Node(client, copy.deepcopy(climate_heatit_z_trm3_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -280,7 +284,7 @@ def climate_heatit_z_trm3_fixture(client, climate_heatit_z_trm3_state): @pytest.fixture(name="nortek_thermostat") def nortek_thermostat_fixture(client, nortek_thermostat_state): """Mock a nortek thermostat node.""" - node = Node(client, nortek_thermostat_state) + node = Node(client, copy.deepcopy(nortek_thermostat_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -317,7 +321,7 @@ async def integration_fixture(hass, client): @pytest.fixture(name="chain_actuator_zws12") def window_cover_fixture(client, chain_actuator_zws12_state): """Mock a window cover node.""" - node = Node(client, chain_actuator_zws12_state) + node = Node(client, copy.deepcopy(chain_actuator_zws12_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -325,7 +329,7 @@ def window_cover_fixture(client, chain_actuator_zws12_state): @pytest.fixture(name="in_wall_smart_fan_control") def in_wall_smart_fan_control_fixture(client, in_wall_smart_fan_control_state): """Mock a fan node.""" - node = Node(client, in_wall_smart_fan_control_state) + node = Node(client, copy.deepcopy(in_wall_smart_fan_control_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -335,9 +339,9 @@ def multiple_devices_fixture( client, climate_radio_thermostat_ct100_plus_state, lock_schlage_be469_state ): """Mock a client with multiple devices.""" - node = Node(client, climate_radio_thermostat_ct100_plus_state) + node = Node(client, copy.deepcopy(climate_radio_thermostat_ct100_plus_state)) client.driver.controller.nodes[node.node_id] = node - node = Node(client, lock_schlage_be469_state) + node = Node(client, copy.deepcopy(lock_schlage_be469_state)) client.driver.controller.nodes[node.node_id] = node return client.driver.controller.nodes @@ -345,7 +349,7 @@ def multiple_devices_fixture( @pytest.fixture(name="gdc_zw062") def motorized_barrier_cover_fixture(client, gdc_zw062_state): """Mock a motorized barrier node.""" - node = Node(client, gdc_zw062_state) + node = Node(client, copy.deepcopy(gdc_zw062_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -353,7 +357,7 @@ def motorized_barrier_cover_fixture(client, gdc_zw062_state): @pytest.fixture(name="iblinds_v2") def iblinds_cover_fixture(client, iblinds_v2_state): """Mock an iBlinds v2.0 window cover node.""" - node = Node(client, iblinds_v2_state) + node = Node(client, copy.deepcopy(iblinds_v2_state)) client.driver.controller.nodes[node.node_id] = node return node @@ -361,6 +365,6 @@ def iblinds_cover_fixture(client, iblinds_v2_state): @pytest.fixture(name="ge_12730") def ge_12730_fixture(client, ge_12730_state): """Mock a GE 12730 fan controller node.""" - node = Node(client, ge_12730_state) + node = Node(client, copy.deepcopy(ge_12730_state)) client.driver.controller.nodes[node.node_id] = node return node