Private
Public Access
0
0

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
This commit is contained in:
2026-06-30 20:42:50 -04:00
parent 70dc0550c2
commit 71a36d8db0
+15 -9
View File
@@ -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