feat(hk): explain background updates with protected content links and retry details
This commit is contained in:
1 parent
dd7613850e
commit
c5c9941768
42 files changed
+1542
-145
No files matched your search
@@ -0,0 +1,126 @@
|
||||
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/installation");
|
||||
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([]);
|
||||
});
|
||||
Reference in new issue
Block a user