left4me/l4d2web/tests/e2e
mwiegand e89dd25cdd
test(files): cover internal drag row to folder move
Drags server.cfg from the overlay root onto the cfg/ folder row,
asserts both that the file actually moved on disk AND that the tree
reflects the move after the debounced HTMX refresh of both parents.

Exercises the internal-drag path in uploads.js:332-366: the
custom-MIME setData/getData contract, the POST /files/move call,
and the dual scheduleRefresh(parentOf(src)) + scheduleRefresh(dst)
on success. Playwright's locator.drag_to() synthesizes setData
correctly — it relies on dataTransfer.getData(), NOT
webkitGetAsEntry which Playwright cannot fake.

Pitfalls handled inline: scoped the source/target locators to
li.file-tree-row-{file,dir} because action buttons inside the row
duplicate data-target-path + data-row-kind and would trip strict
mode. Used to_have_count instead of to_be_visible because cfg's
children div is collapsed (hidden) by default — the moved row is
in the DOM but not visually rendered until cfg is expanded.

Per docs/superpowers/plans/2026-05-17-files-overlay-e2e-handoff.md
(Tier 2 case C).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-17 19:18:57 +02:00
..
__init__.py test(e2e): scaffold Playwright + live-server fixture 2026-05-16 21:00:45 +02:00
conftest.py test(files): add files-overlay e2e fixture 2026-05-17 18:35:43 +02:00
test_editor.py test(editor-v2): Playwright e2e + Tab→acceptCompletion fix 2026-05-17 02:15:51 +02:00
test_files_overlay.py test(files): cover internal drag row to folder move 2026-05-17 19:18:57 +02:00
test_smoke.py test(e2e): scaffold Playwright + live-server fixture 2026-05-16 21:00:45 +02:00