@ministryofjustice/hmpps-probation-integration-e2e-tests 1.181.0 → 1.182.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +1 -1
- package/steps/api/dps/prison-api.mjs +1 -1
- package/steps/delius/offender/find-offender.d.mts +3 -1
- package/steps/delius/offender/find-offender.mjs +15 -1
- package/steps/delius/upw/allocate-current-case-to-upw-project.d.mts +10 -1
- package/steps/delius/upw/allocate-current-case-to-upw-project.mjs +14 -4
- package/steps/delius/upw/create-upw-project.d.mts +10 -1
- package/steps/delius/upw/create-upw-project.mjs +16 -1
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ministryofjustice/hmpps-probation-integration-e2e-tests",
|
|
3
3
|
"description": "Playwright end to end tests for hmpps-probation-integration-services.",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.182.0",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"homepage": "https://github.com/ministryofjustice/hmpps-probation-integration-e2e-tests#readme",
|
|
7
7
|
"bugs": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { Yesterday } from "../../delius/utils/date-time.mjs";
|
|
2
2
|
import { getToken } from "../auth/get-token.mjs";
|
|
3
|
-
import { retry, sanitiseError } from "../utils/api-utils.mjs";
|
|
4
3
|
import { setNomisId } from "../../delius/offender/update-offender.mjs";
|
|
4
|
+
import { retry, sanitiseError } from "../utils/api-utils.mjs";
|
|
5
5
|
import { request } from "@playwright/test";
|
|
6
6
|
import { DateTime } from "luxon";
|
|
7
7
|
import { faker } from "@faker-js/faker";
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Person } from "../utils/person.mjs";
|
|
1
2
|
import { Allocation } from "../../../test-data/test-data.mjs";
|
|
2
3
|
import { Page } from "@playwright/test";
|
|
3
4
|
|
|
@@ -5,6 +6,7 @@ import { Page } from "@playwright/test";
|
|
|
5
6
|
declare function findOffenderByName(page: Page, forename: string, surname: string): Promise<void>;
|
|
6
7
|
declare function findOffenderByCRN(page: Page, crn: string): Promise<void>;
|
|
7
8
|
declare function findOffenderByCRNNoContextCheck(page: Page, crn: string): Promise<void>;
|
|
9
|
+
declare function findFirstOffender(page: Page, person: Person, provider: string): Promise<string>;
|
|
8
10
|
declare function findOffenderByNomisId(page: Page, nomisId: string): Promise<string>;
|
|
9
11
|
declare function verifyAllocation(page: Page, args: {
|
|
10
12
|
allocation: Allocation;
|
|
@@ -13,4 +15,4 @@ declare function verifyAllocation(page: Page, args: {
|
|
|
13
15
|
declare function isInOffenderContext(page: Page, crn: string): Promise<boolean>;
|
|
14
16
|
declare function dismissModals(page: Page): Promise<void>;
|
|
15
17
|
//#endregion
|
|
16
|
-
export { dismissModals, findOffenderByCRN, findOffenderByCRNNoContextCheck, findOffenderByName, findOffenderByNomisId, isInOffenderContext, verifyAllocation };
|
|
18
|
+
export { dismissModals, findFirstOffender, findOffenderByCRN, findOffenderByCRNNoContextCheck, findOffenderByName, findOffenderByNomisId, isInOffenderContext, verifyAllocation };
|
|
@@ -33,6 +33,20 @@ async function findOffenderByCRNNoContextCheck(page, crn) {
|
|
|
33
33
|
await page.locator("tr", { hasText: crn }).locator("a", { hasText: "View" }).click();
|
|
34
34
|
await expect(page).toHaveTitle(/Case Summary/);
|
|
35
35
|
}
|
|
36
|
+
async function findFirstOffender(page, person, provider) {
|
|
37
|
+
await page.locator("#navigation-include\\:linkNavigation1Search", { hasText: "National search" }).click();
|
|
38
|
+
await expect(page).toHaveTitle(/National Search/);
|
|
39
|
+
await page.fill("#firstName\\:inputText", person.firstName);
|
|
40
|
+
await page.fill("#lastName\\:inputText", person.lastName);
|
|
41
|
+
await selectOption(page, "#sex\\:selectOneMenu", person.sex);
|
|
42
|
+
await selectOption(page, "#provider\\:selectOneMenu", provider);
|
|
43
|
+
await page.click("#searchButton");
|
|
44
|
+
const noRecordsMessage = page.locator(".noRecordsFound:has-text(\"No records found\")");
|
|
45
|
+
const offendersTable = page.locator("#offendersTable");
|
|
46
|
+
await expect(noRecordsMessage.or(offendersTable)).toBeVisible({ timeout: 1e4 });
|
|
47
|
+
if (await offendersTable.isVisible()) return await page.locator("#offendersTable tbody tr:first-child td:first-child").textContent();
|
|
48
|
+
else if (await noRecordsMessage.isVisible()) return null;
|
|
49
|
+
}
|
|
36
50
|
async function findOffenderByNomisId(page, nomisId) {
|
|
37
51
|
await page.locator("a", { hasText: "National search" }).click();
|
|
38
52
|
await expect(page).toHaveTitle(/National Search/);
|
|
@@ -68,4 +82,4 @@ async function dismissModals(page) {
|
|
|
68
82
|
} catch (_) {}
|
|
69
83
|
}
|
|
70
84
|
//#endregion
|
|
71
|
-
export { dismissModals, findOffenderByCRN, findOffenderByCRNNoContextCheck, findOffenderByName, findOffenderByNomisId, isInOffenderContext, verifyAllocation };
|
|
85
|
+
export { dismissModals, findFirstOffender, findOffenderByCRN, findOffenderByCRNNoContextCheck, findOffenderByName, findOffenderByNomisId, isInOffenderContext, verifyAllocation };
|
|
@@ -2,6 +2,7 @@ import { Page } from "@playwright/test";
|
|
|
2
2
|
|
|
3
3
|
//#region steps/delius/upw/allocate-current-case-to-upw-project.d.ts
|
|
4
4
|
declare function allocateCurrentCaseToUpwProject(page: Page, {
|
|
5
|
+
crn,
|
|
5
6
|
providerName,
|
|
6
7
|
teamName,
|
|
7
8
|
projectName,
|
|
@@ -11,6 +12,7 @@ declare function allocateCurrentCaseToUpwProject(page: Page, {
|
|
|
11
12
|
projectType,
|
|
12
13
|
pickupPoint
|
|
13
14
|
}: {
|
|
15
|
+
crn: string;
|
|
14
16
|
providerName: string;
|
|
15
17
|
teamName: string;
|
|
16
18
|
projectName?: string;
|
|
@@ -20,5 +22,12 @@ declare function allocateCurrentCaseToUpwProject(page: Page, {
|
|
|
20
22
|
projectType?: string;
|
|
21
23
|
pickupPoint?: string;
|
|
22
24
|
}): Promise<void>;
|
|
25
|
+
declare const setAllocationOutcome: (page: Page, {
|
|
26
|
+
crn,
|
|
27
|
+
contactOutcome
|
|
28
|
+
}: {
|
|
29
|
+
crn: string;
|
|
30
|
+
contactOutcome?: string;
|
|
31
|
+
}) => Promise<void>;
|
|
23
32
|
//#endregion
|
|
24
|
-
export { allocateCurrentCaseToUpwProject };
|
|
33
|
+
export { allocateCurrentCaseToUpwProject, setAllocationOutcome };
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { getCurrentDay } from "../utils/date-time.mjs";
|
|
2
2
|
import { selectOption } from "../utils/inputs.mjs";
|
|
3
|
+
import { findOffenderByCRN } from "../offender/find-offender.mjs";
|
|
3
4
|
import { expect } from "@playwright/test";
|
|
4
5
|
//#region steps/delius/upw/allocate-current-case-to-upw-project.ts
|
|
5
|
-
async function allocateCurrentCaseToUpwProject(page, { providerName, teamName, projectName = null, day = getCurrentDay(), startTime = "10:00", endTime = "16:00", projectType = "Group Placement - National Project", pickupPoint = null }) {
|
|
6
|
-
await
|
|
7
|
-
await page.getByRole("button", { name: "Update" }).click();
|
|
6
|
+
async function allocateCurrentCaseToUpwProject(page, { crn, providerName, teamName, projectName = null, day = getCurrentDay(), startTime = "10:00", endTime = "16:00", projectType = "Group Placement - National Project", pickupPoint = null }) {
|
|
7
|
+
await findOffenderByCRN(page, crn);
|
|
8
8
|
await page.getByRole("link", { name: "Event List" }).click();
|
|
9
9
|
await page.getByRole("link", {
|
|
10
10
|
name: "view",
|
|
@@ -31,5 +31,15 @@ async function allocateCurrentCaseToUpwProject(page, { providerName, teamName, p
|
|
|
31
31
|
await expect(page.locator("#content > h1")).toContainText("View UPW Details");
|
|
32
32
|
console.log("Case allocated to UPW project '%s' on %s", projectName, day);
|
|
33
33
|
}
|
|
34
|
+
const setAllocationOutcome = async (page, { crn, contactOutcome = "Rescheduled - Service Request" }) => {
|
|
35
|
+
await findOffenderByCRN(page, crn);
|
|
36
|
+
await page.getByRole("link", { name: "Event List" }).click();
|
|
37
|
+
await page.locator("#eventsTable tbody tr").first().locator("a[title=\"View event\"]").click();
|
|
38
|
+
await page.getByRole("link", { name: "Unpaid work" }).click();
|
|
39
|
+
await page.getByRole("button", { name: "Worksheet Summary" }).click();
|
|
40
|
+
await page.locator("#appointmentsTable tbody tr").first().locator("a[title=\"Link to update the UPW attendance details.\"]").click();
|
|
41
|
+
await selectOption(page, "#contactOutcome\\:selectOneMenu", contactOutcome);
|
|
42
|
+
await page.getByRole("button", { name: "Save" }).click();
|
|
43
|
+
};
|
|
34
44
|
//#endregion
|
|
35
|
-
export { allocateCurrentCaseToUpwProject };
|
|
45
|
+
export { allocateCurrentCaseToUpwProject, setAllocationOutcome };
|
|
@@ -9,6 +9,15 @@ interface ProjectAvailability {
|
|
|
9
9
|
startTime?: string;
|
|
10
10
|
endTime?: string;
|
|
11
11
|
}
|
|
12
|
+
declare function uwpProjectExists(page: Page, {
|
|
13
|
+
projectName,
|
|
14
|
+
provider,
|
|
15
|
+
team
|
|
16
|
+
}: {
|
|
17
|
+
projectName: string;
|
|
18
|
+
provider: string;
|
|
19
|
+
team: string;
|
|
20
|
+
}): Promise<boolean>;
|
|
12
21
|
declare function createUpwProject(page: Page, {
|
|
13
22
|
providerName,
|
|
14
23
|
teamName,
|
|
@@ -34,4 +43,4 @@ declare function createUpwProject(page: Page, {
|
|
|
34
43
|
}>;
|
|
35
44
|
declare function createNameWithTimeStamp(prefix?: string): string;
|
|
36
45
|
//#endregion
|
|
37
|
-
export { createNameWithTimeStamp, createUpwProject };
|
|
46
|
+
export { createNameWithTimeStamp, createUpwProject, uwpProjectExists };
|
|
@@ -5,6 +5,21 @@ import { expect } from "@playwright/test";
|
|
|
5
5
|
import { DateTime } from "luxon";
|
|
6
6
|
import { faker } from "@faker-js/faker";
|
|
7
7
|
//#region steps/delius/upw/create-upw-project.ts
|
|
8
|
+
async function uwpProjectExists(page, { projectName, provider, team }) {
|
|
9
|
+
await page.getByRole("link", { name: "UPW Projects" }).click();
|
|
10
|
+
await expect(page.locator("#content > h1")).toContainText("UPW Projects List");
|
|
11
|
+
await page.selectOption("#Trust\\:selectOneMenu", provider);
|
|
12
|
+
await page.selectOption("#Team\\:selectOneMenu", team);
|
|
13
|
+
await page.getByRole("link", {
|
|
14
|
+
name: "Search",
|
|
15
|
+
exact: true
|
|
16
|
+
}).click();
|
|
17
|
+
while (true) {
|
|
18
|
+
if (await page.locator("#resultsTable td").filter({ hasText: projectName }).count() > 0) return true;
|
|
19
|
+
if (!await page.locator("a:has-text(\"Next\")").click({ timeout: 1e3 }).catch(() => false)) break;
|
|
20
|
+
}
|
|
21
|
+
return false;
|
|
22
|
+
}
|
|
8
23
|
async function createUpwProject(page, { providerName, teamName, projectType = "Group Placement - National Project", pickupPoint = "Chelmsford", projectName = createNameWithTimeStamp(), projectCode = faker.string.alphanumeric(6), endDate = Tomorrow.toJSDate(), projectAvailability = {} }) {
|
|
9
24
|
await page.getByRole("link", { name: "UPW Projects" }).click();
|
|
10
25
|
await expect(page.locator("#content > h1")).toContainText("UPW Projects List");
|
|
@@ -62,4 +77,4 @@ async function addProjectAvailability(page, projectAvailability) {
|
|
|
62
77
|
};
|
|
63
78
|
}
|
|
64
79
|
//#endregion
|
|
65
|
-
export { createNameWithTimeStamp, createUpwProject };
|
|
80
|
+
export { createNameWithTimeStamp, createUpwProject, uwpProjectExists };
|