refactor(gui_2): migrate L1171 _show_menus do_generate to Result[T] (Phase 3)

TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 3.

Adds _show_menus_do_generate_result(app) -> Result[bool] helper that wraps
the 'Generate MD Only' menu handler try/except in App._show_menus. The
legacy if-branch in App._show_menus becomes a thin call that drains
errors to _last_request_errors.

Audit: BROAD_CATCH count 22 -> 21, COMPLIANT count 15 -> 16. Tests: 2/2 pass.
This commit is contained in:
ed
2026-06-19 22:07:51 -04:00
parent 0f102612ad
commit bcbd46445f
2 changed files with 73 additions and 8 deletions
+44 -1
View File
@@ -335,4 +335,47 @@ def test_phase_3_l1123_render_main_interface_result_failure():
assert result.errors, "Expected at least one error on failure"
err = result.errors[0]
assert err.source == "gui_2._render_main_interface_result"
assert "render blew up" in err.message
assert "render blew up" in err.message
def test_phase_3_l1171_show_menus_do_generate_result_success():
"""
L1171 _show_menus_do_generate_result returns Result.ok=True on success.
The helper wraps the "Generate MD Only" try/except in App._show_menus.
On success, sets app.last_md, app.last_md_path, app.ai_status and
returns Result(data=True).
"""
from src import gui_2
from unittest.mock import MagicMock
app = MagicMock()
mock_md = MagicMock(name="mock_md")
mock_path = MagicMock(name="mock_path")
mock_path.name = "out.md"
app._do_generate.return_value = (mock_md, mock_path)
result = gui_2._show_menus_do_generate_result(app)
assert result.ok, f"Expected ok=True on success, got errors: {result.errors}"
assert result.data is True
assert app.last_md is mock_md
assert app.last_md_path is mock_path
assert "md written" in app.ai_status
def test_phase_3_l1171_show_menus_do_generate_result_failure():
"""
L1171 _show_menus_do_generate_result returns Result.ok=False on failure.
When _do_generate raises, the helper sets app.ai_status to an error
message and returns Result(data=False, errors=[ErrorInfo]).
"""
from src import gui_2
from unittest.mock import MagicMock
app = MagicMock()
app._do_generate.side_effect = RuntimeError("generate blew up")
result = gui_2._show_menus_do_generate_result(app)
assert not result.ok, f"Expected ok=False on failure, got data: {result.data}"
assert result.errors, "Expected at least one error on failure"
err = result.errors[0]
assert err.source == "gui_2._show_menus_do_generate_result"
assert "generate blew up" in err.message
assert "error" in app.ai_status