From 05cd591bf5164d7e3ecbee88c58417a7847630ae Mon Sep 17 00:00:00 2001 From: rgc99 Date: Thu, 5 Sep 2024 00:44:24 +0000 Subject: [PATCH] Fix issue #184 --- .../irrigation_unlimited/binary_sensor.py | 4 +- tests/configs/service_reload_multi.yaml | 29 ++++++++++++++ tests/test_reload.py | 40 +++++++++++++++++++ 3 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 tests/configs/service_reload_multi.yaml diff --git a/custom_components/irrigation_unlimited/binary_sensor.py b/custom_components/irrigation_unlimited/binary_sensor.py index e517545..74d2827 100644 --- a/custom_components/irrigation_unlimited/binary_sensor.py +++ b/custom_components/irrigation_unlimited/binary_sensor.py @@ -115,11 +115,11 @@ def remove_entity(entities: "dict[Entity]", entity_id: str) -> bool: new_entities.append( IUSequenceEntity(coordinator, controller, None, sequence) ) + for entity in old_entities: + await platform.async_remove_entity(entity) if len(new_entities) > 0: await platform.async_add_entities(new_entities) coordinator.initialise() - for entity in old_entities: - await platform.async_remove_entity(entity) return True diff --git a/tests/configs/service_reload_multi.yaml b/tests/configs/service_reload_multi.yaml new file mode 100644 index 0000000..d76541e --- /dev/null +++ b/tests/configs/service_reload_multi.yaml @@ -0,0 +1,29 @@ +irrigation_unlimited: + controllers: + - name: "Front Yard Flowers SWV" + controller_id: frontyard_flowers_swv + zones: + - name: "Front Yard Flowers" + zone_id: flower_pots + schedules: + - time: + sun: "sunrise" + duration: "00:03:30" + - time: "15:00" + duration: "00:03:00" + rename_entities: true + testing: + enabled: true + speed: 1.0 + output_events: true + show_log: false + autoplay: false + times: + - name: "1-Normal run" + start: "2024-09-05 06:00" + end: "2024-09-05 07:00" + results: + - {t: '2024-09-05 06:26:45', c: 1, z: 0, s: 1} + - {t: '2024-09-05 06:26:45', c: 1, z: 1, s: 1} + - {t: '2024-09-05 06:30:15', c: 1, z: 1, s: 0} + - {t: '2024-09-05 06:30:15', c: 1, z: 0, s: 0} diff --git a/tests/test_reload.py b/tests/test_reload.py index 693a306..f7380b8 100644 --- a/tests/test_reload.py +++ b/tests/test_reload.py @@ -1,4 +1,5 @@ """Test integration_unlimited reload service calls.""" + from datetime import timedelta import pytest import homeassistant.core as ha @@ -237,3 +238,42 @@ async def test_service_reload_shrink_while_on( # don't attempt to finish or check results, there are none. # await exam.finish_test() # check_summary(full_path) + + +async def test_service_reload_multi(hass: ha.HomeAssistant, skip_history): + """Test reliablity on multiple reload calls""" + + async with IUExam(hass, "service_reload_multi.yaml") as exam: + await exam.begin_test(1) + await exam.finish_test() + await exam.reload("service_reload_multi.yaml") + assert exam.coordinator.controllers[0].master_sensor is not None + assert exam.coordinator.controllers[0].zones[0].zone_sensor is not None + await exam.reload("service_reload_multi.yaml") + assert exam.coordinator.controllers[0].master_sensor is not None + assert exam.coordinator.controllers[0].zones[0].zone_sensor is not None + await exam.reload("service_reload_multi.yaml") + assert exam.coordinator.controllers[0].master_sensor is not None + assert exam.coordinator.controllers[0].zones[0].zone_sensor is not None + await exam.reload("service_reload_multi.yaml") + assert exam.coordinator.controllers[0].master_sensor is not None + assert exam.coordinator.controllers[0].zones[0].zone_sensor is not None + await exam.reload("service_reload_multi.yaml") + assert exam.coordinator.controllers[0].master_sensor is not None + assert exam.coordinator.controllers[0].zones[0].zone_sensor is not None + await exam.reload("service_reload_multi.yaml") + assert exam.coordinator.controllers[0].master_sensor is not None + assert exam.coordinator.controllers[0].zones[0].zone_sensor is not None + await exam.reload("service_reload_multi.yaml") + assert exam.coordinator.controllers[0].master_sensor is not None + assert exam.coordinator.controllers[0].zones[0].zone_sensor is not None + await exam.reload("service_reload_multi.yaml") + assert exam.coordinator.controllers[0].master_sensor is not None + assert exam.coordinator.controllers[0].zones[0].zone_sensor is not None + await exam.reload("service_reload_multi.yaml") + assert exam.coordinator.controllers[0].master_sensor is not None + assert exam.coordinator.controllers[0].zones[0].zone_sensor is not None + await exam.reload("service_reload_multi.yaml") + assert exam.coordinator.controllers[0].master_sensor is not None + assert exam.coordinator.controllers[0].zones[0].zone_sensor is not None + # exam.check_summary()