From a041ef7a0b688ed87689c299cd8bca451be5d386 Mon Sep 17 00:00:00 2001 From: Daniel Liburd Date: Thu, 30 Jan 2025 16:30:06 +0000 Subject: [PATCH] Introduce e2e for applying as a BIO --- .../pages/apply/applicationOriginPage.ts | 5 ++ e2e-tests/pages/apply/findByCrnPage.ts | 8 +++ e2e-tests/pages/apply/index.ts | 2 + e2e-tests/steps/apply.ts | 19 ++++-- e2e-tests/tests/01_apply_as_pom.spec.ts | 4 +- e2e-tests/tests/02_apply_as_bio.spec.ts | 58 +++++++++++++++++++ 6 files changed, 90 insertions(+), 6 deletions(-) create mode 100644 e2e-tests/pages/apply/findByCrnPage.ts create mode 100644 e2e-tests/tests/02_apply_as_bio.spec.ts diff --git a/e2e-tests/pages/apply/applicationOriginPage.ts b/e2e-tests/pages/apply/applicationOriginPage.ts index 32324717..a577ae52 100644 --- a/e2e-tests/pages/apply/applicationOriginPage.ts +++ b/e2e-tests/pages/apply/applicationOriginPage.ts @@ -5,4 +5,9 @@ export class ApplicationOriginPage extends BasePage { await this.checkRadio('Prison bail') await this.clickButton('Confirm') } + + async chooseCourtBail() { + await this.checkRadio('Court bail') + await this.clickButton('Confirm') + } } diff --git a/e2e-tests/pages/apply/findByCrnPage.ts b/e2e-tests/pages/apply/findByCrnPage.ts new file mode 100644 index 00000000..a3ecedf7 --- /dev/null +++ b/e2e-tests/pages/apply/findByCrnPage.ts @@ -0,0 +1,8 @@ +import { BasePage } from '../basePage' + +export class FindByCrnPage extends BasePage { + async enterCrn(crn: string) { + await this.page.getByLabel("Enter the person's CRN").fill(crn) + } +} + diff --git a/e2e-tests/pages/apply/index.ts b/e2e-tests/pages/apply/index.ts index eb2dfc08..694bd771 100644 --- a/e2e-tests/pages/apply/index.ts +++ b/e2e-tests/pages/apply/index.ts @@ -1,4 +1,5 @@ import { FindByPrisonNumberPage } from './findByPrisonNumberPage' +import { FindByCrnPage } from './findByCrnPage' import { TaskListPage } from './taskListPage' import { ApplyPage } from './applyPage' import { DashboardPage } from './dashboardPage' @@ -8,6 +9,7 @@ import { ApplicationOriginPage } from './applicationOriginPage' export { FindByPrisonNumberPage, + FindByCrnPage, TaskListPage, ApplyPage, DashboardPage, diff --git a/e2e-tests/steps/apply.ts b/e2e-tests/steps/apply.ts index 9c27ba80..65924b79 100644 --- a/e2e-tests/steps/apply.ts +++ b/e2e-tests/steps/apply.ts @@ -5,6 +5,7 @@ import { BeforeYouStartPage, DashboardPage, FindByPrisonNumberPage, + FindByCrnPage, TaskListPage, ApplicationOriginPage, } from '../pages/apply' @@ -48,9 +49,13 @@ export const startAnApplication = async (page: Page) => { await beforeYouStartPage.startNow() } -export const selectApplicationOrigin = async (page: Page) => { +export const selectApplicationOrigin = async (page: Page, applicationOrigin: 'courtBail' | 'prisonBail') => { const applicationOriginPage = new ApplicationOriginPage(page) - await applicationOriginPage.choosePrisonBail() + if (applicationOrigin === 'prisonBail') { + await applicationOriginPage.choosePrisonBail() + } else { + await applicationOriginPage.chooseCourtBail() + } } export const enterPrisonerNumber = async (page: Page, prisonNumber: string) => { @@ -59,6 +64,12 @@ export const enterPrisonerNumber = async (page: Page, prisonNumber: string) => { await prisonNumberPage.clickButton('Search for applicant') } +export const enterCrn = async (page: Page, crn: string) => { + const crnPage = new FindByCrnPage(page) + await crnPage.enterCrn(crn) + await crnPage.clickButton('Search for applicant') +} + export const confirmApplicant = async (page: Page) => { const confirmApplicantPage = new TaskListPage(page) await confirmApplicantPage.clickButton('Confirm and continue') @@ -141,9 +152,9 @@ export const viewApplicationMadeByAnotherUser = async (page: Page, name: string) await expect(page.locator('h2').first()).toContainText('Application history') } -export const createAnInProgressApplication = async (page: Page, person: TestOptions['person']) => { +export const createAnInProgressApplication = async (page: Page, person: TestOptions['person'], applicationOrigin: 'courtBail' | 'prisonBail') => { await startAnApplication(page) - await selectApplicationOrigin(page) + await selectApplicationOrigin(page, applicationOrigin) await enterPrisonerNumber(page, person.nomsNumber) await confirmApplicant(page) } diff --git a/e2e-tests/tests/01_apply_as_pom.spec.ts b/e2e-tests/tests/01_apply_as_pom.spec.ts index 3e412e04..745aa39e 100644 --- a/e2e-tests/tests/01_apply_as_pom.spec.ts +++ b/e2e-tests/tests/01_apply_as_pom.spec.ts @@ -24,7 +24,7 @@ import { cancelAnApplication, clickCancel } from '../steps/cancelInProgressAppli test('create a CAS-2 bail application', async ({ page, person, pomUser }) => { await signIn(page, pomUser) await startAnApplication(page) - await selectApplicationOrigin(page) + await selectApplicationOrigin(page, 'prisonBail') await enterPrisonerNumber(page, person.nomsNumber) await confirmApplicant(page) await completeBeforeYouStartSection(page, person.name) @@ -47,7 +47,7 @@ test('add a note to a submitted application', async ({ page, person, pomUser }) test('cancel an in progress application from the task list', async ({ page, pomUser, person }) => { await signIn(page, pomUser) - await createAnInProgressApplication(page, person) + await createAnInProgressApplication(page, person, 'prisonBail') await viewInProgressDashboard(page) const numberOfApplicationsBeforeCancellation = (await page.locator('tr').all()).length await clickCancel(page, person.name) diff --git a/e2e-tests/tests/02_apply_as_bio.spec.ts b/e2e-tests/tests/02_apply_as_bio.spec.ts new file mode 100644 index 00000000..3ce1b702 --- /dev/null +++ b/e2e-tests/tests/02_apply_as_bio.spec.ts @@ -0,0 +1,58 @@ +import { expect } from '@playwright/test' +import { test } from '../test' +import { + completeAboutThePersonSection, + completeAreaAndFundingSection, + completeBeforeYouStartSection, + completeCheckAnswersSection, + completeOffenceInformationSection, + completeRisksAndNeedsSection, + completeBailInformationSection, + confirmApplicant, + enterCrn, + selectApplicationOrigin, + startAnApplication, + submitApplication, + viewSubmittedApplication, + addNote, + viewInProgressDashboard, + createAnInProgressApplication, +} from '../steps/apply' +import { signIn } from '../steps/signIn' +import { cancelAnApplication, clickCancel } from '../steps/cancelInProgressApplication' + +test('create a CAS-2 bail application', async ({ page, person, bioUser }) => { + await signIn(page, bioUser) + await startAnApplication(page) + await selectApplicationOrigin(page, 'courtBail') + await enterCrn(page, person.crn) + await confirmApplicant(page) + await completeBeforeYouStartSection(page, person.name) + await completeAreaAndFundingSection(page, person.name) + await completeAboutThePersonSection(page, person.name) + await completeRisksAndNeedsSection(page, person.name) + await completeOffenceInformationSection(page, person.name) + await completeBailInformationSection(page, person.name) + await completeCheckAnswersSection(page, person.name) + await expect(page.getByText('You have completed 18 of 18 tasks')).toBeVisible() + await submitApplication(page) +}) + +test('add a note to a submitted application', async ({ page, person, bioUser }) => { + await signIn(page, bioUser) + await viewSubmittedApplication(page, person.name) + await addNote(page) + await expect(page.locator('.moj-timeline__title').first()).toContainText('Note') +}) + +test('cancel an in progress application from the task list', async ({ page, bioUser, person }) => { + await signIn(page, bioUser) + await createAnInProgressApplication(page, person, 'courtBail') + await viewInProgressDashboard(page) + const numberOfApplicationsBeforeCancellation = (await page.locator('tr').all()).length + await clickCancel(page, person.name) + await cancelAnApplication(page, person.name) + const numberOfApplicationsAfterCancellation = (await page.locator('tr').all()).length + await expect(page.getByText('Your CAS-2 applications')).toBeVisible() + expect(numberOfApplicationsBeforeCancellation - numberOfApplicationsAfterCancellation).toEqual(1) +})