feat(i18n): add language switcher
This commit is contained in:
@@ -0,0 +1,93 @@
|
||||
import { expect, type Page, test } from "@playwright/test"
|
||||
|
||||
async function setLocaleCookie(
|
||||
page: Page,
|
||||
locale: "en" | "es",
|
||||
baseURL?: string,
|
||||
) {
|
||||
await page.context().addCookies([
|
||||
{
|
||||
name: "stock-manager-locale",
|
||||
value: locale,
|
||||
url: baseURL ?? "http://127.0.0.1:3100",
|
||||
},
|
||||
])
|
||||
}
|
||||
|
||||
async function expectLocaleCookie(page: Page, locale: "en" | "es") {
|
||||
await expect
|
||||
.poll(async () => {
|
||||
const cookies = await page.context().cookies()
|
||||
return cookies.find((cookie) => cookie.name === "stock-manager-locale")
|
||||
?.value
|
||||
})
|
||||
.toBe(locale)
|
||||
}
|
||||
|
||||
async function signInAsAdmin(page: Page, baseURL?: string) {
|
||||
await setLocaleCookie(page, "en", baseURL)
|
||||
await page.goto("/login")
|
||||
await page.getByLabel("Username").fill("admin")
|
||||
await page.getByLabel("Password").fill("admin-password")
|
||||
await page.getByRole("button", { name: "Sign In" }).click()
|
||||
await expect(page).toHaveURL("/")
|
||||
}
|
||||
|
||||
test.describe("language switcher", () => {
|
||||
test("switches the login page language in place through the locale cookie", async ({
|
||||
baseURL,
|
||||
page,
|
||||
}) => {
|
||||
await setLocaleCookie(page, "en", baseURL)
|
||||
|
||||
await page.goto("/login")
|
||||
|
||||
await expect(page).toHaveURL(/\/login$/)
|
||||
await expect(page.locator("html")).toHaveAttribute("lang", "en")
|
||||
await expect(page.getByRole("heading", { name: "Sign In" })).toBeVisible()
|
||||
|
||||
await page.getByRole("button", { name: "Language: English" }).click()
|
||||
|
||||
const options = page.getByRole("menuitemradio")
|
||||
await expect(options).toHaveCount(2)
|
||||
await expect(
|
||||
page.getByRole("menuitemradio", { name: "English" }),
|
||||
).toBeVisible()
|
||||
await page.getByRole("menuitemradio", { name: "Spanish" }).click()
|
||||
|
||||
await expect(page).toHaveURL(/\/login$/)
|
||||
await expect(page.locator("html")).toHaveAttribute("lang", "es")
|
||||
await expect(
|
||||
page.getByRole("heading", { name: "Iniciar sesión" }),
|
||||
).toBeVisible()
|
||||
await expect(page.getByLabel("Usuario")).toBeVisible()
|
||||
await expect(page.getByLabel("Contraseña")).toBeVisible()
|
||||
await expect(
|
||||
page.getByRole("button", { name: "Iniciar sesión" }),
|
||||
).toBeVisible()
|
||||
await expectLocaleCookie(page, "es")
|
||||
})
|
||||
|
||||
test("switches the authenticated dashboard language from the navbar", async ({
|
||||
baseURL,
|
||||
page,
|
||||
}) => {
|
||||
await signInAsAdmin(page, baseURL)
|
||||
|
||||
await expect(page.locator("html")).toHaveAttribute("lang", "en")
|
||||
await expect(page.getByRole("heading", { name: "Dashboard" })).toBeVisible()
|
||||
await expect(page.getByText("E2E Admin")).toBeVisible()
|
||||
|
||||
await page.getByRole("button", { name: "Language: English" }).click()
|
||||
await page.getByRole("menuitemradio", { name: "Spanish" }).click()
|
||||
|
||||
await expect(page).toHaveURL("/")
|
||||
await expect(page.locator("html")).toHaveAttribute("lang", "es")
|
||||
await expect(
|
||||
page.getByRole("heading", { name: "Panel de control" }),
|
||||
).toBeVisible()
|
||||
await expect(page.getByText("E2E Admin")).toBeVisible()
|
||||
await expect(page.getByText("admin@example.test")).toBeVisible()
|
||||
await expectLocaleCookie(page, "es")
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user