56 lines
2.0 KiB
TypeScript
56 lines
2.0 KiB
TypeScript
import { expect, test } from "@playwright/test";
|
|
|
|
test.describe("裸 / 重定向", () => {
|
|
test("默认 Accept-Language (en-US) 跳 /en", async ({ request }) => {
|
|
const res = await request.get("/", {
|
|
headers: { "accept-language": "en-US" },
|
|
maxRedirects: 0,
|
|
});
|
|
expect(res.status()).toBeGreaterThanOrEqual(300);
|
|
expect(res.status()).toBeLessThan(400);
|
|
expect(res.headers()["location"]).toContain("/en");
|
|
});
|
|
|
|
test("Accept-Language zh-CN 跳 /zh-CN", async ({ request }) => {
|
|
const res = await request.get("/", {
|
|
headers: { "accept-language": "zh-CN,zh;q=0.9" },
|
|
maxRedirects: 0,
|
|
});
|
|
expect(res.status()).toBeGreaterThanOrEqual(300);
|
|
expect(res.status()).toBeLessThan(400);
|
|
expect(res.headers()["location"]).toContain("/zh-CN");
|
|
});
|
|
|
|
test("cookie app-lang 优先于 Accept-Language", async ({ request }) => {
|
|
const res = await request.get("/", {
|
|
headers: {
|
|
cookie: "app-lang=zh-CN",
|
|
"accept-language": "en-US",
|
|
},
|
|
maxRedirects: 0,
|
|
});
|
|
expect(res.headers()["location"]).toContain("/zh-CN");
|
|
});
|
|
});
|
|
|
|
test.describe("locale 规范化", () => {
|
|
test("小写 /zh-cn 重定向到 /zh-CN", async ({ request }) => {
|
|
const res = await request.get("/zh-cn", { maxRedirects: 0 });
|
|
expect(res.status()).toBeGreaterThanOrEqual(300);
|
|
expect(res.status()).toBeLessThan(400);
|
|
expect(res.headers()["location"]).toBe("/zh-CN");
|
|
});
|
|
});
|
|
|
|
test("header 语言下拉显示当前语言并可切换", async ({ page }) => {
|
|
await page.goto("/zh-CN");
|
|
const trigger = page.getByRole("button", { name: "语言" });
|
|
await expect(trigger).toBeVisible();
|
|
await expect(trigger).toContainText("中文");
|
|
await trigger.click();
|
|
const item = page.locator('[data-switch-locale="en"]');
|
|
await expect(item).toBeVisible();
|
|
await item.click();
|
|
await expect(page).toHaveURL(/\/en$/);
|
|
});
|