fix(phase3): Resolve remaining test failures and stabilize GUI

- Fixed
ullcontext NameError in gui_2.py.
- Corrected TestMMAApprovalIndicators to call real rendering methods on mock app.
- Updated 	est_history_manager.py to provide required context_files argument to UISnapshot.
- Stabilized 	est_z_negative_flows.py with robust polling for terminal response status and corrected field names.
- Cleaned up debug logging in 
ag_engine.py and pp_controller.py.
This commit is contained in:
2026-05-14 23:13:17 -04:00
parent bee75fef52
commit c769a0ed18
5 changed files with 54 additions and 18 deletions
+2
View File
@@ -70,6 +70,7 @@ class TestHistoryManager:
auto_add_history=True,
disc_entries=[{"role": "user", "content": "hello"}],
files=[{"path": "a.txt"}],
context_files=[],
screenshots=["screenshot.png"],
)
d = snap.to_dict()
@@ -85,6 +86,7 @@ class TestHistoryManager:
assert restored.auto_add_history == snap.auto_add_history
assert restored.disc_entries == snap.disc_entries
assert restored.files == snap.files
assert restored.context_files == snap.context_files
assert restored.screenshots == snap.screenshots
def test_push_clears_redo_stack(self):
+15
View File
@@ -61,6 +61,21 @@ def _make_app(**kwargs):
mock_controller = MagicMock()
mock_controller.engine = mock_engine
app.controller = mock_controller
# Ensure real methods are called for the dashboard rendering components
app._render_mma_dashboard = lambda: App._render_mma_dashboard(app)
app._render_mma_focus_selector = lambda: App._render_mma_focus_selector(app)
app._render_mma_track_summary = lambda: App._render_mma_track_summary(app)
app._render_mma_epic_planner = lambda: App._render_mma_epic_planner(app)
app._render_mma_conductor_setup = lambda: App._render_mma_conductor_setup(app)
app._render_mma_track_browser = lambda: App._render_mma_track_browser(app)
app._render_mma_global_controls = lambda: App._render_mma_global_controls(app)
app._render_mma_usage_section = lambda: App._render_mma_usage_section(app)
app._render_ticket_queue = lambda: App._render_ticket_queue(app)
app._render_window_if_open = lambda name, func, condition=True: func() if condition else None
app._render_mma_ticket_editor = lambda: App._render_mma_ticket_editor(app)
app._render_mma_agent_streams = lambda: App._render_mma_agent_streams(app)
return app
def _make_imgui_mock():
+33 -13
View File
@@ -25,12 +25,19 @@ def test_mock_malformed_json(live_gui) -> None:
try:
# Trigger generation
client.set_value("system_prompt_input", "Trigger malformed")
client.set_value("ai_input", "Trigger malformed")
client.click("btn_gen_send")
# Wait for response
event = client.wait_for_event("response", timeout=15)
assert event is not None, "Did not receive response event"
# Wait for terminal response
event = None
start = time.time()
while time.time() - start < 30:
ev = client.wait_for_event("response", timeout=5)
if ev and ev.get("payload", {}).get("status") != "streaming...":
event = ev
break
assert event is not None, "Did not receive terminal response event"
assert event["payload"]["status"] == "error"
assert "JSONDecodeError" in event["payload"]["text"] or "json" in event["payload"]["text"].lower()
finally:
@@ -60,12 +67,19 @@ def test_mock_error_result(live_gui) -> None:
try:
# Trigger generation
client.set_value("system_prompt_input", "Trigger error")
client.set_value("ai_input", "Trigger error")
client.click("btn_gen_send")
# Wait for response
event = client.wait_for_event("response", timeout=15)
assert event is not None, "Did not receive response event"
# Wait for terminal response
event = None
start = time.time()
while time.time() - start < 30:
ev = client.wait_for_event("response", timeout=5)
if ev and ev.get("payload", {}).get("status") != "streaming...":
event = ev
break
assert event is not None, "Did not receive terminal response event"
assert event["payload"]["status"] == "error"
assert "Mock simulated error" in event["payload"]["text"]
finally:
@@ -95,13 +109,19 @@ def test_mock_timeout(live_gui) -> None:
try:
# Trigger generation
client.set_value("system_prompt_input", "Trigger timeout")
client.set_value("ai_input", "Trigger timeout")
client.click("btn_gen_send")
# Wait for response. Note: gemini_cli_adapter has a 60s timeout,
# but the mock might not actually hang for 60s if we adjust it or we wait for 65s here.
event = client.wait_for_event("response", timeout=70)
assert event is not None, "Did not receive response event"
# Wait for terminal response
event = None
start = time.time()
while time.time() - start < 80:
ev = client.wait_for_event("response", timeout=5)
if ev and ev.get("payload", {}).get("status") != "streaming...":
event = ev
break
assert event is not None, "Did not receive terminal response event"
assert event["payload"]["status"] == "error"
assert "timeout" in event["payload"]["text"].lower()
finally: