Skip to content

test(runner): close the DEV-2498 audit gaps the browser can reach - #200

Open
danielzytohoc wants to merge 1 commit into
masterfrom
test/DEV-2498-coverage-gaps
Open

test(runner): close the DEV-2498 audit gaps the browser can reach#200
danielzytohoc wants to merge 1 commit into
masterfrom
test/DEV-2498-coverage-gaps

Conversation

@danielzytohoc

@danielzytohoc danielzytohoc commented Aug 17, 2026

Copy link
Copy Markdown

What

Five spec-only E2E additions in runner/e2e/, one per browser-reachable gap from the DEV-2498 coverage audit. No product code changes. All deterministic — the Sandpack bundler is aborted and every API call is stubbed — and green in a local pnpm e2e run against the vite preview (full suite: 161 passed, 0 failed).

The five tests, mapped to tickets

Gap Ticket Test
G4 DEV-2500 (f) files-drop.spec.tsReplace on a colliding drop overwrites in place, and adds no copy. Replace and Cancel both leave exactly one /notes.md row, so the test reads the active editor after Replace and requires second. Verified by mutation: temporarily asserting first fails, so the content read is the discriminator.
G7 DEV-2500 (g) files-drop.spec.tsa drop on a folder row lands inside that folder. Mirror of the pointer-off-a-row test: same event sequence, but it stays on the /src row and completes the drop — /src/notes.md appears, root /notes.md does not.
G6 DEV-2499 (reachability) new blank-starter.spec.ts — the Create tile links to ?example=blank and lands on the blank file set (not the react showcase); the blank entry opens with startRows and none of registerAllModules/contextMenu/sample data; the picker lists all three Blank templates first (first-row asserted, so a reorder fails).
G5 DEV-2501 / parent My-demos surface all-demos.spec.tsa demo the MCP created shows up on your own list. A scope=mine row with forked_from: "mcp:react" and created_by = the caller renders as a first-class owned card: Rename and Delete in the kebab, Open → /edit/:id. stubDemos grew an extraMine parameter so the owner-filter head-counts on the all scope stay untouched.
G9 DEV-2507 (share surface) description-markdown.spec.tsa shared demo's description renders as markdown for its reader. The file's assertions all ran on /edit/:id; this one hits /share/:id anonymously (ShareRoute's user is always null) and asserts a real <strong> in Box info with no literal **filters**.

Verification

  • pnpm e2e e2e/files-drop.spec.ts e2e/blank-starter.spec.ts e2e/all-demos.spec.ts e2e/description-markdown.spec.ts — 32 passed.
  • Full pnpm e2e — 161 passed, 124 skipped (gated live/matrix), 0 failed.
  • Mutation spot-check on the Replace test: inverting the content assertion fails the test, then restored.

Note

Low Risk
Adds E2E tests only; no runtime, auth, or data-path changes.

Overview
Spec-only Playwright coverage for five browser-reachable gaps from the DEV-2498 audit — no product changes. Everything is deterministic (stubbed APIs, aborted Sandpack).

Files drop (files-drop.spec.ts): adds tests that a drop on a folder row lands under that folder (mirror of the existing pointer-off-row case), and that Replace on a name collision overwrites file content in place (editor shows second, not first) without creating a -1 copy.

Blank starter (new blank-starter.spec.ts): Create links to ?example=blank and loads the blank file set; blank example has minimal grid setup without showcase plugins/data; example picker lists the three Blank templates first.

My demos / MCP (all-demos.spec.ts): stubDemos accepts optional extraMine rows for scope=mine without affecting Everyone (3) on the all list; new test that a demo with forked_from: "mcp:react" appears as a first-class owned card (Rename/Delete, Open → /edit/:id).

Share markdown (description-markdown.spec.ts): anonymous /share/:id renders description markdown in Box info (e.g. <strong>), not raw ** syntax — complementing existing /edit tests.

Reviewed by Cursor Bugbot for commit 465020d. Bugbot is set up for automated code reviews on this repo. Configure here.

…V-2498)

Five spec-only additions, one per reachable gap from the coverage audit. No
product code changes; all deterministic (bundler aborted, APIs stubbed) and
green against the local vite preview.

**Replace on a colliding drop (G4, DEV-2500).** Keep both and Cancel were
covered; the third button was not — and Replace and Cancel both leave exactly
one /notes.md row, so no row assertion can tell them apart. The new test reads
the active editor after Replace and requires "second": verified by mutation
(asserting "first" fails), so the content check is the discriminator, not
decoration.

**A drop on a folder row (G7, DEV-2500).** The existing pointer-off-a-row test
computes the events and the hint, then deliberately walks away; this one stays
on the /src row and completes the drop, asserting the file lands at
/src/notes.md and not at the root.

**Blank starter reachability (G6, DEV-2499), new e2e/blank-starter.spec.ts.**
The Create tile links to ?example=blank and lands on the blank file set (not
the react showcase); the starter's entry opens with startRows and none of
registerAllModules/contextMenu/sample data; and the picker lists the three
Blank templates first, first-row asserted so a reorder fails it.

**MCP-created demo on My demos (G5, DEV-2501).** A scope=mine row with
forked_from "mcp:react" and created_by = the caller renders as a first-class
owned card: kebab offers Rename and Delete, Open goes to /edit/:id. stubDemos
grew an extraMine parameter rather than a rig-wide row, so the owner-filter
head-counts on the all scope stay untouched.

**Shared description renders for its reader (G9, DEV-2507).** Every markdown
assertion in description-markdown.spec.ts ran on /edit/:id; the reader's
surface is /share/:id, anonymous by design. Same stub pair (metadata +
source), asserting a real <strong> in Box info and no literal **filters**.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant