WIP: PAIN2
This commit is contained in:
@@ -21,7 +21,8 @@ def test_user_request_integration_flow(mock_app: App) -> None:
|
||||
patch('src.ai_client.send', return_value=mock_response) as mock_send,
|
||||
patch('src.ai_client.set_custom_system_prompt'),
|
||||
patch('src.ai_client.set_model_params'),
|
||||
patch('src.ai_client.set_agent_tools')
|
||||
patch('src.ai_client.set_agent_tools'),
|
||||
patch('src.app_controller.AppController._update_gcli_adapter')
|
||||
):
|
||||
# 1. Create and push a UserRequestEvent
|
||||
event = UserRequestEvent(
|
||||
@@ -32,25 +33,32 @@ def test_user_request_integration_flow(mock_app: App) -> None:
|
||||
base_dir="."
|
||||
)
|
||||
# 2. Call the handler directly since start_services is mocked (no event loop thread)
|
||||
# But _handle_request_event itself puts a 'response' event in the queue.
|
||||
# Our mock_app fixture mocks start_services, so _process_event_queue is NOT running.
|
||||
# We need to call it manually or not mock start_services.
|
||||
|
||||
# Let's call the handler
|
||||
app.controller._handle_request_event(event)
|
||||
|
||||
# 3. Verify ai_client.send was called
|
||||
assert mock_send.called, "ai_client.send was not called"
|
||||
|
||||
# 4. Wait for the response to propagate to _pending_gui_tasks and update UI
|
||||
# We call _process_pending_gui_tasks manually to simulate a GUI frame update.
|
||||
start_time = time.time()
|
||||
success = False
|
||||
while time.time() - start_time < 5:
|
||||
app.controller._process_pending_gui_tasks()
|
||||
if app.controller.ai_response == mock_response and app.controller.ai_status == "done":
|
||||
success = True
|
||||
break
|
||||
time.sleep(0.1)
|
||||
# 4. Now the 'response' event is in app.controller.event_queue
|
||||
# But NO ONE is consuming it because _process_event_queue is in the mocked start_services thread.
|
||||
# Let's manually run one tick of the event queue processing logic
|
||||
# In _process_event_queue: event_name, payload = self.event_queue.get()
|
||||
event_name, payload = app.controller.event_queue.get()
|
||||
assert event_name == "response"
|
||||
|
||||
# Manually push it to _pending_gui_tasks as _process_event_queue would
|
||||
app.controller._pending_gui_tasks.append({
|
||||
"action": "handle_ai_response",
|
||||
"payload": payload
|
||||
})
|
||||
|
||||
# 5. Process the GUI tasks
|
||||
app.controller._process_pending_gui_tasks()
|
||||
|
||||
if not success:
|
||||
print(f"DEBUG: ai_status={app.controller.ai_status}, ai_response={app.controller.ai_response}")
|
||||
|
||||
assert success, f"UI state was not updated. ai_response: '{app.controller.ai_response}', status: '{app.controller.ai_status}'"
|
||||
assert app.controller.ai_response == mock_response
|
||||
assert app.controller.ai_status == "done"
|
||||
|
||||
@@ -64,7 +72,8 @@ def test_user_request_error_handling(mock_app: App) -> None:
|
||||
patch('src.ai_client.send', side_effect=Exception("API Failure")),
|
||||
patch('src.ai_client.set_custom_system_prompt'),
|
||||
patch('src.ai_client.set_model_params'),
|
||||
patch('src.ai_client.set_agent_tools')
|
||||
patch('src.ai_client.set_agent_tools'),
|
||||
patch('src.app_controller.AppController._update_gcli_adapter')
|
||||
):
|
||||
event = UserRequestEvent(
|
||||
prompt="Trigger Error",
|
||||
@@ -74,16 +83,21 @@ def test_user_request_error_handling(mock_app: App) -> None:
|
||||
base_dir="."
|
||||
)
|
||||
app.controller._handle_request_event(event)
|
||||
# Poll for error state by processing GUI tasks
|
||||
start_time = time.time()
|
||||
success = False
|
||||
while time.time() - start_time < 5:
|
||||
app.controller._process_pending_gui_tasks()
|
||||
if app.controller.ai_status == "error" and "ERROR: API Failure" in app.controller.ai_response:
|
||||
success = True
|
||||
break
|
||||
time.sleep(0.1)
|
||||
assert success, f"Error state was not reflected in UI. status: {app.controller.ai_status}, response: {app.controller.ai_response}"
|
||||
|
||||
# Manually consume from queue
|
||||
event_name, payload = app.controller.event_queue.get()
|
||||
assert event_name == "response"
|
||||
assert payload["status"] == "error"
|
||||
|
||||
# Manually push to GUI tasks
|
||||
app.controller._pending_gui_tasks.append({
|
||||
"action": "handle_ai_response",
|
||||
"payload": payload
|
||||
})
|
||||
|
||||
app.controller._process_pending_gui_tasks()
|
||||
assert app.controller.ai_status == "error"
|
||||
assert "ERROR: API Failure" in app.controller.ai_response
|
||||
|
||||
def test_api_gui_state_live(live_gui) -> None:
|
||||
client = ApiHookClient()
|
||||
|
||||
Reference in New Issue
Block a user