MAESTRO: add cache flow e2e

This commit is contained in:
Mariusz Banach
2026-02-18 05:23:51 +01:00
parent 86df877ee9
commit 29fbf6255a
2 changed files with 26 additions and 1 deletions

View File

@@ -31,7 +31,7 @@ This phase performs final integration, accessibility audit, responsive testing,
- [x] Complete flow works end-to-end: paste headers → configure tests → analyse → view report → export. Notes: replaced Playwright example spec with end-to-end flow test (paste + configure + analyse + report + export), adjusted Playwright webServer ports/CORS for local 3100 runs, ran `npx playwright test e2e/example.spec.ts --project=chromium`.
- [x] File drop flow works: drop EML → auto-populate → analyse → report. Notes: extract header block from dropped EML before populating input; updated FileDropZone tests and ran `npx vitest run src/__tests__/FileDropZone.test.tsx`.
- [ ] Cache flow works: analyse → reload → see cached results → clear cache
- [x] Cache flow works: analyse → reload → see cached results → clear cache. Notes: added Playwright cache flow coverage (reload + clear) in e2e/example.spec.ts and ran `npx playwright test e2e/example.spec.ts --project=chromium`.
- [ ] Rate limiting flow works: exceed limit → CAPTCHA modal → solve → retry succeeds
- [ ] `pytest backend/tests/` passes with ≥80% coverage on new modules
- [ ] `npx vitest run --coverage` passes with ≥80% coverage on new components

View File

@@ -59,3 +59,28 @@ test("complete analysis flow from paste to export", async ({ page }) => {
const htmlContents = await fs.readFile(htmlPath, "utf8");
expect(htmlContents).toContain("<title>Email Header Analysis Report</title>");
});
test("cache flow persists report across reloads and clears on demand", async ({ page }) => {
const headers = await fs.readFile(headersPath, "utf8");
await page.goto("http://localhost:3100");
const headerInput = page.getByRole("textbox", { name: "Header Input" });
await headerInput.fill(headers);
await page.getByRole("button", { name: "Analyse Headers" }).click();
const reportContainer = page.getByTestId("report-container");
await reportContainer.waitFor({ state: "visible", timeout: 30000 });
await page.reload();
await expect(page.getByTestId("report-container")).toBeVisible();
await expect(page.getByText("Cached Result")).toBeVisible();
const clearCacheButton = page.getByRole("button", { name: "Clear Cache" });
await clearCacheButton.click();
await expect(page.getByTestId("report-container")).toHaveCount(0);
await expect(headerInput).toHaveValue("");
});