diff --git a/__tests__/frontend/non-empty.spec.ts b/__tests__/frontend/non-empty.spec.ts index 0267b198..cc41fbfc 100644 --- a/__tests__/frontend/non-empty.spec.ts +++ b/__tests__/frontend/non-empty.spec.ts @@ -72,3 +72,124 @@ test("works with non-empty destination folder", async ({ page }) => { expect(moveCalls[1]).toStrictEqual(["root", "root", true, true, false]); expect(moveCalls[2]).toStrictEqual(["root", "root", true, true, true]); }); + +test("works with non-empty destination folder and keyboard navigation", async ({ page }) => { + await page.goto("/"); + const getCalls = await setup(page); + + await page.evaluate(() => { + window._endpointStubs.listSharedDrives = [ + { + status: "success", + value: { status: "success", response: [] }, + }, + { + status: "success", + value: { status: "success", response: [] }, + }, + { + status: "success", + value: { status: "success", response: [] }, + }, + ]; + window._endpointStubs.move = [ + { + status: "success", + delay: 500, + value: { status: "error", type: "notEmpty" }, + }, + { + status: "success", + delay: 500, + value: { status: "error", type: "notEmpty" }, + }, + { + status: "success", + value: { status: "success", response: { errors: [] } }, + }, + ]; + }); + + await expect( + page.getByText("Shared drive mover", { exact: true }), + ).toBeVisible(); + await page.keyboard.press("Tab"); + await page.keyboard.press("Tab"); + await page.keyboard.press("Tab"); + await expect( + page.getByRole("button").filter({ hasText: "Continue" }), + ).toBeFocused(); + await page.keyboard.press("Enter"); + await page.keyboard.press("Tab"); + await page.keyboard.press("Tab"); + await expect( + page.getByRole("option").filter({ hasText: "My Drive" }), + ).toBeFocused(); + await page.keyboard.press("Enter"); + await page.keyboard.press("Tab"); + await page.keyboard.press("Tab"); + await expect( + page.getByRole("button").filter({ hasText: "Continue" }), + ).toBeFocused(); + await page.keyboard.press("Enter"); + await page.keyboard.press("Tab"); + await page.keyboard.press("Tab"); + await expect( + page.getByRole("option").filter({ hasText: "My Drive" }), + ).toBeFocused(); + await page.keyboard.press("Enter"); + await page.keyboard.press("Tab"); + await page.keyboard.press("Tab"); + await expect( + page.getByRole("button").filter({ hasText: "Continue" }), + ).toBeFocused(); + await page.keyboard.press("Enter"); + await expect( + page.getByText( + 'contents of the folder "My Drive" into the folder "My Drive"', + ), + ).toBeVisible(); + await page.keyboard.press("Tab"); + await page.keyboard.press("Tab"); + await expect( + page.getByRole("button").filter({ hasText: "Move" }), + ).toBeFocused(); + await page.keyboard.press("Enter"); + await expect( + page.getByText("Destination not empty", { exact: true }), + ).toBeVisible(); + await expect( + page.getByRole("button").filter({ hasText: "No" }), + ).toBeFocused(); + await page.keyboard.press("Enter"); + await page.keyboard.press("Tab"); + await page.keyboard.press("Tab"); + await page.keyboard.press("Tab"); + await page.keyboard.press("Tab"); + await expect( + page.getByRole("button").filter({ hasText: "Continue" }), + ).toBeFocused(); + await page.keyboard.press("Enter"); + await page.keyboard.press("Tab"); + await page.keyboard.press("Tab"); + await expect( + page.getByRole("button").filter({ hasText: "Move" }), + ).toBeFocused(); + await page.keyboard.press("Enter"); + await expect( + page.getByText("Destination not empty", { exact: true }), + ).toBeVisible(); + await page.keyboard.press("Tab"); + await expect( + page.getByRole("button").filter({ hasText: "Yes" }), + ).toBeFocused(); + await page.keyboard.press("Enter"); + await expect(page.getByText("Done!", { exact: true })).toBeVisible(); + await expect(page.getByText("Successfully moved")).toBeVisible(); + + const moveCalls = getCalls("move"); + expect(moveCalls).toHaveLength(3); + expect(moveCalls[0]).toStrictEqual(["root", "root", true, true, false]); + expect(moveCalls[1]).toStrictEqual(["root", "root", true, true, false]); + expect(moveCalls[2]).toStrictEqual(["root", "root", true, true, true]); +});