import { expect, test } from "@playwright/test";

import { mockCoreApis } from "@e2e/fixtures/api-mocks";
import {
  clearBrowserState,
  signInWithEmailAndOpenChat,
} from "@e2e/fixtures/test-helpers";

test.beforeEach(async ({ baseURL, context, page }) => {
  await clearBrowserState(context, page, baseURL);
  await mockCoreApis(page);
});

test("user can log out from the sidebar after email login", async ({
  page,
}) => {
  await signInWithEmailAndOpenChat(page);
  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(/\/chat$/);
  await expect(
    page.getByRole("button", { name: "Sign up to unlock more features" }),
  ).toBeVisible();
});
