drag-drop.spec.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. import { expect, test } from "@playwright/test"
  2. test.describe("Drag-and-drop block reorder", () => {
  3. test.beforeEach(async ({ page }) => {
  4. await page.goto("/editor?e2e=true")
  5. })
  6. test("drag block 0 to after block 2 reorders correctly", async ({ page }) => {
  7. const beforeIds = await page.evaluate(() =>
  8. window.__testUtils__?.getBlockIds(),
  9. )
  10. expect(beforeIds?.length).toBeGreaterThan(2)
  11. // Use programmatic reorderBlocks instead of HTML5 DnD, since Playwright
  12. // cannot reliably trigger the browser's drag-and-drop engine.
  13. await page.evaluate(() => {
  14. window.__testUtils__?.reorderBlocks(0, 2)
  15. })
  16. // Block 0 should now be at index 2 (after blocks 1 and 2)
  17. // Block 0 should now be at index 2 (after blocks 1 and 2)
  18. const afterIds = await page.evaluate(() =>
  19. window.__testUtils__?.getBlockIds(),
  20. )
  21. expect(afterIds?.[0]).toBe(beforeIds?.[1])
  22. expect(afterIds?.[1]).toBe(beforeIds?.[2])
  23. expect(afterIds?.[2]).toBe(beforeIds?.[0])
  24. })
  25. test("drag block 2 to before block 0 reorders correctly", async ({
  26. page,
  27. }) => {
  28. const beforeIds = await page.evaluate(() =>
  29. window.__testUtils__?.getBlockIds(),
  30. )
  31. expect(beforeIds?.length).toBeGreaterThan(2)
  32. // Move block at index 2 to before block 0
  33. await page.evaluate(() => {
  34. window.__testUtils__?.reorderBlocks(2, 0)
  35. })
  36. const afterIds = await page.evaluate(() =>
  37. window.__testUtils__?.getBlockIds(),
  38. )
  39. expect(afterIds?.[0]).toBe(beforeIds?.[2])
  40. expect(afterIds?.[1]).toBe(beforeIds?.[0])
  41. expect(afterIds?.[2]).toBe(beforeIds?.[1])
  42. })
  43. })