Skip to content

Commit

Permalink
Add content object store specs
Browse files Browse the repository at this point in the history
  • Loading branch information
pezholio committed Oct 14, 2024
1 parent 903b967 commit a827f24
Show file tree
Hide file tree
Showing 2 changed files with 125 additions and 1 deletion.
13 changes: 12 additions & 1 deletion lib/utils.js
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import { expect } from "@playwright/test";

function publishingAppUrl(appName) {
return `https://${appName}.${process.env.PUBLISHING_DOMAIN}`;
}
Expand All @@ -8,4 +10,13 @@ async function logIntoSignon(page) {
await page.getByRole("button", { name: "Sign in" }).click();
}

export { publishingAppUrl, logIntoSignon };
async function waitForUrlToBeAvailable(page, url) {
await expect(async () => {
url = `${url}?cacheBust=${new Date().getTime()}`;
const response = await page.request.get(url);
expect(response.status()).toBe(200);
}).toPass();
return url;
}

export { publishingAppUrl, logIntoSignon, waitForUrlToBeAvailable };
113 changes: 113 additions & 0 deletions tests/content-block-manager.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,113 @@
import { expect } from "@playwright/test";
import { test } from "../lib/cachebust-test";
import { publishingAppUrl, waitForUrlToBeAvailable } from "../lib/utils";

test.describe("Content Block Manager", { tag: ["@app-content-object-store", "@integration"] }, () => {
test.use({ baseURL: `${publishingAppUrl("whitehall-admin")}/content-block-manager/` });

test("Can create and embed an object", async ({ page }) => {
await test.step("Logging in", async () => {
await page.goto("./");
await expect(page.getByRole("banner", { text: "Content Block Manager" })).toBeVisible();
await expect(page.getByRole("heading", { name: "All content blocks" })).toBeVisible();
});

const title = await test.step("Can create an object", async () => {
const title = `E2E TEST EMAIL - ${new Date().getTime()}`;

await page.goto("./");
await page.getByRole("button", { text: "Create new object" }).click();
await page.getByLabel("Email address").click();
await page.getByRole("button", { text: "Save and continute" }).click();

await page.getByLabel("Title").fill(title);
await page.getByLabel("Email address").fill(`foo${new Date().getTime()}@example.com`);

await page.getByRole("combobox").click();
await page.getByRole("option", { name: "Academy for Social Justice" }).click();
await page.getByRole("button", { name: "Save and continue" }).click();
await page.getByRole("button", { name: "Accept and publish" }).click();

await expect(page.getByRole("alert", { text: "Email address created" })).toBeVisible();

return title;
});

const url = await test.step("Can embed an object", async () => {
const summaryCardRows = page
.locator(".govuk-summary-list")
.filter({ hasText: title })
.locator(".govuk-summary-list__row");

const emailAddress = await summaryCardRows
.filter({ hasText: "Email address" })
.locator(".govuk-summary-list__value")
.textContent();

const embedCode = await summaryCardRows
.filter({ hasText: "Embed code" })
.locator(".govuk-summary-list__value")
.textContent();

await page.goto(publishingAppUrl("whitehall-admin"));

await page.getByRole("link", { name: "New document" }).click();
await page.getByLabel("News article").check();
await page.getByRole("button", { name: "Next" }).click();

await page.locator(".choices__item").first().click();
await page.getByRole("option", { name: "News story", exact: true }).click();

const documentTitle = `TEST DOCUMENT - ${new Date().getTime()}`;

await page.getByLabel("Title (required)").fill(documentTitle);
await page.getByLabel("Summary (required)").fill("Some summary");
await page.getByLabel("Body (required)").fill(`Text goes here - ${embedCode}`);
await page.getByRole("button", { name: "Save and go to document" }).click();
await page.getByRole("link", { name: "Add tags" }).click();
await page
.locator('[id="taxonomy_tag_form\\[taxons\\]"]')
.getByRole("list")
.locator("div")
.filter({ hasText: "Brexit" })
.click();
await page.getByRole("button", { name: "Save" }).click();
await page.getByRole("button", { name: "Force publish" }).click();
await page.getByLabel("Reason for force publishing").fill("Some reason");
await page.getByRole("button", { name: "Force publish" }).click();

await page.getByRole("link", { name: documentTitle }).click();
const url = await waitForUrlToBeAvailable(
page,
await page.getByRole("link", { name: "View on website" }).getAttribute("href")
);

await page.goto(url);
await expect(page.getByText(emailAddress)).toBeVisible();

return url;
});

await test.step("Dependent content updates when block content changes", async () => {
await page.goto("./");

await page
.getByRole("link")
.filter({ hasText: `View/edit ${title}` })
.click();

await page.locator(".govuk-summary-list").getByRole("link").filter({ hasText: "Change" }).first().click();

const emailAddress = `foo${new Date().getTime()}@example.org`;
await page.getByLabel("Email address").fill(emailAddress);
await page.getByRole("button", { name: "Save and continue" }).click();

await page.getByRole("button", { name: "Save and continue" }).click();
await page.getByLabel("Publish the change now").check();
await page.getByRole("button", { name: "Accept and publish" }).click();

await page.goto(url);
await expect(page.getByText(emailAddress)).toBeVisible();
});
});
});

0 comments on commit a827f24

Please sign in to comment.