From 9ad17379e8b0c52611cc1e0d56f7e97366e80e1b Mon Sep 17 00:00:00 2001 From: chenhang Date: Mon, 29 Jun 2026 18:16:40 +0800 Subject: [PATCH] test(e2e): add mock sidebar logout coverage --- e2e/fixtures/api-mocks.ts | 4 ++ e2e/specs/mock/logout-from-sidebar.spec.ts | 44 ++++++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 e2e/specs/mock/logout-from-sidebar.spec.ts diff --git a/e2e/fixtures/api-mocks.ts b/e2e/fixtures/api-mocks.ts index 0b7d2184..cbb2001c 100644 --- a/e2e/fixtures/api-mocks.ts +++ b/e2e/fixtures/api-mocks.ts @@ -21,6 +21,10 @@ export async function mockCoreApis(page: Page): Promise { await route.fulfill({ json: apiEnvelope(emailLoginResponse) }); }); + await page.route("**/api/auth/logout", async (route) => { + await route.fulfill({ json: apiEnvelope(null) }); + }); + await page.route("**/api/user/profile", async (route) => { await route.fulfill({ json: apiEnvelope(e2eEmailUser) }); }); diff --git a/e2e/specs/mock/logout-from-sidebar.spec.ts b/e2e/specs/mock/logout-from-sidebar.spec.ts new file mode 100644 index 00000000..bf49fa95 --- /dev/null +++ b/e2e/specs/mock/logout-from-sidebar.spec.ts @@ -0,0 +1,44 @@ +import { expect, test } from "@playwright/test"; + +import { mockCoreApis } from "../../fixtures/api-mocks"; + +test.beforeEach(async ({ context, page }) => { + await context.clearCookies(); + await mockCoreApis(page); +}); + +test("user can log out from the sidebar after email login", async ({ + page, +}) => { + await page.goto("/auth"); + + await page.getByRole("button", { name: /Other Sign In Options/i }).click(); + await expect( + page.getByRole("dialog", { name: /Other sign-in options/i }), + ).toBeVisible(); + + await page.getByRole("button", { name: "Email Sign In" }).click(); + await expect(page.getByPlaceholder("Email")).toHaveValue( + "chanwillian0@gmail.com", + ); + await expect(page.getByPlaceholder("Password")).toHaveValue("12345678"); + + await page.getByRole("button", { name: "Login" }).click(); + await expect(page).toHaveURL(/\/chat$/); + await expect(page.getByRole("button", { name: "Menu" })).toBeVisible(); + + await page.getByRole("button", { name: "Menu" }).click(); + await expect(page).toHaveURL(/\/sidebar$/); + + const logoutRequestPromise = page.waitForRequest("**/api/auth/logout"); + await page.getByRole("button", { name: /Log out/i }).click(); + + const logoutRequest = await logoutRequestPromise; + expect(logoutRequest.method()).toBe("POST"); + + await expect(page).toHaveURL(/\/splash$/); + await expect(page.getByRole("button", { name: "Skip" })).toBeVisible(); + await expect( + page.getByRole("button", { name: "Login with Facebook" }), + ).toBeVisible(); +});