9396154779
ROOT CAUSE: 3 mismatched names in the empty-context warning path: 1. _handle_generate_send set self.show_empty_context_warning_modal = True but render_empty_context_modal checks self.show_empty_context_modal. The modal never opened. 2. _handle_generate_send / _handle_md_only never set self._pending_generation_action, so the modal's 'Proceed Anyway' button always saw None and dispatched nothing. 3. After Proceed Anyway, _pending_generation_action was never reset, so subsequent empty-context calls would dispatch the wrong action. FIX: - gui_2.py:494,501: show_empty_context_warning_modal -> show_empty_context_modal - gui_2.py:494,501: set _pending_generation_action before showing modal - gui_2.py:5385: reset _pending_generation_action = None after dispatch Tests: tests/test_gen_send_empty_context.py (5 cases) covers all 4 dispatch paths (generate/md_only x proceed/skip) plus the happy path with context. 37/37 regression pass. No new ImGui scope errors (2 pre-existing unrelated).
66 lines
2.7 KiB
Python
66 lines
2.7 KiB
Python
from unittest.mock import MagicMock, patch
|
|
from src.gui_2 import App, render_empty_context_modal
|
|
|
|
class _StubController:
|
|
def __init__(self):
|
|
self.calls = []
|
|
def _handle_generate_send(self): self.calls.append("generate")
|
|
def _handle_md_only(self): self.calls.append("md_only")
|
|
def shutdown(self): pass
|
|
|
|
def test_gen_send_empty_context_opens_warning_modal(app_instance):
|
|
app_instance.ui_selected_context_files = set()
|
|
app_instance.show_empty_context_modal = False
|
|
app_instance._pending_generation_action = None
|
|
app_instance._handle_generate_send()
|
|
assert app_instance.show_empty_context_modal is True
|
|
assert app_instance._pending_generation_action == 'generate'
|
|
|
|
def test_md_only_empty_context_opens_warning_modal(app_instance):
|
|
app_instance.ui_selected_context_files = set()
|
|
app_instance.show_empty_context_modal = False
|
|
app_instance._pending_generation_action = None
|
|
app_instance._handle_md_only()
|
|
assert app_instance.show_empty_context_modal is True
|
|
assert app_instance._pending_generation_action == 'md_only'
|
|
|
|
def test_proceed_anyway_dispatches_generate(app_instance):
|
|
app_instance.ui_selected_context_files = set()
|
|
app_instance.show_empty_context_modal = False
|
|
app_instance._pending_generation_action = None
|
|
app_instance._handle_generate_send()
|
|
with patch("src.gui_2.imgui") as mock_imgui:
|
|
mock_imgui.open_popup = MagicMock()
|
|
mock_imgui.begin_popup_modal.return_value = (True, True)
|
|
mock_imgui.button.return_value = True
|
|
mock_imgui.WindowFlags_ = type("W", (), {"always_auto_resize": 1})()
|
|
stub_ctrl = _StubController()
|
|
app_instance.controller = stub_ctrl
|
|
render_empty_context_modal(app_instance)
|
|
assert "generate" in stub_ctrl.calls
|
|
assert app_instance._pending_generation_action is None
|
|
|
|
def test_proceed_anyway_dispatches_md_only(app_instance):
|
|
app_instance.ui_selected_context_files = set()
|
|
app_instance.show_empty_context_modal = False
|
|
app_instance._pending_generation_action = None
|
|
app_instance._handle_md_only()
|
|
with patch("src.gui_2.imgui") as mock_imgui:
|
|
mock_imgui.open_popup = MagicMock()
|
|
mock_imgui.begin_popup_modal.return_value = (True, True)
|
|
mock_imgui.button.return_value = True
|
|
mock_imgui.WindowFlags_ = type("W", (), {"always_auto_resize": 1})()
|
|
stub_ctrl = _StubController()
|
|
app_instance.controller = stub_ctrl
|
|
render_empty_context_modal(app_instance)
|
|
assert "md_only" in stub_ctrl.calls
|
|
|
|
def test_gen_send_with_context_skips_warning(app_instance):
|
|
app_instance.ui_selected_context_files = {"some_file.py"}
|
|
app_instance._pending_generation_action = None
|
|
stub_ctrl = _StubController()
|
|
app_instance.controller = stub_ctrl
|
|
app_instance._handle_generate_send()
|
|
assert "generate" in stub_ctrl.calls
|
|
assert app_instance._pending_generation_action is None
|