Files
manual_slop/tests/test_patch_modal_gui.py
Ed_ f8e1a5b405 feat(tier4): Complete GUI integration for patch modal
- Add patch modal state to AppController instead of App
- Add show_patch_modal/hide_patch_modal action handlers
- Fix push_event to work with flat payload format
- Add patch fields to _gettable_fields
- Both GUI integration tests passing
2026-03-07 00:55:35 -05:00

81 lines
2.2 KiB
Python

import pytest
import time
import sys
import os
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "src")))
from src import api_hook_client
@pytest.mark.integration
@pytest.mark.timeout(120)
def test_patch_modal_appears_on_trigger(live_gui) -> None:
"""
Test that triggering a patch shows the modal in the GUI.
Uses live_gui fixture to start the GUI with test hooks enabled.
"""
proc, _ = live_gui
client = api_hook_client.ApiHookClient()
if not client.wait_for_server(timeout=15):
pytest.skip("GUI server not available")
sample_patch = """--- a/test_file.py
+++ b/test_file.py
@@ -1,3 +1,4 @@
def hello():
- print("old")
+ print("new")
+ print("extra")
return True"""
client.push_event("show_patch_modal", {"patch_text": sample_patch, "file_paths": ["test_file.py"]})
time.sleep(2)
status = client.get_gui_state()
print(f"[DEBUG] GUI state: {status}")
assert status.get("_show_patch_modal") == True, f"Patch modal should be visible but got {status}"
client.push_event("hide_patch_modal", {})
time.sleep(1)
status = client.get_gui_state()
assert status.get("_show_patch_modal") == False, "Patch modal should be closed after hide"
@pytest.mark.integration
@pytest.mark.timeout(120)
def test_patch_apply_modal_workflow(live_gui) -> None:
"""
Test the full patch apply workflow: trigger -> apply -> verify modal closes.
"""
proc, _ = live_gui
client = api_hook_client.ApiHookClient()
if not client.wait_for_server(timeout=15):
pytest.skip("GUI server not available")
sample_patch = """--- a/example.py
+++ b/example.py
@@ -5,3 +5,4 @@
def calculate():
x = 1
- return x
+ return x + 1
+ # added line"""
client.push_event("show_patch_modal", {"patch_text": sample_patch, "file_paths": ["example.py"]})
time.sleep(2)
status = client.get_gui_state()
assert status.get("_show_patch_modal") == True, f"Modal should be visible: {status}"
client.push_event("hide_patch_modal", {})
time.sleep(1)
status = client.get_gui_state()
assert status.get("_show_patch_modal") == False, "Patch modal should close after hide"