Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 37 additions & 25 deletions src/ui-spa/integration-tests/pages/caseDetailsPage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ export class CaseDetailsPage {
await expect(this.page).toHaveURL(this.route);
}

async verifyPageElements() {
async verifyPageElements(isCaseSensitive: boolean = false) {
await expect(this.page).toHaveTitle(/Case Details - Register A Case/);
await expect(this.page.locator("h1")).toHaveText("Case details");
await expect(this.page.locator("legend").first()).toHaveText(
Expand All @@ -27,19 +27,26 @@ export class CaseDetailsPage {
await expect(this.page.locator("label").nth(3)).toHaveText(
"Year reference",
);
await expect(this.page.locator("label").nth(4)).toHaveText(
"What is the registering unit?",
);
await expect(this.page.locator("label").nth(5)).toHaveText(
"What is the witness care unit (WCU)?",
);

if (!isCaseSensitive) {
await expect(this.page.locator("label").nth(4)).toHaveText(
"What is the registering unit?",
);
await expect(this.page.locator("label").nth(5)).toHaveText(
"What is the witness care unit (WCU)?",
);
} else {
await expect(this.page.locator("label").nth(4)).toHaveText(
"What is the witness care unit (WCU)?",
);
}
await expect(this.page.getByTestId("urn-year-reference-text")).toHaveValue(
"26",
);
await this.verifyCancelLink();
}

async errorValidations() {
async errorValidations(isCaseSensitive: boolean = false) {
await this.enterUrnYearReference("");
await this.verifyErrorSummaryClear();
this.saveAndContinue();
Expand All @@ -51,12 +58,14 @@ export class CaseDetailsPage {
await expect(this.page.getByTestId("urn-error-text-link")).toHaveText(
"Enter the URN",
);
await expect(
this.page.getByTestId("registering-unit-error-text-link"),
).toBeVisible();
await expect(
this.page.getByTestId("registering-unit-error-text-link"),
).toHaveText("Select the registering unit");
if (!isCaseSensitive) {
await expect(
this.page.getByTestId("registering-unit-error-text-link"),
).toBeVisible();
await expect(
this.page.getByTestId("registering-unit-error-text-link"),
).toHaveText("Select the registering unit");
}
await expect(
this.page.getByTestId("witness-care-unit-error-text-link"),
).toBeVisible();
Expand Down Expand Up @@ -87,17 +96,20 @@ export class CaseDetailsPage {
await expect(
this.page.getByTestId("urn-error-text-link"),
).not.toBeVisible();

await this.page.getByTestId("registering-unit-error-text-link").click();
await expect(this.page.locator("#registering-unit-text")).toBeFocused();
await this.enterRegisteringUnit("abc");
await this.page.getByRole("button", { name: "Save and continue" }).click();
await expect(
this.page.getByTestId("registering-unit-error-text-link"),
).toHaveText("Select a valid registering unit");
await this.page.getByTestId("registering-unit-error-text-link").click();
await expect(this.page.locator("#registering-unit-text")).toBeFocused();
await this.enterRegisteringUnit("NORTHERN CJU (Peterborough)");
if (!isCaseSensitive) {
await this.page.getByTestId("registering-unit-error-text-link").click();
await expect(this.page.locator("#registering-unit-text")).toBeFocused();
await this.enterRegisteringUnit("abc");
await this.page
.getByRole("button", { name: "Save and continue" })
.click();
await expect(
this.page.getByTestId("registering-unit-error-text-link"),
).toHaveText("Select a valid registering unit");
await this.page.getByTestId("registering-unit-error-text-link").click();
await expect(this.page.locator("#registering-unit-text")).toBeFocused();
await this.enterRegisteringUnit("NORTHERN CJU (Peterborough)");
}
await this.page.getByRole("button", { name: "Save and continue" }).click();
await expect(
this.page.getByTestId("registering-unit-error-text-link"),
Expand Down
72 changes: 47 additions & 25 deletions src/ui-spa/integration-tests/pages/caseRegistrationSummaryPage.ts
Original file line number Diff line number Diff line change
Expand Up @@ -49,13 +49,16 @@ export class CaseRegistrationSummaryPage {
await this.verifyCancelLink();
}

async verifyCaseDetailsElements(values: {
area: string;
urn: string;
registeringUnit: string;
wcu: string;
operationName: string;
}) {
async verifyCaseDetailsElements(
values: {
area: string;
urn: string;
registeringUnit: string;
wcu: string;
operationName: string;
},
isCaseSensitive: boolean = false,
) {
const caseDetailWrapperElement = this.page.getByTestId(
"case-details-summary",
);
Expand All @@ -65,15 +68,24 @@ export class CaseRegistrationSummaryPage {
const rows = caseDetailWrapperElement.locator(".govuk-summary-list__row");
await expect(rows.nth(0).locator("dt").nth(0)).toHaveText("Area");
await expect(rows.nth(0).locator("dd").nth(0)).toHaveText(values.area);
const areaChangeLink = rows
.nth(0)
.locator("dd")
.nth(1)
.getByRole("link", { name: "Change" });
await expect(areaChangeLink).toHaveAttribute(
"href",
"/case-registration/areas",
);
if (isCaseSensitive) {
const actions = rows
.nth(0)
.locator("dd")
.nth(1)
.getByRole("link", { name: "Change" });
expect(actions).toHaveCount(0);
} else {
const areaChangeLink = rows
.nth(0)
.locator("dd")
.nth(1)
.getByRole("link", { name: "Change" });
await expect(areaChangeLink).toHaveAttribute(
"href",
"/case-registration/areas",
);
}

await expect(rows.nth(1).locator("dt").nth(0)).toHaveText("URN");
await expect(rows.nth(1).locator("dd").nth(0)).toHaveText(values.urn);
Expand All @@ -93,15 +105,25 @@ export class CaseRegistrationSummaryPage {
await expect(rows.nth(2).locator("dd").nth(0)).toHaveText(
values.registeringUnit,
);
const registeringUnitChangeLink = rows
.nth(2)
.locator("dd")
.nth(1)
.getByRole("link", { name: "Change" });
await expect(registeringUnitChangeLink).toHaveAttribute(
"href",
"/case-registration/case-details",
);

if (isCaseSensitive) {
const actions = rows
.nth(0)
.locator("dd")
.nth(1)
.getByRole("link", { name: "Change" });
expect(actions).toHaveCount(0);
} else {
const registeringUnitChangeLink = rows
.nth(2)
.locator("dd")
.nth(1)
.getByRole("link", { name: "Change" });
await expect(registeringUnitChangeLink).toHaveAttribute(
"href",
"/case-registration/case-details",
);
}

await expect(rows.nth(3).locator("dt").nth(0)).toHaveText("WCU");
await expect(rows.nth(3).locator("dd").nth(0)).toHaveText(values.wcu);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,201 @@
import { delay, HttpResponse, http } from "msw";
import { expect, test } from "./utils/test";
import { CaseRegistrationHomePage } from "./pages/caseRegistrationHomePage";
import { CaseDetailsPage } from "./pages/caseDetailsPage";
import { CaseMonitoringPage } from "./pages/caseMonitoringPage";
import { CaseAssigneePage } from "./pages/caseAssigneePage";
import { CaseRegistrationSummaryPage } from "./pages/caseRegistrationSummaryPage";
import { CaseComplexityPage } from "./pages/caseComplexityPage";
import { CaseRegistrationConfirmationPage } from "./pages/caseRegistrationConfirmationPage";
import { caseAreasAndRegisteringUnitsSensitiveCasePlaywright } from "../src/mocks/data/caseAreasAndRegisteringUnits.playwright";

test("Should successfully complete a sensitive case non suspect journey", async ({
page,
worker,
}) => {
await worker.use(
http.get("https://mocked-out-api/api/v1/units", async () => {
await delay(100);
return HttpResponse.json(
caseAreasAndRegisteringUnitsSensitiveCasePlaywright,
);
}),
);
await page.goto("http://localhost:5173");
const caseRegistrationHomePage = new CaseRegistrationHomePage(page);
await caseRegistrationHomePage.verifyUrl();
await caseRegistrationHomePage.verifyPageElements();
await caseRegistrationHomePage.errorValidations();
await caseRegistrationHomePage.addOperationName("thunderstruck");
await caseRegistrationHomePage.addNoSuspect();
await caseRegistrationHomePage.saveAndContinue();
await caseRegistrationHomePage.verifyErrorSummaryClear();

const caseDetailsPage = new CaseDetailsPage(page);
await caseDetailsPage.verifyUrl();

await caseDetailsPage.verifyBackLink("/case-registration");
await caseDetailsPage.backLinkClick();
await caseRegistrationHomePage.verifyUrl();
await caseRegistrationHomePage.saveAndContinue();
await delay(500);
await caseDetailsPage.verifyUrl();
await caseDetailsPage.verifyPageElements(true);
await caseDetailsPage.errorValidations(true);
await caseDetailsPage.enterUrnPoliceForce("12");
await caseDetailsPage.enterUrnPoliceUnit("21");
await caseDetailsPage.enterUrnUniqueReference("12345");
await caseDetailsPage.enterUrnYearReference("26");
await caseDetailsPage.enterWitnessCareUnit(
"Cambridgeshire Non Operational WCU",
);
await caseDetailsPage.saveAndContinue();
await caseDetailsPage.verifyErrorSummaryClear();

const caseMonitoringPage = new CaseMonitoringPage(page);
await caseMonitoringPage.verifyUrl();
await caseMonitoringPage.verifyBackLink("/case-registration/case-details");
await caseMonitoringPage.backLinkClick();
await caseDetailsPage.verifyUrl();
await caseDetailsPage.saveAndContinue();
await caseMonitoringPage.verifyUrl();
await caseMonitoringPage.verifyPageElements(45);
await caseMonitoringPage.verifyPreChargeCheckboxChecked();
await caseMonitoringPage.selectMonitoringCode("Asset Recovery");
await caseMonitoringPage.saveAndContinue();
await caseMonitoringPage.verifyErrorSummaryClear();

const caseAssigneePage = new CaseAssigneePage(page);
await caseAssigneePage.verifyUrl();
await caseAssigneePage.verifyBackLink(
"/case-registration/case-monitoring-codes",
);
await caseAssigneePage.backLinkClick();
await caseMonitoringPage.verifyUrl();
await caseMonitoringPage.saveAndContinue();
await caseAssigneePage.verifyUrl();
await caseAssigneePage.verifyPageElements();
await caseAssigneePage.errorValidations();
await caseAssigneePage.addProsecutorYes();
await caseAssigneePage.addInvestigatorYes();
await caseAssigneePage.enterProsecutorName("Prosecutor A");
await caseAssigneePage.enterCaseworkerName("Caseworker A");
await caseAssigneePage.addInvestigatorFirstName("Investigator F");
await caseAssigneePage.addInvestigatorLastName("Investigator L");
await caseAssigneePage.addInvestigatorShoulderNumber("12345");
await caseAssigneePage.saveAndContinue();
await expect(page).toHaveURL(
"http://localhost:5173/case-registration/case-summary",
);

const caseRegistrationSummaryPage = new CaseRegistrationSummaryPage(page);
await caseRegistrationSummaryPage.verifyUrl();
await caseRegistrationSummaryPage.verifyBackLink(
"/case-registration/case-assignee",
);
await caseRegistrationSummaryPage.backLinkClick();
await caseAssigneePage.verifyUrl();
await caseAssigneePage.saveAndContinue();
await caseRegistrationSummaryPage.verifyUrl();
await caseRegistrationSummaryPage.verifyPageElements();
await caseRegistrationSummaryPage.verifyCaseDetailsElements(
{
area: "CAMBRIDGESHIRE",
urn: "12211234526",
registeringUnit: "SOUTHERN CJU (Cambridge)",
wcu: "Cambridgeshire Non Operational WCU",
operationName: "thunderstruck",
},
true,
);
await caseRegistrationSummaryPage.verifyComplexityAndMonitoringCodesElements({
complexity: "Basic",
monitoringCodes: ["Asset Recovery", "Pre-Charge Decision"],
});
await caseRegistrationSummaryPage.verifyWorkingOnTheCaseElements({
prosecutor: "Prosecutor A",
caseworker: "Caseworker A",
investigator: "InvestigatorL, InvestigatorF",
shoulderNumber: "12345",
policeUnit: "Not entered",
});

await caseRegistrationSummaryPage.changeOperationNameLinkClick();
await caseRegistrationHomePage.verifyUrl();
await caseRegistrationHomePage.saveAndContinue();
await caseRegistrationSummaryPage.verifyUrl();

await caseRegistrationSummaryPage.changeUrnLinkClick();
await caseDetailsPage.verifyUrl();
await caseDetailsPage.verifyBackLink("/case-registration/case-summary");
await caseDetailsPage.saveAndContinue();
await caseRegistrationSummaryPage.verifyUrl();

await caseRegistrationSummaryPage.changeWcuLinkClick();
await caseDetailsPage.verifyUrl();
await caseDetailsPage.verifyBackLink("/case-registration/case-summary");
await caseDetailsPage.saveAndContinue();
await caseRegistrationSummaryPage.verifyUrl();

await caseRegistrationSummaryPage.changeMonitoringCodesLinkClick();
await caseMonitoringPage.verifyUrl();
await caseMonitoringPage.verifyBackLink("/case-registration/case-summary");
await caseMonitoringPage.saveAndContinue();
await caseRegistrationSummaryPage.verifyUrl();

const caseComplexityPage = new CaseComplexityPage(page);
await caseRegistrationSummaryPage.changeCaseComplexityLinkClick();
await caseComplexityPage.verifyUrl();
await caseComplexityPage.verifyBackLink("/case-registration/case-summary");
await caseComplexityPage.saveAndContinue();
await caseRegistrationSummaryPage.verifyUrl();

await caseRegistrationSummaryPage.changeCaseInvestigatorLinkClick();
await caseAssigneePage.verifyUrl();
await caseAssigneePage.verifyBackLink("/case-registration/case-summary");
await caseAssigneePage.saveAndContinue();
await caseRegistrationSummaryPage.verifyUrl();

await caseRegistrationSummaryPage.changeShoulderNumberLinkClick();
await caseAssigneePage.verifyUrl();
await caseAssigneePage.verifyBackLink("/case-registration/case-summary");
await caseAssigneePage.saveAndContinue();
await caseRegistrationSummaryPage.verifyUrl();

await caseRegistrationSummaryPage.changeProsecutorLinkClick();
await caseAssigneePage.verifyUrl();
await caseAssigneePage.verifyBackLink("/case-registration/case-summary");
await caseAssigneePage.saveAndContinue();
await caseRegistrationSummaryPage.verifyUrl();

await caseRegistrationSummaryPage.changeCaseworkerLinkClick();
await caseAssigneePage.verifyUrl();
await caseAssigneePage.verifyBackLink("/case-registration/case-summary");
await caseAssigneePage.saveAndContinue();
await caseRegistrationSummaryPage.verifyUrl();

await worker.use(
http.get("https://mocked-out-api/api/v1/urns/:urn/exists", async () => {
await delay(2000);
return HttpResponse.json(true);
}),
);
await caseRegistrationSummaryPage.clickCreateCaseButton();
await caseRegistrationSummaryPage.verifyFormSubmittingStatus();
await caseRegistrationSummaryPage.verifyUrl();
await caseRegistrationSummaryPage.errorValidations();
await caseRegistrationSummaryPage.verifyFormNonSubmittingStatus();
await worker.use(
http.get("https://mocked-out-api/api/v1/urns/:urn/exists", async () => {
await delay(100);
return HttpResponse.json(false);
}),
);
await caseRegistrationSummaryPage.clickCreateCaseButton();
await caseRegistrationSummaryPage.verifyErrorSummaryCleared();
const caseRegistrationConfirmationPage = new CaseRegistrationConfirmationPage(
page,
);
await caseRegistrationConfirmationPage.verifyUrl();
await caseRegistrationConfirmationPage.verifyPageElements("12211234526");
});
Loading
Loading