refactor(gui): drop Review page + normalization gate
Home is now the only entry point: the "Run analysis" button on the upload section IS the review step (findings render inline via render_findings_panel). Tool pages no longer gate on a passed normalization — running the analyzer is sufficient context. Removed: - src/gui/pages/0_Review.py - src/gui/components/gate.py (re-export seam) - require_normalization_gate() in src/gui/components/_legacy.py - "review" section enum in tools_registry.py - Data Review entry in app.py navigation - require_normalization_gate() calls + imports in all nine tool pages - tests/gui/test_gate.py (whole file) - TestReviewWorkflow in tests/gui/test_workflows.py - 0_Review entry in tests/gui/test_smoke.py PAGE_SLUGS - stash_upload's normalization_result+normalization_for stashing - stash_upload_without_gate (was the gate's negative-path helper) 2017 tests pass (16 retired with the gate flow). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -151,50 +151,6 @@ class TestPipelineRunnerWorkflow:
|
||||
assert "Automated Workflows" in text
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Review page — special: doesn't gate on upload, has its own analyzer flow
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
class TestReviewWorkflow:
|
||||
"""The Review page is the gate-fixer. Without an upload it shows
|
||||
its own file uploader so the user can start the flow from this
|
||||
page directly. With an upload it runs the analyzer and shows
|
||||
findings."""
|
||||
|
||||
def test_no_upload_shows_inline_uploader(self, app_factory):
|
||||
app = app_factory("0_Review")
|
||||
app.run()
|
||||
text = collected_text(app)
|
||||
# Page should invite the user to upload, not redirect home.
|
||||
assert "Upload" in text or "Choose a file" in text, (
|
||||
f"Review page should expose an inline uploader; got:\n{text[:400]}"
|
||||
)
|
||||
# The 'Back to home' button is gone — the page is self-contained now.
|
||||
labels = [b.label for b in app.button]
|
||||
assert not any("Back to home" in lbl for lbl in labels), (
|
||||
f"Back-to-home button should be removed; got buttons: {labels}"
|
||||
)
|
||||
|
||||
def test_with_upload_shows_review_content(
|
||||
self, app_factory, small_csv_bytes,
|
||||
):
|
||||
app = app_factory("0_Review")
|
||||
# Review page only needs the upload bytes, not a pre-passed gate.
|
||||
app.session_state["home_uploaded_bytes"] = small_csv_bytes
|
||||
app.session_state["home_uploaded_name"] = "messy.csv"
|
||||
app.session_state["home_uploaded_size"] = len(small_csv_bytes)
|
||||
app.run()
|
||||
assert not app.exception
|
||||
text = collected_text(app)
|
||||
# Page ran the analyzer — either we get findings or the
|
||||
# "already clean" success message. Either way confirms the
|
||||
# analyzer pipeline ran end-to-end with the stashed bytes.
|
||||
clean_msg = "No findings to review" in text
|
||||
encoding_section = "File encoding" in text
|
||||
assert clean_msg or encoding_section, (
|
||||
f"Review page didn't surface analyzer output; got:\n{text[:400]}"
|
||||
)
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# Coming-Soon pages still render (just a stub) — pinned so we know if a
|
||||
|
||||
Reference in New Issue
Block a user