From 71a36d8db0cfe0722841d349363daa8c07e8ca86 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Tue, 30 Jun 2026 20:42:50 -0400 Subject: [PATCH] fix(test_undo_redo): longer wait times for batch live_gui contention The undo/redo test was timing-sensitive: it relied on the render loop's 1.5s snapshot debounce firing within the test's 3s time.sleep() between set_value calls. In a shared live_gui subprocess (xdist batch), the render loop runs much slower than the 60fps target because other tests' API calls contend for the main thread. The flaky failure mode: undo applied the wrong snapshot (or no snapshot was pushed yet), so ai_input stayed at "Modified Input" instead of reverting to "Initial Input". Bumped the waits: - After set_value: 3s -> 8s (covers render loop delay in batch) - After undo/redo: 2s -> 4s (covers the apply-snapshot return path) The test still verifies the same functionality (undo restores state, redo re-applies it), just gives the render loop enough wall-clock budget in batch context. The waits are still well below any test timeout. Verified: 3/3 undo/redo tests PASS in 49.46s isolated. Files changed: - tests/test_undo_redo_sim.py: bumped sleeps in test_undo_redo_lifecycle --- tests/test_undo_redo_sim.py | 24 +++++++++++++++--------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/tests/test_undo_redo_sim.py b/tests/test_undo_redo_sim.py index ceacfeac..b497a0e0 100644 --- a/tests/test_undo_redo_sim.py +++ b/tests/test_undo_redo_sim.py @@ -7,7 +7,7 @@ def test_undo_redo_lifecycle(live_gui): client = ApiHookClient() client.click("btn_reset") time.sleep(2) - + assert client.wait_for_server(timeout=15), "Hook server did not start" # 1. Set initial state @@ -15,16 +15,22 @@ def test_undo_redo_lifecycle(live_gui): client.set_value('temperature', 0.5) client.set_value('ai_input', "Initial Input") - # Wait for settle and first push (S_init -> S0) - time.sleep(3.0) + # Wait for settle and first push (S_init -> S0). + # The render loop's snapshot debounce is 1.5s, but in a shared + # live_gui subprocess the render loop runs much slower due to other + # tests' API calls contending for the main thread. The 8s wait below + # is generous enough to handle batch contention (was 3s; bumped + # after batch run showed undo applied the wrong snapshot, indicating + # the push hadn't fired yet when undo was clicked). + time.sleep(8.0) # 2. Change state print("Modifying state...") client.set_value('temperature', 1.5) client.set_value('ai_input', "Modified Input") - # Wait for settle and second push (S0 -> S1) - time.sleep(3.0) + # Wait for settle and second push (S0 -> S1). Same rationale as above. + time.sleep(8.0) # Verify current state temp = client.get_value('temperature') @@ -36,16 +42,16 @@ def test_undo_redo_lifecycle(live_gui): # 3. Undo (S1 -> S0) print("Sending Undo...") client.click('btn_undo') - time.sleep(2.0) - + time.sleep(4.0) + assert client.get_value('ai_input') == "Initial Input" assert client.get_value('temperature') == 0.5 # 4. Redo (S0 -> S1) print("Sending Redo...") client.click('btn_redo') - time.sleep(2.0) - + time.sleep(4.0) + assert client.get_value('ai_input') == "Modified Input" assert client.get_value('temperature') == 1.5