Files
EpicNext-Cms/e2e/ui/deliveries.spec.ts
T
Simo 60e49c1ec9
CI / check (push) Successful in 3m31s
CI / deploy (push) Successful in 18s
CI / publish-container (push) Successful in 1m12s
feat(hk): connect delivery failures to precise diagnostic records
2026-09-13 20:25:03 +02:00

130 lines
4.2 KiB
TypeScript

import { expect, test } from "@playwright/test";
test("deliveries explain outcomes without exposing unauthorized content or raw metadata", async ({
page,
}, testInfo) => {
const errors: string[] = [];
page.on("pageerror", (error) => errors.push(error.message));
await page.goto("/admin/deliveries-harness");
const review = page.getByRole("region", { name: "Delivery review" });
const cards = review.getByRole("article");
await expect(cards).toHaveCount(6);
const news = cards.nth(0);
await expect(news.getByRole("heading", { level: 2 })).toContainText(
"Community update: SummerFestival",
);
await expect(news.getByText("Waiting", { exact: true })).toBeVisible();
await expect(
news.getByText(
"The content is saved. This update runs in the background.",
{ exact: true },
),
).toBeVisible();
await expect(news.getByRole("status")).toContainText(
"The news cache could not be refreshed.",
);
await expect(news.getByRole("status")).toContainText(
"Next automatic attempt: Jan 1, 2030, 12:05 PM",
);
await expect(
news.getByRole("link", { name: "Open content", exact: true }),
).toHaveAttribute("href", "/admin/articles/9007199254740993");
await expect(
news.getByRole("link", { name: "Service diagnostics", exact: true }),
).toHaveAttribute(
"href",
"/admin/devops/cms-errors?q=4f3df172-f1ca-4c26-a23e-cb4e6c13e9f2",
);
const failed = cards.nth(1);
await expect(
failed.getByRole("heading", { name: "9 catalog offers", exact: true }),
).toBeVisible();
await expect(
failed.getByText("Needs attention", { exact: true }),
).toBeVisible();
await expect(failed.getByRole("status")).toContainText(
"Check the emulator connection.",
);
await expect(failed.getByRole("status")).toContainText(
"Automatic attempts are exhausted.",
);
await expect(
failed.getByRole("link", { name: "Open content", exact: true }),
).toHaveAttribute("href", "/admin/catalog");
await expect(
failed.getByRole("button", { name: "Retry delivery", exact: true }),
).toBeVisible();
for (const card of [cards.nth(2), cards.nth(3)]) {
await expect(
card.getByRole("heading", {
name: "Content details unavailable",
exact: true,
}),
).toBeVisible();
await expect(
card.getByRole("link", { name: "Open content", exact: true }),
).toHaveCount(0);
await expect(
card.getByRole("button", { name: "Retry delivery", exact: true }),
).toHaveCount(0);
}
const unknown = cards.nth(4);
await expect(
unknown.getByText("Other background update", { exact: true }),
).toBeVisible();
await expect(
unknown.getByText("Unknown status", { exact: true }),
).toBeVisible();
await expect(unknown).toContainText("Time unavailable");
await expect(unknown).toContainText("System");
await expect(cards.nth(5)).toContainText(
"Check the Git export history for the final result; disabled export does not publish files.",
);
await expect(review).not.toContainText(
/RESTRICTED_NEWS_TITLE|SERIALIZED_METADATA_SECRET|INTERNAL_FILE_PATH_SECRET|UNKNOWN_OPERATION_SECRET|489 catalog offers|resultJson|articleId/,
);
await expect(review.locator("details[open]")).toHaveCount(0);
await expect(
news.getByText("Operation: operation-authorized-news-1234567890", {
exact: true,
}),
).toBeHidden();
await expect(
news.getByText("Delivery: delivery-authorized-news-1234567890", {
exact: true,
}),
).toBeHidden();
await news.locator("summary").click();
await expect(
news.getByText("Operation: operation-authorized-news-1234567890", {
exact: true,
}),
).toBeVisible();
await expect(
news.getByText("Delivery: delivery-authorized-news-1234567890", {
exact: true,
}),
).toBeVisible();
await news.locator("summary").click();
await expect(
news.getByText("Operation: operation-authorized-news-1234567890", {
exact: true,
}),
).toBeHidden();
expect(
await page.evaluate(
() => document.documentElement.scrollWidth <= window.innerWidth,
),
).toBe(true);
const title = news.getByRole("heading", { level: 2 });
expect(
await title.evaluate((node) => node.scrollWidth <= node.clientWidth),
).toBe(true);
await page.evaluate(() => window.scrollTo(0, 0));
await testInfo.attach("delivery-cards", {
body: await page.screenshot({ fullPage: true }),
contentType: "image/png",
});
expect(errors).toEqual([]);
});