43 lines
1.8 KiB
TypeScript
43 lines
1.8 KiB
TypeScript
/**
|
|
* Full-browser check (Playwright) for the same class of bug as
|
|
* `src/components/InitiativeApplicationForm.draftTyping.integration.test.tsx`.
|
|
*
|
|
* Requires a **running** frontend (default E2E_BASE_URL) and an **authenticated** applicant
|
|
* session with the « Đơn Đề nghị Công nhận » tab reachable (Báo cáo gate completed if applicable).
|
|
*
|
|
* Run (example):
|
|
* cd fe0 && npm run dev
|
|
* E2E_FORM_TYPING=1 npm run test:e2e -- e2e/initiative-application-form-typing.spec.ts
|
|
*/
|
|
import { test, expect } from "@playwright/test";
|
|
|
|
test.describe("Initiative Đơn form — keystroke regressions", () => {
|
|
test.skip(
|
|
process.env.E2E_FORM_TYPING !== "1",
|
|
"Opt-in only: export E2E_FORM_TYPING=1 with a logged-in dev server.",
|
|
);
|
|
|
|
test("browser typing does not surface React Maximum update depth in console", async ({ page }) => {
|
|
const panics: string[] = [];
|
|
page.on("console", (msg) => {
|
|
if (msg.type() !== "error" && msg.type() !== "warning") return;
|
|
const t = msg.text();
|
|
if (/Maximum update depth exceeded|Too many re-renders/u.test(t)) panics.push(t);
|
|
});
|
|
|
|
await page.goto("/dashboard", { waitUntil: "domcontentloaded", timeout: 30_000 });
|
|
const appTab = page.getByRole("tab", { name: /Đơn Đề nghị Công nhận/u });
|
|
await expect(appTab).toBeVisible({ timeout: 20_000 });
|
|
await appTab.click();
|
|
|
|
const summary = page.locator("textarea.min-h-32").first();
|
|
await expect(summary).toBeVisible({ timeout: 25_000 });
|
|
await page.getByPlaceholder("Nhập tên sáng kiến...").focus();
|
|
await page.keyboard.insertText("Đánh máy ");
|
|
await summary.click();
|
|
await page.keyboard.insertText("Mô tả từng ký tự ");
|
|
await page.waitForTimeout(500);
|
|
expect(panics).toEqual([]);
|
|
});
|
|
});
|