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 9, 2024
1 parent 903b967 commit 2a5f229
Show file tree
Hide file tree
Showing 2 changed files with 99 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 };
87 changes: 87 additions & 0 deletions tests/content-object-store.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
import { expect } from "@playwright/test";
import { test } from "../lib/cachebust-test";
import { publishingAppUrl, waitForUrlToBeAvailable } from "../lib/utils";

test.describe("Content Object Store", { tag: ["@app-content-object-store", "@integration"] }, () => {
const title = `E2E TEST EMAIL - ${new Date().getTime()}`;

test.use({ baseURL: `${publishingAppUrl("whitehall-admin")}/government/admin/content-object-store/` });

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 Object Store" })).toBeVisible();
await expect(page.getByRole("heading", { name: "All content blocks" })).toBeVisible();
});

await test.step("Can create an object", async () => {
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();
});

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();
});
});
});

0 comments on commit 2a5f229

Please sign in to comment.