Private
Public Access
0
0

TIER-2 READ conductor/code_styleguides/error_handling.md end-to-end before Phase 5: refactor(gui_2): migrate L1293 _populate_auto_slices file_read to Result[T] (Phase 5)

Extract _populate_auto_slices_file_read_result helper from the file read
try/except in App._populate_auto_slices. Legacy wrapper drains errors to
app._last_request_errors per FR-BC-4 event-handler pattern.

[pre-audit] L1293 INTERNAL_BROAD_CATCH
[post-audit] V count: 13 -> 12 (L1293 removed)
This commit is contained in:
2026-06-19 23:33:04 -04:00
parent 38b6f5c00f
commit ce289db999
2 changed files with 70 additions and 4 deletions
+39
View File
@@ -839,3 +839,42 @@ def test_phase_5_l1284_populate_auto_slices_outline_result_failure():
err = result.errors[0]
assert err.source == "gui_2._populate_auto_slices_outline_result"
assert "outline fetch failed" in err.message
def test_phase_5_l1293_populate_auto_slices_file_read_result_success():
"""
L1293 _populate_auto_slices_file_read_result returns Result.ok=True on success.
The helper wraps the file read try/except in App._populate_auto_slices. On
success, returns Result(data=content) where content is the file text.
"""
from src import gui_2
from unittest.mock import MagicMock, patch, mock_open
app = MagicMock()
f_item = MagicMock()
f_item.path = "/proj/foo/src/bar.py"
with patch("builtins.open", mock_open(read_data="line1\nline2\nline3")):
result = gui_2._populate_auto_slices_file_read_result(app, f_item)
assert result.ok, f"Expected ok=True on success, got errors: {result.errors}"
assert result.data == "line1\nline2\nline3"
def test_phase_5_l1293_populate_auto_slices_file_read_result_failure():
"""
L1293 _populate_auto_slices_file_read_result returns Result.ok=False with ErrorInfo on failure.
When the file read raises (e.g., file not found, encoding error), the helper
converts the exception to ErrorInfo and returns Result(data="", errors=[ErrorInfo]).
"""
from src import gui_2
from unittest.mock import MagicMock, patch
app = MagicMock()
f_item = MagicMock()
f_item.path = "/proj/foo/src/missing.py"
with patch("builtins.open", side_effect=FileNotFoundError("no such file")):
result = gui_2._populate_auto_slices_file_read_result(app, f_item)
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._populate_auto_slices_file_read_result"
assert "no such file" in err.message