From 676128216a2ada652504cf3a032181940d6647e9 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Fri, 20 Mar 2026 14:25:02 +0000 Subject: [PATCH 01/20] TestAutomation-HDPI-3495 --- src/test/ui/config/axe-exclusions.config.ts | 1 + .../ui/data/api-data/submitCase.api.data.ts | 10 ++ src/test/ui/data/page-data/index.ts | 2 +- .../data/page-data/rentArrears.page.data.ts | 24 ++++ .../page-data/rentArrearsDispute.page.data.ts | 4 - src/test/ui/e2eTest/respondToAClaim.spec.ts | 108 +++--------------- .../custom-actions/respondToClaim.action.ts | 36 ++++++ src/test/ui/utils/registry/action.registry.ts | 1 + 8 files changed, 86 insertions(+), 100 deletions(-) create mode 100644 src/test/ui/data/page-data/rentArrears.page.data.ts delete mode 100644 src/test/ui/data/page-data/rentArrearsDispute.page.data.ts diff --git a/src/test/ui/config/axe-exclusions.config.ts b/src/test/ui/config/axe-exclusions.config.ts index f08ce926d..f7907b8ff 100644 --- a/src/test/ui/config/axe-exclusions.config.ts +++ b/src/test/ui/config/axe-exclusions.config.ts @@ -5,4 +5,5 @@ export const axe_exclusions = [ '#nameConfirmation-2', //page: DefendantNameConfirmation, element: 'No', element_type: radioOption, reason_for_exclusion: 'aria-expanded' attribute is expected for this radio button '#confirmTenancyDate-2', //page: tenancyStartDateKnown, element: 'No', element_type: radioOption, reason_for_exclusion: 'aria-expanded' attribute is expected for this radio button '#contactByEmailOrPost', //page: contactPreferenceEmailOrPost, element: 'Yes', element_type: radioOption, reason_for_exclusion: 'aria-expanded' attribute is expected for this radio button + '#rentArrears-2', //page: rentArrears, element: 'Yes', element_type: radioOption, reason_for_exclusion: 'aria-expanded' attribute is expected for this radio button ]; diff --git a/src/test/ui/data/api-data/submitCase.api.data.ts b/src/test/ui/data/api-data/submitCase.api.data.ts index f64f05eb3..651bd668d 100644 --- a/src/test/ui/data/api-data/submitCase.api.data.ts +++ b/src/test/ui/data/api-data/submitCase.api.data.ts @@ -94,6 +94,16 @@ export const submitCaseApiData = { settlementAttempted: 'NO', noticeServed: process.env.NOTICE_SERVED, notice_NoticePostedDate: '2025-11-10', + rentDetails_CurrentRent: '100000', + rentDetails_Frequency: 'MONTHLY', + rentDetails_CalculatedDailyCharge: '3285', + rentSectionPaymentFrequency: 'MONTHLY', + rentDetails_FormattedCalculatedDailyCharge: '£32.85', + rentDetails_PerDayCorrect: 'YES', + showRentArrearsPage: 'Yes', + rentArrears_Total: '200000', + rentArrears_ThirdPartyPayments: 'NO', + arrearsJudgmentWanted: 'NO', notice_NoticeDocuments: [], notice_NoticeServiceMethod: 'FIRST_CLASS_POST', claimantNamePossessiveForm: null, diff --git a/src/test/ui/data/page-data/index.ts b/src/test/ui/data/page-data/index.ts index e3e63ff52..1edddf4cb 100644 --- a/src/test/ui/data/page-data/index.ts +++ b/src/test/ui/data/page-data/index.ts @@ -14,7 +14,7 @@ export * from './confirmationOfNoticeGiven.page.data'; export * from './noticeDateWhenProvided.page.data'; export * from './noticeDateWhenNotProvided.page.data'; export * from './contactPreferenceEmailOrPost.page.data'; -export * from './rentArrearsDispute.page.data'; +export * from './rentArrears.page.data'; export * from './nonRentArrearsDispute.page.data'; export * from './counterClaim.page.data'; export * from './repaymentsMade.page.data'; diff --git a/src/test/ui/data/page-data/rentArrears.page.data.ts b/src/test/ui/data/page-data/rentArrears.page.data.ts new file mode 100644 index 000000000..3e92fa2f4 --- /dev/null +++ b/src/test/ui/data/page-data/rentArrears.page.data.ts @@ -0,0 +1,24 @@ +export const rentArrears = { + mainHeader: `Rent arrears`, + saveAndContinueButton: `Save and continue`, + rentAmountTextInput: `1000.00`, + incorrectFormatTextInput: `1000`, + negativeTextInput: `-100.00`, + billionTextInput: `1000001.00`, + doYouOweThisQuestion: `Do you owe this amount in rent arrears?`, + howMuchDoYouBelieveHiddenTextLabel: `How much do you believe you owe in rent arrears?`, + rentArrearsAreMoneyHintText: `Rent arrears are money you owe in rent payments.`, + theRentStatementParagraph: `The rent statement will have been included in the pack you received in the post letting you know a claim had been made against you, and is also available to view from ‘View the claim’ on your case overview.`, + yesRadioOption: `Yes`, + noRadioOption: `No`, + imNotSureRadioOption: `I’m not sure`, + saveForLaterButton: `Save for later`, + backLink: `Back`, + thereIsAProblemErrorMessageHeader: `There is a problem`, + errorValidationHeader: `There is a problem`, + enterHowMuchYouBelieveErrorMessage: `Enter the amount you believe you owe in rent arrears`, + theAmountYouBelieveErrorMessage: `The amount you believe you owe in rent arrears must be £0.00 or above`, + lessThanBillionErrorMessage: `The amount you believe you owe in rent arrears must be less than £1 billion`, + doYouOweThisAmountErrorMessage: `Do you owe this amount in rent arrears?`, + enterAmountInCorrectFormat: `Enter an amount in the correct format, for example 148.00 or 148.50`, +}; diff --git a/src/test/ui/data/page-data/rentArrearsDispute.page.data.ts b/src/test/ui/data/page-data/rentArrearsDispute.page.data.ts deleted file mode 100644 index 1ce132dcf..000000000 --- a/src/test/ui/data/page-data/rentArrearsDispute.page.data.ts +++ /dev/null @@ -1,4 +0,0 @@ -export const rentArrearsDispute = { - mainHeader: `Rent Arrears Dispute(Placeholder)`, - continueButton: `Continue`, -}; diff --git a/src/test/ui/e2eTest/respondToAClaim.spec.ts b/src/test/ui/e2eTest/respondToAClaim.spec.ts index 3e06c847f..575abcd71 100644 --- a/src/test/ui/e2eTest/respondToAClaim.spec.ts +++ b/src/test/ui/e2eTest/respondToAClaim.spec.ts @@ -14,7 +14,7 @@ import { defendantNameConfirmation, freeLegalAdvice, nonRentArrearsDispute, - rentArrearsDispute, + rentArrears, repaymentsAgreed, repaymentsMade, startNow, @@ -238,51 +238,6 @@ test.describe('Respond to a claim - e2e Journey @nightly', async () => { await performValidation('mainHeader', repaymentsAgreed.mainHeader); }); - test('Non-RentArrears - NoticeServed - Yes NoticeDetails - No - NonRentArrearsDispute @noDefendants @regression', async () => { - await performAction('selectLegalAdvice', freeLegalAdvice.yesRadioOption); - await performAction('inputDefendantDetails', { - fName: defendantNameCapture.firstNameTextInput, - lName: defendantNameCapture.lastNameTextInput, - }); - await performAction('enterDateOfBirthDetails'); - await performAction('selectCorrespondenceAddressUnKnown', { - addressLine1: correspondenceAddress.walesAddressLine1TextInput, - townOrCity: correspondenceAddress.walesTownOrCityTextInput, - postcode: correspondenceAddress.walesPostcodeTextInput, - }); - await performAction('selectContactPreferenceEmailOrPost', { - question: contactPreferenceEmailOrPost.howDoYouWantTOReceiveUpdatesQuestion, - radioOption: contactPreferenceEmailOrPost.byPostRadioOption, - }); - await performAction('selectContactByTelephone', { - radioOption: contactPreferencesTelephone.noRadioOption, - }); - await performAction( - 'disputeClaimInterstitial', - submitCaseApiData.submitCasePayloadNoDefendants.isClaimantNameCorrect - ); - await performValidation('mainHeader', tenancyDetails.mainHeader); - await performAction('clickButton', tenancyDetails.saveAndContinueButton); - await performAction('enterTenancyStartDetailsUnKnown', { - tsDay: '15', - tsMonth: '11', - tsYear: '2024', - }); - await performAction('selectNoticeDetails', { - option: confirmationOfNoticeGiven.noRadioOption, - }); - await performValidation('mainHeader', nonRentArrearsDispute.mainHeader); - await performAction('clickButton', nonRentArrearsDispute.continueButton); - // placeholder page, so need to be replaced with custom action when actual page is implemented - await performValidation('mainHeader', counterClaim.mainHeader); - await performAction('clickButton', counterClaim.saveAndContinueButton); - await performAction('readPaymentInterstitial'); - await performAction('repaymentsMade', { - repaymentOption: repaymentsMade.noRadioOption, - }); - await performValidation('mainHeader', repaymentsAgreed.mainHeader); - }); - test('England - NonRentArrears - NoticeServed - No NoticeDateProvided - No - NonRentArrearsDispute @noDefendants @regression', async () => { await performAction('selectLegalAdvice', freeLegalAdvice.yesRadioOption); await performAction('inputDefendantDetails', { @@ -351,8 +306,9 @@ test.describe('Respond to a claim - e2e Journey @nightly', async () => { option: confirmationOfNoticeGiven.yesRadioOption, }); await performAction('enterNoticeDateUnknown'); - await performValidation('mainHeader', rentArrearsDispute.mainHeader); - await performAction('clickButton', rentArrearsDispute.continueButton); + await performAction('rentArrears', { + option: rentArrears.yesRadioOption, + }); // placeholder page, so need to be replaced with custom action when actual page is implemented await performValidation('mainHeader', counterClaim.mainHeader); await performAction('clickButton', counterClaim.saveAndContinueButton); @@ -398,8 +354,10 @@ test.describe('Respond to a claim - e2e Journey @nightly', async () => { month: '2', year: '2020', }); - await performValidation('mainHeader', rentArrearsDispute.mainHeader); - await performAction('clickButton', rentArrearsDispute.continueButton); + await performAction('rentArrears', { + option: rentArrears.noRadioOption, + rentAmount: rentArrears.rentAmountTextInput, + }); }); test('RentArrears - NoticeServed - Yes NoticeDateProvided - No - NoticeDetails - No - RentArrearsDispute @regression', async () => { @@ -435,50 +393,9 @@ test.describe('Respond to a claim - e2e Journey @nightly', async () => { await performAction('selectNoticeDetails', { option: confirmationOfNoticeGiven.noRadioOption, }); - await performValidation('mainHeader', rentArrearsDispute.mainHeader); - await performAction('clickButton', rentArrearsDispute.continueButton); - // placeholder page, so need to be replaced with custom action when actual page is implemented - await performValidation('mainHeader', counterClaim.mainHeader); - await performAction('clickButton', counterClaim.saveAndContinueButton); - await performAction('readPaymentInterstitial'); - await performAction('repaymentsMade', { - repaymentOption: repaymentsMade.noRadioOption, - }); - await performValidation('mainHeader', repaymentsAgreed.mainHeader); - }); - - test('RentArrears - NoticeServed - Yes NoticeDateProvided - No - NoticeDetails - Im not sure - RentArrearsDispute @regression', async () => { - await performAction('selectLegalAdvice', freeLegalAdvice.yesRadioOption); - await performAction('confirmDefendantDetails', { - question: defendantNameConfirmation.mainHeader, - option: defendantNameConfirmation.yesRadioOption, - }); - await performAction('enterDateOfBirthDetails', { - dobDay: dateOfBirth.dayInputText, - dobMonth: dateOfBirth.monthInputText, - dobYear: dateOfBirth.yearInputText, - }); - await performAction('selectCorrespondenceAddressKnown', { - radioOption: correspondenceAddress.yesRadioOption, + await performAction('rentArrears', { + option: rentArrears.yesRadioOption, }); - await performAction('selectContactPreferenceEmailOrPost', { - question: contactPreferenceEmailOrPost.howDoYouWantTOReceiveUpdatesQuestion, - radioOption: contactPreferenceEmailOrPost.byPostRadioOption, - }); - await performAction('selectContactByTelephone', { - radioOption: contactPreferencesTelephone.noRadioOption, - }); - await performAction('disputeClaimInterstitial', submitCaseApiData.submitCasePayload.isClaimantNameCorrect); - await performValidation('mainHeader', tenancyDetails.mainHeader); - await performAction('clickButton', tenancyDetails.saveAndContinueButton); - await performAction('selectTenancyStartDateKnown', { - option: tenancyDateDetails.iAmNotSureRadioOption, - }); - await performAction('selectNoticeDetails', { - option: confirmationOfNoticeGiven.imNotSureRadioOption, - }); - await performValidation('mainHeader', rentArrearsDispute.mainHeader); - await performAction('clickButton', rentArrearsDispute.continueButton); // placeholder page, so need to be replaced with custom action when actual page is implemented await performValidation('mainHeader', counterClaim.mainHeader); await performAction('clickButton', counterClaim.saveAndContinueButton); @@ -519,8 +436,9 @@ test.describe('Respond to a claim - e2e Journey @nightly', async () => { month: '12', year: '2025', }); - await performValidation('mainHeader', rentArrearsDispute.mainHeader); - await performAction('clickButton', rentArrearsDispute.continueButton); + await performAction('rentArrears', { + option: rentArrears.yesRadioOption, + }); // placeholder page, so need to be replaced with custom action when actual page is implemented await performValidation('mainHeader', counterClaim.mainHeader); await performAction('clickButton', counterClaim.saveAndContinueButton); diff --git a/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts b/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts index 6db756a2c..4e3be1935 100644 --- a/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts +++ b/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts @@ -16,6 +16,7 @@ import { noticeDateWhenNotProvided, noticeDateWhenProvided, paymentInterstitial, + rentArrears, repaymentsMade, tenancyDateDetails, tenancyDateUnknown, @@ -45,6 +46,7 @@ export class RespondToClaimAction implements IAction { ['disputeClaimInterstitial', () => this.disputeClaimInterstitial(fieldName as actionData)], ['selectLandlordRegistered', () => this.selectLandlordRegistered(fieldName as actionData)], ['enterTenancyStartDetailsUnKnown', () => this.enterTenancyStartDetailsUnKnown(fieldName as actionRecord)], + ['rentArrears', () => this.rentArrears(fieldName as actionRecord)], ]); const actionToPerform = actionsMap.get(action); if (!actionToPerform) { @@ -262,6 +264,40 @@ export class RespondToClaimAction implements IAction { await performAction('clickButton', tenancyDateUnknown.saveAndContinueButton); } + private async rentArrears(rentArrearsInfo: actionRecord): Promise { + // let rentArrears_Total: string | null = null; + // let claimantName: string | null = null; + // if (rentArrearsInfo.tenancy === 'flexible') { + // rentArrears_Total = `${submitCaseApiData.submitCasePayloadFlexibleTenancyDate.rentArrears_Total}`; + // claimantName = `${submitCaseApiData.submitCasePayloadFlexibleTenancyDate.claimantName}`; + // } + // if (rentArrearsInfo.tenancy === 'introductory') { + // rentArrears_Total = `${submitCaseApiData.submitCasePayloadIntroductoryTenancy.rentArrears_Total}`; + // claimantName = `${submitCaseApiData.submitCasePayloadIntroductoryTenancy.claimantName}`; + // } + + await performValidation('text', { + elementType: 'subHeader', + text: `Amount you owe in rent arrears given by ${submitCaseApiData.submitCasePayload.claimantName}:`, + }); + await performValidation('text', { + elementType: 'paragraph', + text: `When making their claim, ${submitCaseApiData.submitCasePayload.claimantName} had to provide a copy of the rent statement for your property, showing the total rent arrears you owe.`, + }); + await performValidation('text', { + elementType: 'paragraph', + text: `£${submitCaseApiData.submitCasePayload.rentArrears_Total}`, + }); + await performAction('clickRadioButton', { + question: rentArrears.doYouOweThisQuestion, + option: rentArrearsInfo.option, + }); + if (rentArrearsInfo.option === rentArrears.noRadioOption) { + await performAction('inputText', rentArrears.howMuchDoYouBelieveHiddenTextLabel, rentArrearsInfo.rentAmount); + } + await performAction('clickButton', rentArrears.saveAndContinueButton); + } + // Below changes are temporary will be changed as part of HDPI-3596 private async inputErrorValidation(validationArr: actionRecord) { if (!validationArr || validationArr.validationReq !== 'YES') { diff --git a/src/test/ui/utils/registry/action.registry.ts b/src/test/ui/utils/registry/action.registry.ts index 2acd7e3c3..54a95a6a5 100644 --- a/src/test/ui/utils/registry/action.registry.ts +++ b/src/test/ui/utils/registry/action.registry.ts @@ -60,6 +60,7 @@ export class ActionRegistry { ['triggerFunctionalTests', new TriggerPageFunctionalTestsAction()], ['selectTenancyStartDateKnown', new RespondToClaimAction()], ['selectContactPreferenceEmailOrPost', new RespondToClaimAction()], + ['rentArrears', new RespondToClaimAction()], ]); static getAction(actionName: string): IAction { From 9b2c355447f6b5098b21f0ecb1928bac9312f579 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Fri, 20 Mar 2026 17:10:09 +0000 Subject: [PATCH 02/20] TestAutomation-HDPI-3495 --- src/test/ui/config/urlToFileMapping.config.ts | 2 +- .../data/page-data/rentArrears.page.data.ts | 3 +- src/test/ui/e2eTest/respondToAClaim.spec.ts | 2 +- src/test/ui/functional/rentArrears.pft.ts | 52 +++++++++++++++++++ .../custom-actions/respondToClaim.action.ts | 4 +- src/test/ui/utils/common/string.utils.ts | 4 ++ 6 files changed, 63 insertions(+), 4 deletions(-) create mode 100644 src/test/ui/functional/rentArrears.pft.ts diff --git a/src/test/ui/config/urlToFileMapping.config.ts b/src/test/ui/config/urlToFileMapping.config.ts index 13a9ccf54..a9db81e7d 100644 --- a/src/test/ui/config/urlToFileMapping.config.ts +++ b/src/test/ui/config/urlToFileMapping.config.ts @@ -13,7 +13,7 @@ export default { 'confirmation-of-notice-given': 'confirmationOfNoticeGiven', 'non-rent-arrears-dispute': 'nonRentArrearsDispute', 'confirmation-of-notice-date-when-provided': 'noticeDateWhenProvided', - 'rent-arrears-dispute': 'rentArrearsDispute', + 'rent-arrears-dispute': 'rentArrears', 'payment-interstitial': 'paymentInterstitial', 'repayments-made': 'repaymentsMade', 'landlord-registered': 'landlordRegistered', diff --git a/src/test/ui/data/page-data/rentArrears.page.data.ts b/src/test/ui/data/page-data/rentArrears.page.data.ts index 3e92fa2f4..f560b2844 100644 --- a/src/test/ui/data/page-data/rentArrears.page.data.ts +++ b/src/test/ui/data/page-data/rentArrears.page.data.ts @@ -17,8 +17,9 @@ export const rentArrears = { thereIsAProblemErrorMessageHeader: `There is a problem`, errorValidationHeader: `There is a problem`, enterHowMuchYouBelieveErrorMessage: `Enter the amount you believe you owe in rent arrears`, + selectIfYouOweErrorMessage: `Select if you owe this amount in rent arrears`, theAmountYouBelieveErrorMessage: `The amount you believe you owe in rent arrears must be £0.00 or above`, lessThanBillionErrorMessage: `The amount you believe you owe in rent arrears must be less than £1 billion`, doYouOweThisAmountErrorMessage: `Do you owe this amount in rent arrears?`, - enterAmountInCorrectFormat: `Enter an amount in the correct format, for example 148.00 or 148.50`, + enterAmountInCorrectFormat: `Enter how much you believe you owe in rent arrears, in the correct format (e.g. if you owe £148, please write £148.00)`, }; diff --git a/src/test/ui/e2eTest/respondToAClaim.spec.ts b/src/test/ui/e2eTest/respondToAClaim.spec.ts index 575abcd71..5f8901e33 100644 --- a/src/test/ui/e2eTest/respondToAClaim.spec.ts +++ b/src/test/ui/e2eTest/respondToAClaim.spec.ts @@ -394,7 +394,7 @@ test.describe('Respond to a claim - e2e Journey @nightly', async () => { option: confirmationOfNoticeGiven.noRadioOption, }); await performAction('rentArrears', { - option: rentArrears.yesRadioOption, + option: rentArrears.imNotSureRadioOption, }); // placeholder page, so need to be replaced with custom action when actual page is implemented await performValidation('mainHeader', counterClaim.mainHeader); diff --git a/src/test/ui/functional/rentArrears.pft.ts b/src/test/ui/functional/rentArrears.pft.ts new file mode 100644 index 000000000..0d019fc5c --- /dev/null +++ b/src/test/ui/functional/rentArrears.pft.ts @@ -0,0 +1,52 @@ +import { dashboard, rentArrears } from '../data/page-data'; +import { performAction, performValidation } from '../utils/controller'; + +export async function rentArrearsErrorValidation(): Promise { + // mandatory radio button selection + await performAction('clickButton', rentArrears.saveAndContinueButton); + await performValidation('errorMessage', { + header: rentArrears.thereIsAProblemErrorMessageHeader, + message: rentArrears.selectIfYouOweErrorMessage, + }); + await performAction('clickRadioButton', rentArrears.noRadioOption); + //mandatory input field validation for 'No' radio button selection + await performAction('clickButton', rentArrears.saveAndContinueButton); + await performValidation('errorMessage', { + header: rentArrears.thereIsAProblemErrorMessageHeader, + message: rentArrears.enterHowMuchYouBelieveErrorMessage, + }); + //amount exceeding max allowed value + await performAction('inputText', rentArrears.howMuchDoYouBelieveHiddenTextLabel, rentArrears.billionTextInput); + await performAction('clickButton', rentArrears.saveAndContinueButton); + await performValidation('errorMessage', { + header: rentArrears.thereIsAProblemErrorMessageHeader, + message: rentArrears.lessThanBillionErrorMessage, + }); + //negative value entered + await performAction('inputText', rentArrears.howMuchDoYouBelieveHiddenTextLabel, rentArrears.negativeTextInput); + await performAction('clickButton', rentArrears.saveAndContinueButton); + await performValidation('errorMessage', { + header: rentArrears.thereIsAProblemErrorMessageHeader, + message: rentArrears.theAmountYouBelieveErrorMessage, + }); + //incorrect format + await performAction( + 'inputText', + rentArrears.howMuchDoYouBelieveHiddenTextLabel, + rentArrears.incorrectFormatTextInput + ); + await performAction('clickButton', rentArrears.saveAndContinueButton); + await performValidation('errorMessage', { + header: rentArrears.thereIsAProblemErrorMessageHeader, + message: rentArrears.enterAmountInCorrectFormat, + }); +} + +export async function rentArrearsNavigationTests(): Promise { + // await performValidation( + // 'pageNavigation', + // rentArrears.backLink, + // disputeClaimInterstitial.getMainHeader(claimantsName) + // ); + await performValidation('pageNavigation', rentArrears.saveForLaterButton, dashboard.mainHeader); +} diff --git a/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts b/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts index 4e3be1935..af7b7ae51 100644 --- a/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts +++ b/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts @@ -21,6 +21,7 @@ import { tenancyDateDetails, tenancyDateUnknown, } from '../../../data/page-data'; +import { formatCurrency } from '../../common/string.utils'; import { performAction, performActions, performValidation } from '../../controller'; import { IAction, actionData, actionRecord } from '../../interfaces'; export let claimantsName: string; @@ -284,9 +285,10 @@ export class RespondToClaimAction implements IAction { elementType: 'paragraph', text: `When making their claim, ${submitCaseApiData.submitCasePayload.claimantName} had to provide a copy of the rent statement for your property, showing the total rent arrears you owe.`, }); + const rentArrearsAmount = formatCurrency(`${submitCaseApiData.submitCasePayload.rentArrears_Total}`); await performValidation('text', { elementType: 'paragraph', - text: `£${submitCaseApiData.submitCasePayload.rentArrears_Total}`, + text: `${rentArrearsAmount}`, }); await performAction('clickRadioButton', { question: rentArrears.doYouOweThisQuestion, diff --git a/src/test/ui/utils/common/string.utils.ts b/src/test/ui/utils/common/string.utils.ts index 5ffabd676..6aed89160 100644 --- a/src/test/ui/utils/common/string.utils.ts +++ b/src/test/ui/utils/common/string.utils.ts @@ -5,3 +5,7 @@ export function escapeForRegex(text: string): string { export function exactTextWithOptionalWhitespaceRegex(text: string): RegExp { return new RegExp(`^\\s*${escapeForRegex(text)}\\s*$`); } + +export function formatCurrency(value: number | string): string { + return `£${(Number(value) / 100).toFixed(2)}`; +} From c7125e751a32fe25acfcc909f57fe85fd8b24e99 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Fri, 20 Mar 2026 17:41:08 +0000 Subject: [PATCH 03/20] Added rent and non rent arrears test --- .../ui/data/api-data/submitCase.api.data.ts | 129 ++++++++++++++++++ src/test/ui/e2eTest/respondToAClaim.spec.ts | 8 +- 2 files changed, 136 insertions(+), 1 deletion(-) diff --git a/src/test/ui/data/api-data/submitCase.api.data.ts b/src/test/ui/data/api-data/submitCase.api.data.ts index 651bd668d..538669bbd 100644 --- a/src/test/ui/data/api-data/submitCase.api.data.ts +++ b/src/test/ui/data/api-data/submitCase.api.data.ts @@ -206,5 +206,134 @@ export const submitCaseApiData = { }, }; }, + get submitCasePayloadRentNonRent() { + return { + legislativeCountry: 'England', + claimantType: { + value: { + code: 'PROVIDER_OF_SOCIAL_HOUSING', + label: 'Registered provider of social housing', + }, + list_items: [ + { + code: 'PRIVATE_LANDLORD', + label: 'Private landlord', + }, + { + code: 'PROVIDER_OF_SOCIAL_HOUSING', + label: 'Registered provider of social housing', + }, + { + code: 'MORTGAGE_LENDER', + label: 'Mortgage lender', + }, + { + code: 'OTHER', + label: 'Other', + }, + ], + valueCode: 'PROVIDER_OF_SOCIAL_HOUSING', + }, + claimAgainstTrespassers: 'NO', + orgNameFound: 'Yes', + claimantName: 'Possession Claims Solicitor Org', + isClaimantNameCorrect: 'YES', + claimantContactEmail: 'pcs-solicitor-automation@test.com', + isCorrectClaimantContactEmail: 'YES', + orgAddressFound: 'Yes', + organisationAddress: { + AddressLine1: 'Ministry Of Justice', + AddressLine2: 'Seventh Floor 102 Petty France', + PostTown: 'London', + PostCode: 'SW1H 9AJ', + Country: 'United Kingdom', + }, + formattedClaimantContactAddress: 'Ministry Of Justice
Seventh Floor 102 Petty France
London
SW1H 9AJ', + isCorrectClaimantContactAddress: 'YES', + claimantProvidePhoneNumber: 'NO', + defendant1: { + nameKnown: 'YES', + firstName: 'Test', + lastName: 'John', + addressKnown: 'YES', + addressSameAsPossession: 'NO', + correspondenceAddress: { + AddressLine1: '10 Second Avenue', + AddressLine2: '', + AddressLine3: '', + PostTown: 'London', + County: '', + Country: '', + PostCode: 'W3 7RX', + }, + }, + addAnotherDefendant: 'YES', + additionalDefendants: [ + { + value: { + nameKnown: 'YES', + firstName: 'Jeremiah', + lastName: 'Fisher', + addressKnown: 'YES', + addressSameAsPossession: 'YES', + }, + id: null, + }, + { + value: { + nameKnown: 'YES', + firstName: 'Conrad', + lastName: 'Fisher', + addressKnown: 'YES', + addressSameAsPossession: 'YES', + }, + id: null, + }, + ], + tenancy_TypeOfTenancyLicence: 'INTRODUCTORY_TENANCY', + tenancy_TenancyLicenceDate: '2026-02-10', + preActionProtocolCompleted: 'NO', + mediationAttempted: 'NO', + settlementAttempted: 'NO', + noticeServed: 'No', + rentDetails_CurrentRent: '100000', + rentDetails_Frequency: 'MONTHLY', + rentDetails_CalculatedDailyCharge: '3285', + rentSectionPaymentFrequency: 'MONTHLY', + rentDetails_FormattedCalculatedDailyCharge: '£32.85', + rentDetails_PerDayCorrect: 'YES', + tenancy_TenancyLicenceDocuments: [], + showIntroductoryDemotedOtherGroundReasonPage: 'Yes', + introGrounds_HasIntroductoryDemotedOtherGroundsForPossession: 'YES', + introGrounds_IntroductoryDemotedOrOtherGrounds: ['ANTI_SOCIAL', 'RENT_ARREARS'], + antiSocialBehaviourGround: 'Antisocial', + showRentArrearsPage: 'Yes', + rentArrears_Total: '200000', + rentArrears_ThirdPartyPayments: 'NO', + arrearsJudgmentWanted: 'NO', + claimantNamePossessiveForm: 'Possession Claims Solicitor Org’s', + claimantCircumstancesSelect: 'NO', + hasDefendantCircumstancesInfo: 'NO', + suspensionOfRTB_ShowHousingActsPage: 'No', + demotionOfTenancy_ShowHousingActsPage: 'No', + suspensionToBuyDemotionOfTenancyPages: 'No', + alternativesToPossession: [], + claimingCostsWanted: 'NO', + additionalReasonsForPossession: { + hasReasons: 'NO', + }, + hasUnderlesseeOrMortgagee: 'NO', + wantToUploadDocuments: 'NO', + applicationWithClaim: 'NO', + languageUsed: 'ENGLISH', + completionNextStep: 'SUBMIT_AND_PAY_NOW', + statementOfTruth: { + completedBy: 'CLAIMANT', + fullNameClaimant: 'fg', + positionClaimant: 'fg', + agreementClaimant: ['BELIEVE_TRUE'], + }, + }; + }, submitCaseApiEndPoint: (): string => `/cases/${process.env.CASE_NUMBER}/events`, }; diff --git a/src/test/ui/e2eTest/respondToAClaim.spec.ts b/src/test/ui/e2eTest/respondToAClaim.spec.ts index 5f8901e33..85f8f3ffc 100644 --- a/src/test/ui/e2eTest/respondToAClaim.spec.ts +++ b/src/test/ui/e2eTest/respondToAClaim.spec.ts @@ -36,6 +36,10 @@ test.beforeEach(async ({ page }, testInfo) => { process.env.CORRESPONDENCE_ADDRESS = 'UNKNOWN'; await performAction('createCaseAPI', { data: createCaseApiData.createCasePayload }); await performAction('submitCaseAPI', { data: submitCaseApiData.submitCasePayloadNoDefendants }); + } if (testInfo.title.includes('@rentNonRent')) { + process.env.CORRESPONDENCE_ADDRESS = 'KNOWN'; + await performAction('createCaseAPI', { data: createCaseApiData.createCasePayload }); + await performAction('submitCaseAPI', { data: submitCaseApiData.submitCasePayloadRentNonRent }); } else { process.env.CORRESPONDENCE_ADDRESS = 'KNOWN'; await performAction('createCaseAPI', { data: createCaseApiData.createCasePayload }); @@ -406,7 +410,7 @@ test.describe('Respond to a claim - e2e Journey @nightly', async () => { await performValidation('mainHeader', repaymentsAgreed.mainHeader); }); - test('England - RentArrears - NoticeServed - No NoticeDateProvided - No - RentArrearsDispute @regression', async () => { + test('England - RentArrears - NonRentArrears - NoticeServed - No NoticeDateProvided - No - RentArrearsDispute @rentNonRent @regression', async () => { await performAction('selectLegalAdvice', freeLegalAdvice.yesRadioOption); await performAction('confirmDefendantDetails', { question: defendantNameConfirmation.mainHeader, @@ -439,6 +443,8 @@ test.describe('Respond to a claim - e2e Journey @nightly', async () => { await performAction('rentArrears', { option: rentArrears.yesRadioOption, }); + await performValidation('mainHeader', nonRentArrearsDispute.mainHeader); + await performAction('clickButton', nonRentArrearsDispute.continueButton); // placeholder page, so need to be replaced with custom action when actual page is implemented await performValidation('mainHeader', counterClaim.mainHeader); await performAction('clickButton', counterClaim.saveAndContinueButton); From ffc2d227785d410d06fcd982b5dd0838cb1ec129 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Fri, 20 Mar 2026 17:45:58 +0000 Subject: [PATCH 04/20] lint fix --- src/test/ui/e2eTest/respondToAClaim.spec.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/ui/e2eTest/respondToAClaim.spec.ts b/src/test/ui/e2eTest/respondToAClaim.spec.ts index 85f8f3ffc..176897c2b 100644 --- a/src/test/ui/e2eTest/respondToAClaim.spec.ts +++ b/src/test/ui/e2eTest/respondToAClaim.spec.ts @@ -36,7 +36,8 @@ test.beforeEach(async ({ page }, testInfo) => { process.env.CORRESPONDENCE_ADDRESS = 'UNKNOWN'; await performAction('createCaseAPI', { data: createCaseApiData.createCasePayload }); await performAction('submitCaseAPI', { data: submitCaseApiData.submitCasePayloadNoDefendants }); - } if (testInfo.title.includes('@rentNonRent')) { + } + if (testInfo.title.includes('@rentNonRent')) { process.env.CORRESPONDENCE_ADDRESS = 'KNOWN'; await performAction('createCaseAPI', { data: createCaseApiData.createCasePayload }); await performAction('submitCaseAPI', { data: submitCaseApiData.submitCasePayloadRentNonRent }); From 3ce5116e9c8fa8caff279787da0783c345ce5a60 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Mon, 23 Mar 2026 14:33:31 +0000 Subject: [PATCH 05/20] conflict resolution --- src/test/ui/e2eTest/respondToAClaim.spec.ts | 3 +-- src/test/ui/functional/rentArrears.pft.ts | 6 +++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/src/test/ui/e2eTest/respondToAClaim.spec.ts b/src/test/ui/e2eTest/respondToAClaim.spec.ts index 176897c2b..104db2d06 100644 --- a/src/test/ui/e2eTest/respondToAClaim.spec.ts +++ b/src/test/ui/e2eTest/respondToAClaim.spec.ts @@ -36,8 +36,7 @@ test.beforeEach(async ({ page }, testInfo) => { process.env.CORRESPONDENCE_ADDRESS = 'UNKNOWN'; await performAction('createCaseAPI', { data: createCaseApiData.createCasePayload }); await performAction('submitCaseAPI', { data: submitCaseApiData.submitCasePayloadNoDefendants }); - } - if (testInfo.title.includes('@rentNonRent')) { + } else if (testInfo.title.includes('@rentNonRent')) { process.env.CORRESPONDENCE_ADDRESS = 'KNOWN'; await performAction('createCaseAPI', { data: createCaseApiData.createCasePayload }); await performAction('submitCaseAPI', { data: submitCaseApiData.submitCasePayloadRentNonRent }); diff --git a/src/test/ui/functional/rentArrears.pft.ts b/src/test/ui/functional/rentArrears.pft.ts index 0d019fc5c..caad8a16d 100644 --- a/src/test/ui/functional/rentArrears.pft.ts +++ b/src/test/ui/functional/rentArrears.pft.ts @@ -43,10 +43,14 @@ export async function rentArrearsErrorValidation(): Promise { } export async function rentArrearsNavigationTests(): Promise { + // if NoticeDateProvided = no then go to NoticeDateUnknown + // if NoticeDateProvided = yes then go to NoticeDateKnown + // if NoticeServed = No then go to // await performValidation( // 'pageNavigation', // rentArrears.backLink, - // disputeClaimInterstitial.getMainHeader(claimantsName) + // not.getMainHeader(claimantsName) // ); + await performValidation('pageNavigation', rentArrears.saveForLaterButton, dashboard.mainHeader); } From 4fe9e31b92e60898084600d5c6fba782a46d9d26 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Tue, 24 Mar 2026 11:41:11 +0000 Subject: [PATCH 06/20] navigation tests updated --- src/test/ui/e2eTest/respondToAClaim.spec.ts | 18 ++++++++++++- src/test/ui/functional/rentArrears.pft.ts | 27 ++++++++++++------- .../custom-actions/respondToClaim.action.ts | 11 -------- 3 files changed, 34 insertions(+), 22 deletions(-) diff --git a/src/test/ui/e2eTest/respondToAClaim.spec.ts b/src/test/ui/e2eTest/respondToAClaim.spec.ts index 104db2d06..a03b4aab5 100644 --- a/src/test/ui/e2eTest/respondToAClaim.spec.ts +++ b/src/test/ui/e2eTest/respondToAClaim.spec.ts @@ -32,6 +32,22 @@ test.beforeEach(async ({ page }, testInfo) => { } else { process.env.NOTICE_SERVED = 'YES'; } + + // If NoticeDateProvided = no → navigate to Notice Date Unknown + if (testInfo.title.includes('NoticeDateProvided - No')) { + process.env.NOTICE_DATE_PROVIDED = 'NO'; + // If NoticeDateProvided = yes → navigate to Notice Date Known + } else if (testInfo.title.includes('NoticeDateProvided - Yes')) { + process.env.NOTICE_DATE_PROVIDED = 'YES'; + } + // If NoticeServed = no and tenancy start date is unknown → navigate to Tenancy Start Date Known + else if (testInfo.title.includes('NoticeServed - No') && testInfo.title.includes('noDefendants')) { + process.env.TENANCY_START_DATE_KNOWN = 'NO'; + } //If NoticeServed = no and tenancy start date is known → navigate to Tenancy Start Date known + else if (testInfo.title.includes('NoticeServed - No') && !testInfo.title.includes('noDefendants')) { + process.env.TENANCY_START_DATE_KNOWN = 'YES'; + } + if (testInfo.title.includes('@noDefendants')) { process.env.CORRESPONDENCE_ADDRESS = 'UNKNOWN'; await performAction('createCaseAPI', { data: createCaseApiData.createCasePayload }); @@ -410,7 +426,7 @@ test.describe('Respond to a claim - e2e Journey @nightly', async () => { await performValidation('mainHeader', repaymentsAgreed.mainHeader); }); - test('England - RentArrears - NonRentArrears - NoticeServed - No NoticeDateProvided - No - RentArrearsDispute @rentNonRent @regression', async () => { + test('England - RentArrears - NonRentArrears - NoticeServed - No - RentArrearsDispute @rentNonRent @regression', async () => { await performAction('selectLegalAdvice', freeLegalAdvice.yesRadioOption); await performAction('confirmDefendantDetails', { question: defendantNameConfirmation.mainHeader, diff --git a/src/test/ui/functional/rentArrears.pft.ts b/src/test/ui/functional/rentArrears.pft.ts index caad8a16d..ee573bb05 100644 --- a/src/test/ui/functional/rentArrears.pft.ts +++ b/src/test/ui/functional/rentArrears.pft.ts @@ -1,4 +1,11 @@ -import { dashboard, rentArrears } from '../data/page-data'; +import { + dashboard, + noticeDateWhenNotProvided, + noticeDateWhenProvided, + rentArrears, + tenancyDateDetails, + tenancyDateUnknown, +} from '../data/page-data'; import { performAction, performValidation } from '../utils/controller'; export async function rentArrearsErrorValidation(): Promise { @@ -43,14 +50,14 @@ export async function rentArrearsErrorValidation(): Promise { } export async function rentArrearsNavigationTests(): Promise { - // if NoticeDateProvided = no then go to NoticeDateUnknown - // if NoticeDateProvided = yes then go to NoticeDateKnown - // if NoticeServed = No then go to - // await performValidation( - // 'pageNavigation', - // rentArrears.backLink, - // not.getMainHeader(claimantsName) - // ); - + if (process.env.NOTICE_DATE_PROVIDED === 'NO') { + await performValidation('pageNavigation', rentArrears.backLink, noticeDateWhenNotProvided.mainHeader); + } else if (process.env.NOTICE_DATE_PROVIDED === 'YES') { + await performValidation('pageNavigation', rentArrears.backLink, noticeDateWhenProvided.mainHeader); + } else if (process.env.TENANCY_START_DATE_KNOWN === 'YES') { + await performValidation('pageNavigation', rentArrears.backLink, tenancyDateDetails.mainHeader); + } else if (process.env.TENANCY_START_DATE_KNOWN === 'NO') { + await performValidation('pageNavigation', rentArrears.backLink, tenancyDateUnknown.mainHeader); + } await performValidation('pageNavigation', rentArrears.saveForLaterButton, dashboard.mainHeader); } diff --git a/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts b/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts index af7b7ae51..aaab6f579 100644 --- a/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts +++ b/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts @@ -266,17 +266,6 @@ export class RespondToClaimAction implements IAction { } private async rentArrears(rentArrearsInfo: actionRecord): Promise { - // let rentArrears_Total: string | null = null; - // let claimantName: string | null = null; - // if (rentArrearsInfo.tenancy === 'flexible') { - // rentArrears_Total = `${submitCaseApiData.submitCasePayloadFlexibleTenancyDate.rentArrears_Total}`; - // claimantName = `${submitCaseApiData.submitCasePayloadFlexibleTenancyDate.claimantName}`; - // } - // if (rentArrearsInfo.tenancy === 'introductory') { - // rentArrears_Total = `${submitCaseApiData.submitCasePayloadIntroductoryTenancy.rentArrears_Total}`; - // claimantName = `${submitCaseApiData.submitCasePayloadIntroductoryTenancy.claimantName}`; - // } - await performValidation('text', { elementType: 'subHeader', text: `Amount you owe in rent arrears given by ${submitCaseApiData.submitCasePayload.claimantName}:`, From 42e209b2419fe8a5095c1dc685946309b5a279ae Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Tue, 24 Mar 2026 12:10:31 +0000 Subject: [PATCH 07/20] navigation tests updated --- src/test/ui/e2eTest/respondToAClaim.spec.ts | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/src/test/ui/e2eTest/respondToAClaim.spec.ts b/src/test/ui/e2eTest/respondToAClaim.spec.ts index a03b4aab5..62b6a537b 100644 --- a/src/test/ui/e2eTest/respondToAClaim.spec.ts +++ b/src/test/ui/e2eTest/respondToAClaim.spec.ts @@ -33,19 +33,17 @@ test.beforeEach(async ({ page }, testInfo) => { process.env.NOTICE_SERVED = 'YES'; } - // If NoticeDateProvided = no → navigate to Notice Date Unknown +// Notice date provided if (testInfo.title.includes('NoticeDateProvided - No')) { process.env.NOTICE_DATE_PROVIDED = 'NO'; - // If NoticeDateProvided = yes → navigate to Notice Date Known } else if (testInfo.title.includes('NoticeDateProvided - Yes')) { process.env.NOTICE_DATE_PROVIDED = 'YES'; } - // If NoticeServed = no and tenancy start date is unknown → navigate to Tenancy Start Date Known - else if (testInfo.title.includes('NoticeServed - No') && testInfo.title.includes('noDefendants')) { - process.env.TENANCY_START_DATE_KNOWN = 'NO'; - } //If NoticeServed = no and tenancy start date is known → navigate to Tenancy Start Date known - else if (testInfo.title.includes('NoticeServed - No') && !testInfo.title.includes('noDefendants')) { - process.env.TENANCY_START_DATE_KNOWN = 'YES'; + +// Tenancy start date logic (independent) + if (testInfo.title.includes('NoticeServed - No')) { + process.env.TENANCY_START_DATE_KNOWN = + testInfo.title.includes('noDefendants') ? 'NO' : 'YES'; } if (testInfo.title.includes('@noDefendants')) { From b2d1b385f3988880e37c80676edccfa22db38ace Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Tue, 24 Mar 2026 12:14:53 +0000 Subject: [PATCH 08/20] navigation tests updated --- src/test/ui/e2eTest/respondToAClaim.spec.ts | 7 +++---- src/test/ui/functional/rentArrears.pft.ts | 4 ++-- 2 files changed, 5 insertions(+), 6 deletions(-) diff --git a/src/test/ui/e2eTest/respondToAClaim.spec.ts b/src/test/ui/e2eTest/respondToAClaim.spec.ts index 62b6a537b..89f1be30a 100644 --- a/src/test/ui/e2eTest/respondToAClaim.spec.ts +++ b/src/test/ui/e2eTest/respondToAClaim.spec.ts @@ -33,17 +33,16 @@ test.beforeEach(async ({ page }, testInfo) => { process.env.NOTICE_SERVED = 'YES'; } -// Notice date provided + // Notice date provided if (testInfo.title.includes('NoticeDateProvided - No')) { process.env.NOTICE_DATE_PROVIDED = 'NO'; } else if (testInfo.title.includes('NoticeDateProvided - Yes')) { process.env.NOTICE_DATE_PROVIDED = 'YES'; } -// Tenancy start date logic (independent) + // Tenancy start date logic (independent) if (testInfo.title.includes('NoticeServed - No')) { - process.env.TENANCY_START_DATE_KNOWN = - testInfo.title.includes('noDefendants') ? 'NO' : 'YES'; + process.env.TENANCY_START_DATE_KNOWN = testInfo.title.includes('noDefendants') ? 'NO' : 'YES'; } if (testInfo.title.includes('@noDefendants')) { diff --git a/src/test/ui/functional/rentArrears.pft.ts b/src/test/ui/functional/rentArrears.pft.ts index ee573bb05..500924f29 100644 --- a/src/test/ui/functional/rentArrears.pft.ts +++ b/src/test/ui/functional/rentArrears.pft.ts @@ -54,10 +54,10 @@ export async function rentArrearsNavigationTests(): Promise { await performValidation('pageNavigation', rentArrears.backLink, noticeDateWhenNotProvided.mainHeader); } else if (process.env.NOTICE_DATE_PROVIDED === 'YES') { await performValidation('pageNavigation', rentArrears.backLink, noticeDateWhenProvided.mainHeader); - } else if (process.env.TENANCY_START_DATE_KNOWN === 'YES') { - await performValidation('pageNavigation', rentArrears.backLink, tenancyDateDetails.mainHeader); } else if (process.env.TENANCY_START_DATE_KNOWN === 'NO') { await performValidation('pageNavigation', rentArrears.backLink, tenancyDateUnknown.mainHeader); + } else if (process.env.TENANCY_START_DATE_KNOWN === 'YES') { + await performValidation('pageNavigation', rentArrears.backLink, tenancyDateDetails.mainHeader); } await performValidation('pageNavigation', rentArrears.saveForLaterButton, dashboard.mainHeader); } From 24e80a35cc6727fa9278b11460fa79b69b54af00 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Tue, 24 Mar 2026 13:36:57 +0000 Subject: [PATCH 09/20] navigation tests updated --- src/test/ui/functional/rentArrears.pft.ts | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/test/ui/functional/rentArrears.pft.ts b/src/test/ui/functional/rentArrears.pft.ts index 500924f29..9d6159e76 100644 --- a/src/test/ui/functional/rentArrears.pft.ts +++ b/src/test/ui/functional/rentArrears.pft.ts @@ -50,6 +50,8 @@ export async function rentArrearsErrorValidation(): Promise { } export async function rentArrearsNavigationTests(): Promise { + await performAction('clickRadioButton', rentArrears.yesRadioOption); + await performValidation('pageNavigation', rentArrears.saveForLaterButton, dashboard.mainHeader); if (process.env.NOTICE_DATE_PROVIDED === 'NO') { await performValidation('pageNavigation', rentArrears.backLink, noticeDateWhenNotProvided.mainHeader); } else if (process.env.NOTICE_DATE_PROVIDED === 'YES') { @@ -59,5 +61,4 @@ export async function rentArrearsNavigationTests(): Promise { } else if (process.env.TENANCY_START_DATE_KNOWN === 'YES') { await performValidation('pageNavigation', rentArrears.backLink, tenancyDateDetails.mainHeader); } - await performValidation('pageNavigation', rentArrears.saveForLaterButton, dashboard.mainHeader); } From 6960fa6035883e208d6b8d9f5b9bd820ece4d905 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Tue, 24 Mar 2026 14:25:05 +0000 Subject: [PATCH 10/20] navigation tests updated --- src/test/ui/functional/rentArrears.pft.ts | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/src/test/ui/functional/rentArrears.pft.ts b/src/test/ui/functional/rentArrears.pft.ts index 9d6159e76..eebcf7f19 100644 --- a/src/test/ui/functional/rentArrears.pft.ts +++ b/src/test/ui/functional/rentArrears.pft.ts @@ -50,15 +50,21 @@ export async function rentArrearsErrorValidation(): Promise { } export async function rentArrearsNavigationTests(): Promise { - await performAction('clickRadioButton', rentArrears.yesRadioOption); - await performValidation('pageNavigation', rentArrears.saveForLaterButton, dashboard.mainHeader); if (process.env.NOTICE_DATE_PROVIDED === 'NO') { await performValidation('pageNavigation', rentArrears.backLink, noticeDateWhenNotProvided.mainHeader); - } else if (process.env.NOTICE_DATE_PROVIDED === 'YES') { + } + + if (process.env.NOTICE_DATE_PROVIDED === 'YES') { await performValidation('pageNavigation', rentArrears.backLink, noticeDateWhenProvided.mainHeader); - } else if (process.env.TENANCY_START_DATE_KNOWN === 'NO') { + } + + if (process.env.TENANCY_START_DATE_KNOWN === 'NO') { await performValidation('pageNavigation', rentArrears.backLink, tenancyDateUnknown.mainHeader); - } else if (process.env.TENANCY_START_DATE_KNOWN === 'YES') { + } + + if (process.env.TENANCY_START_DATE_KNOWN === 'YES') { await performValidation('pageNavigation', rentArrears.backLink, tenancyDateDetails.mainHeader); } + await performAction('clickRadioButton', rentArrears.yesRadioOption); + await performValidation('pageNavigation', rentArrears.saveForLaterButton, dashboard.mainHeader); } From a1f9e0fc4ee496834b392e7c3b6227593228f099 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Tue, 24 Mar 2026 16:19:51 +0000 Subject: [PATCH 11/20] fixed error --- src/test/ui/data/page-data/rentArrears.page.data.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/ui/data/page-data/rentArrears.page.data.ts b/src/test/ui/data/page-data/rentArrears.page.data.ts index f560b2844..0d2bc9929 100644 --- a/src/test/ui/data/page-data/rentArrears.page.data.ts +++ b/src/test/ui/data/page-data/rentArrears.page.data.ts @@ -7,7 +7,7 @@ export const rentArrears = { billionTextInput: `1000001.00`, doYouOweThisQuestion: `Do you owe this amount in rent arrears?`, howMuchDoYouBelieveHiddenTextLabel: `How much do you believe you owe in rent arrears?`, - rentArrearsAreMoneyHintText: `Rent arrears are money you owe in rent payments.`, + rentArrearsAreMoneyParagraph: `Rent arrears are money you owe in rent payments.`, theRentStatementParagraph: `The rent statement will have been included in the pack you received in the post letting you know a claim had been made against you, and is also available to view from ‘View the claim’ on your case overview.`, yesRadioOption: `Yes`, noRadioOption: `No`, From 3398844932bca26567b33b9bc49ce4fdcfaf1f09 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Tue, 24 Mar 2026 16:40:17 +0000 Subject: [PATCH 12/20] fixed error --- src/test/ui/data/page-data/rentArrears.page.data.ts | 2 +- src/test/ui/functional/rentArrears.pft.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/test/ui/data/page-data/rentArrears.page.data.ts b/src/test/ui/data/page-data/rentArrears.page.data.ts index 0d2bc9929..2beee6056 100644 --- a/src/test/ui/data/page-data/rentArrears.page.data.ts +++ b/src/test/ui/data/page-data/rentArrears.page.data.ts @@ -21,5 +21,5 @@ export const rentArrears = { theAmountYouBelieveErrorMessage: `The amount you believe you owe in rent arrears must be £0.00 or above`, lessThanBillionErrorMessage: `The amount you believe you owe in rent arrears must be less than £1 billion`, doYouOweThisAmountErrorMessage: `Do you owe this amount in rent arrears?`, - enterAmountInCorrectFormat: `Enter how much you believe you owe in rent arrears, in the correct format (e.g. if you owe £148, please write £148.00)`, + enterAmountInCorrectFormatErrorMessage: `Enter how much you believe you owe in rent arrears, in the correct format (e.g. if you owe £148, please write £148.00)`, }; diff --git a/src/test/ui/functional/rentArrears.pft.ts b/src/test/ui/functional/rentArrears.pft.ts index eebcf7f19..5bf094401 100644 --- a/src/test/ui/functional/rentArrears.pft.ts +++ b/src/test/ui/functional/rentArrears.pft.ts @@ -45,7 +45,7 @@ export async function rentArrearsErrorValidation(): Promise { await performAction('clickButton', rentArrears.saveAndContinueButton); await performValidation('errorMessage', { header: rentArrears.thereIsAProblemErrorMessageHeader, - message: rentArrears.enterAmountInCorrectFormat, + message: rentArrears.enterAmountInCorrectFormatErrorMessage, }); } From 44093ada325ddb6133e3ba073e56a3aa7886982a Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Wed, 25 Mar 2026 09:09:46 +0000 Subject: [PATCH 13/20] fixed error --- src/test/ui/data/page-data/rentArrears.page.data.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/ui/data/page-data/rentArrears.page.data.ts b/src/test/ui/data/page-data/rentArrears.page.data.ts index 2beee6056..c9d55e49b 100644 --- a/src/test/ui/data/page-data/rentArrears.page.data.ts +++ b/src/test/ui/data/page-data/rentArrears.page.data.ts @@ -4,7 +4,7 @@ export const rentArrears = { rentAmountTextInput: `1000.00`, incorrectFormatTextInput: `1000`, negativeTextInput: `-100.00`, - billionTextInput: `1000001.00`, + billionTextInput: `1000000001.00`, doYouOweThisQuestion: `Do you owe this amount in rent arrears?`, howMuchDoYouBelieveHiddenTextLabel: `How much do you believe you owe in rent arrears?`, rentArrearsAreMoneyParagraph: `Rent arrears are money you owe in rent payments.`, From 75ccbcc47f4a2e037316822132b413f4bfb05a7a Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Wed, 25 Mar 2026 11:38:48 +0000 Subject: [PATCH 14/20] review comment --- .../ui/utils/actions/custom-actions/respondToClaim.action.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts b/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts index cd99aee16..2e03313ea 100644 --- a/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts +++ b/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts @@ -284,7 +284,7 @@ export class RespondToClaimAction implements IAction { question: rentArrears.doYouOweThisQuestion, option: rentArrearsInfo.option, }); - if (rentArrearsInfo.option === rentArrears.noRadioOption) { + if (rentArrearsInfo.option === 'No') { await performAction('inputText', rentArrears.howMuchDoYouBelieveHiddenTextLabel, rentArrearsInfo.rentAmount); } await performAction('clickButton', rentArrears.saveAndContinueButton); From ce5d88e26affdbe4eca95b1a37d407f293c52bed Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Wed, 25 Mar 2026 12:28:27 +0000 Subject: [PATCH 15/20] review comment --- src/test/ui/utils/common/string.utils.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/test/ui/utils/common/string.utils.ts b/src/test/ui/utils/common/string.utils.ts index 6aed89160..3be5f2413 100644 --- a/src/test/ui/utils/common/string.utils.ts +++ b/src/test/ui/utils/common/string.utils.ts @@ -7,5 +7,9 @@ export function exactTextWithOptionalWhitespaceRegex(text: string): RegExp { } export function formatCurrency(value: number | string): string { + const num = Number(value); + if (isNaN(num)) { + throw new Error(`Invalid currency value: ${value}`); + } return `£${(Number(value) / 100).toFixed(2)}`; } From 442cb7e2d09ce20e334a0411d0ee5b4c7b875a1a Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Wed, 25 Mar 2026 15:45:48 +0000 Subject: [PATCH 16/20] fix the pft test --- src/test/ui/e2eTest/respondToAClaim.spec.ts | 4 +++- src/test/ui/functional/rentArrears.pft.ts | 5 +++++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/src/test/ui/e2eTest/respondToAClaim.spec.ts b/src/test/ui/e2eTest/respondToAClaim.spec.ts index 60356c54c..3c15b49df 100644 --- a/src/test/ui/e2eTest/respondToAClaim.spec.ts +++ b/src/test/ui/e2eTest/respondToAClaim.spec.ts @@ -39,7 +39,9 @@ test.beforeEach(async ({ page }, testInfo) => { } else if (testInfo.title.includes('NoticeDateProvided - Yes')) { process.env.NOTICE_DATE_PROVIDED = 'YES'; } - + if (testInfo.title.includes('NoticeDetails - No') || testInfo.title.includes('NoticeDetails - Im not sure')) { + process.env.NOTICE_DETAILS_NO_NOTSURE = 'YES'; + } // Tenancy start date logic (independent) if (testInfo.title.includes('NoticeServed - No')) { process.env.TENANCY_START_DATE_KNOWN = testInfo.title.includes('noDefendants') ? 'NO' : 'YES'; diff --git a/src/test/ui/functional/rentArrears.pft.ts b/src/test/ui/functional/rentArrears.pft.ts index 5bf094401..14179708d 100644 --- a/src/test/ui/functional/rentArrears.pft.ts +++ b/src/test/ui/functional/rentArrears.pft.ts @@ -1,4 +1,5 @@ import { + confirmationOfNoticeGiven, dashboard, noticeDateWhenNotProvided, noticeDateWhenProvided, @@ -54,6 +55,10 @@ export async function rentArrearsNavigationTests(): Promise { await performValidation('pageNavigation', rentArrears.backLink, noticeDateWhenNotProvided.mainHeader); } + if (process.env.NOTICE_DETAILS_NO_NOTSURE === 'YES') { + await performValidation('pageNavigation', rentArrears.backLink, confirmationOfNoticeGiven.mainHeader); + } + if (process.env.NOTICE_DATE_PROVIDED === 'YES') { await performValidation('pageNavigation', rentArrears.backLink, noticeDateWhenProvided.mainHeader); } From 63001d2db0a1e51d45f8f101e393a03b951d0ec2 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Fri, 27 Mar 2026 19:05:25 +0000 Subject: [PATCH 17/20] fixed back link navigation --- src/test/ui/data/api-data/submitCase.api.data.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/test/ui/data/api-data/submitCase.api.data.ts b/src/test/ui/data/api-data/submitCase.api.data.ts index 8df49a31d..4dce6316c 100644 --- a/src/test/ui/data/api-data/submitCase.api.data.ts +++ b/src/test/ui/data/api-data/submitCase.api.data.ts @@ -1,5 +1,3 @@ -import { v4 as uuidv4 } from 'uuid'; - export const submitCaseApiData = { submitCaseEventName: 'resumePossessionClaim', //Introductory and Demoted tenancy with Tenancy Licence date known for Rent arrears only @@ -338,5 +336,6 @@ export const submitCaseApiData = { }, }; }, + submitCaseApiEndPoint: (): string => `/cases/${process.env.CASE_NUMBER}/events`, }; From 0ba4bd8e592cfca1b959be5b0880b7acc449de88 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Fri, 27 Mar 2026 19:21:17 +0000 Subject: [PATCH 18/20] fixed back link navigation --- .../ui/data/api-data/submitCase.api.data.ts | 263 +++++++++++++++++- src/test/ui/e2eTest/respondToAClaim.spec.ts | 43 +-- .../ui/functional/tenancyDateDetails.pft.ts | 4 +- .../custom-actions/respondToClaim.action.ts | 6 +- src/test/ui/utils/common/string.utils.ts | 3 +- 5 files changed, 290 insertions(+), 29 deletions(-) diff --git a/src/test/ui/data/api-data/submitCase.api.data.ts b/src/test/ui/data/api-data/submitCase.api.data.ts index 4dce6316c..3aca17afd 100644 --- a/src/test/ui/data/api-data/submitCase.api.data.ts +++ b/src/test/ui/data/api-data/submitCase.api.data.ts @@ -336,6 +336,267 @@ export const submitCaseApiData = { }, }; }, - + //Assured tenancy with Tenancy Licence date unknown for Non-Rent arrears only + get submitCasePayloadAssuredTenancy() { + return { + legislativeCountry: 'England', + claimantType: { + value: { + code: 'PROVIDER_OF_SOCIAL_HOUSING', + label: 'Registered provider of social housing', + }, + list_items: [ + { + code: 'PRIVATE_LANDLORD', + label: 'Private landlord', + }, + { + code: 'PROVIDER_OF_SOCIAL_HOUSING', + label: 'Registered provider of social housing', + }, + { + code: 'MORTGAGE_LENDER', + label: 'Mortgage lender', + }, + { + code: 'OTHER', + label: 'Other', + }, + ], + valueCode: 'PROVIDER_OF_SOCIAL_HOUSING', + }, + claimAgainstTrespassers: 'NO', + orgNameFound: 'Yes', + claimantName: 'Possession Claims Solicitor Org', + isClaimantNameCorrect: 'YES', + claimantContactEmail: 'pcs-solicitor1@test.com', + isCorrectClaimantContactEmail: 'YES', + orgAddressFound: 'Yes', + organisationAddress: { + AddressLine1: 'Ministry Of Justice', + AddressLine2: 'Seventh Floor 102 Petty France', + PostTown: 'London', + PostCode: 'SW1H 9AJ', + Country: 'United Kingdom', + }, + formattedClaimantContactAddress: 'Ministry Of Justice
Seventh Floor 102 Petty France
London
SW1H 9AJ', + isCorrectClaimantContactAddress: 'YES', + claimantProvidePhoneNumber: 'NO', + defendant1: { + nameKnown: 'NO', + addressKnown: 'NO', + }, + addAnotherDefendant: 'NO', + tenancy_TypeOfTenancyLicence: process.env.TENANCY_TYPE, + tenancy_TenancyLicenceDate: null, + tenancy_TenancyLicenceDocuments: [], + claimDueToRentArrears: 'No', + preActionProtocolCompleted: 'NO', + mediationAttempted: 'NO', + settlementAttempted: 'NO', + noticeServed: process.env.NOTICE_SERVED, + showRentSectionPage: 'No', + noRentArrears_ShowGroundReasonPage: 'Yes', + noRentArrears_MandatoryGrounds: [], + noRentArrears_DiscretionaryGrounds: ['ALTERNATIVE_ACCOMMODATION_GROUND9'], + assuredNoArrearsReasons_SuitableAlternativeAccomodation: 'accommodation details test', + claimantNamePossessiveForm: 'Possession Claims Solicitor Org’s', + claimantCircumstancesSelect: 'NO', + hasDefendantCircumstancesInfo: 'NO', + suspensionOfRTB_ShowHousingActsPage: 'No', + demotionOfTenancy_ShowHousingActsPage: 'No', + suspensionToBuyDemotionOfTenancyPages: 'No', + alternativesToPossession: [], + claimingCostsWanted: 'NO', + additionalReasonsForPossession: { + hasReasons: 'NO', + }, + hasUnderlesseeOrMortgagee: 'NO', + wantToUploadDocuments: 'NO', + applicationWithClaim: 'NO', + languageUsed: 'ENGLISH_AND_WELSH', + completionNextStep: 'SUBMIT_AND_PAY_NOW', + }; + }, + //Secure and Flexible Tenancy with Tenancy Licence date unknown for Non-Rent arrears only + get submitCasePayloadSecureFlexibleTenancy() { + return { + legislativeCountry: 'England', + claimantType: { + value: { + code: 'PROVIDER_OF_SOCIAL_HOUSING', + label: 'Registered provider of social housing', + }, + list_items: [ + { + code: 'PRIVATE_LANDLORD', + label: 'Private landlord', + }, + { + code: 'PROVIDER_OF_SOCIAL_HOUSING', + label: 'Registered provider of social housing', + }, + { + code: 'MORTGAGE_LENDER', + label: 'Mortgage lender', + }, + { + code: 'OTHER', + label: 'Other', + }, + ], + valueCode: 'PROVIDER_OF_SOCIAL_HOUSING', + }, + claimAgainstTrespassers: 'NO', + orgNameFound: 'Yes', + claimantName: 'Possession Claims Solicitor Org', + isClaimantNameCorrect: 'YES', + claimantContactEmail: 'pcs-solicitor1@test.com', + isCorrectClaimantContactEmail: 'YES', + orgAddressFound: 'Yes', + organisationAddress: { + AddressLine1: 'Ministry Of Justice', + AddressLine2: 'Seventh Floor 102 Petty France', + PostTown: 'London', + PostCode: 'SW1H 9AJ', + Country: 'United Kingdom', + }, + formattedClaimantContactAddress: 'Ministry Of Justice
Seventh Floor 102 Petty France
London
SW1H 9AJ', + isCorrectClaimantContactAddress: 'YES', + claimantProvidePhoneNumber: 'NO', + defendant1: { + nameKnown: 'NO', + addressKnown: 'NO', + }, + addAnotherDefendant: 'NO', + tenancy_TypeOfTenancyLicence: process.env.TENANCY_TYPE, + tenancy_TenancyLicenceDate: null, + tenancy_TenancyLicenceDocuments: [], + secureOrFlexibleDiscretionaryGrounds: ['DOMESTIC_VIOLENCE'], + secureOrFlexibleMandatoryGrounds: [], + secureOrFlexibleMandatoryGroundsAlt: [], + secureOrFlexibleDiscretionaryGroundsAlt: [], + domesticViolenceGround: 'Domestic violence test', + showBreachOfTenancyTextarea: null, + showReasonsForGroundsPage: 'Yes', + preActionProtocolCompleted: 'YES', + mediationAttempted: 'NO', + settlementAttempted: 'NO', + noticeServed: process.env.NOTICE_SERVED, + claimantNamePossessiveForm: 'Possession Claims Solicitor Org’s', + claimantCircumstancesSelect: 'NO', + hasDefendantCircumstancesInfo: 'NO', + suspensionOfRTB_ShowHousingActsPage: 'No', + demotionOfTenancy_ShowHousingActsPage: 'No', + suspensionToBuyDemotionOfTenancyPages: 'No', + claimingCostsWanted: 'NO', + hasUnderlesseeOrMortgagee: 'NO', + wantToUploadDocuments: 'NO', + applicationWithClaim: 'NO', + notice_NoticeServiceMethod: 'EMAIL', + notice_NoticeEmailExplanation: null, + notice_NoticeEmailSentDateTime: null, + notice_NoticeDocuments: [], + alternativesToPossession: [], + additionalReasonsForPossession: { + hasReasons: 'NO', + }, + languageUsed: 'ENGLISH_AND_WELSH', + completionNextStep: 'SUBMIT_AND_PAY_NOW', + statementOfTruth: { + completedBy: 'CLAIMANT', + fullNameClaimant: 'fg', + positionClaimant: 'fg', + agreementClaimant: ['BELIEVE_TRUE'], + }, + }; + }, + //Other tenancy with Tenancy Licence date unknown for Non-Rent arrears only + get submitCasePayloadOtherTenancy() { + return { + legislativeCountry: 'England', + claimantType: { + value: { + code: 'PROVIDER_OF_SOCIAL_HOUSING', + label: 'Registered provider of social housing', + }, + list_items: [ + { + code: 'PRIVATE_LANDLORD', + label: 'Private landlord', + }, + { + code: 'PROVIDER_OF_SOCIAL_HOUSING', + label: 'Registered provider of social housing', + }, + { + code: 'MORTGAGE_LENDER', + label: 'Mortgage lender', + }, + { + code: 'OTHER', + label: 'Other', + }, + ], + valueCode: 'PROVIDER_OF_SOCIAL_HOUSING', + }, + claimAgainstTrespassers: 'NO', + orgNameFound: 'Yes', + claimantName: 'Possession Claims Solicitor Org', + isClaimantNameCorrect: 'YES', + claimantContactEmail: 'pcs-solicitor-automation@test.com', + isCorrectClaimantContactEmail: 'YES', + orgAddressFound: 'Yes', + organisationAddress: { + AddressLine1: 'Ministry Of Justice', + AddressLine2: 'Seventh Floor 102 Petty France', + PostTown: 'London', + PostCode: 'SW1H 9AJ', + Country: 'United Kingdom', + }, + formattedClaimantContactAddress: 'Ministry Of Justice
Seventh Floor 102 Petty France
London
SW1H 9AJ', + isCorrectClaimantContactAddress: 'YES', + claimantProvidePhoneNumber: 'NO', + defendant1: { + nameKnown: 'NO', + addressKnown: 'NO', + }, + addAnotherDefendant: 'NO', + tenancy_TypeOfTenancyLicence: 'OTHER', + tenancy_DetailsOfOtherTypeOfTenancyLicence: 'Other tenancy - short term', + tenancy_TenancyLicenceDate: null, + tenancy_TenancyLicenceDocuments: [], + showIntroductoryDemotedOtherGroundReasonPage: 'Yes', + introGrounds_HasIntroductoryDemotedOtherGroundsForPossession: 'YES', + introGrounds_IntroductoryDemotedOrOtherGrounds: ['ANTI_SOCIAL'], + antiSocialBehaviourGround: 'Antisocial behaviour', + preActionProtocolCompleted: 'NO', + mediationAttempted: 'NO', + settlementAttempted: 'NO', + noticeServed: process.env.NOTICE_SERVED, + claimantNamePossessiveForm: 'Possession Claims Solicitor Org’s', + claimantCircumstancesSelect: 'NO', + hasDefendantCircumstancesInfo: 'NO', + suspensionOfRTB_ShowHousingActsPage: 'No', + demotionOfTenancy_ShowHousingActsPage: 'No', + suspensionToBuyDemotionOfTenancyPages: 'No', + alternativesToPossession: [], + claimingCostsWanted: 'NO', + additionalReasonsForPossession: { + hasReasons: 'NO', + }, + hasUnderlesseeOrMortgagee: 'NO', + wantToUploadDocuments: 'NO', + applicationWithClaim: 'YES', + languageUsed: 'ENGLISH', + completionNextStep: 'SUBMIT_AND_PAY_NOW', + statementOfTruth: { + completedBy: 'CLAIMANT', + fullNameClaimant: 'fg', + positionClaimant: 'fg', + agreementClaimant: ['BELIEVE_TRUE'], + }, + }; + }, submitCaseApiEndPoint: (): string => `/cases/${process.env.CASE_NUMBER}/events`, }; diff --git a/src/test/ui/e2eTest/respondToAClaim.spec.ts b/src/test/ui/e2eTest/respondToAClaim.spec.ts index 899c5cf9a..28140e3bd 100644 --- a/src/test/ui/e2eTest/respondToAClaim.spec.ts +++ b/src/test/ui/e2eTest/respondToAClaim.spec.ts @@ -46,32 +46,33 @@ test.beforeEach(async ({ page }, testInfo) => { // Tenancy start date logic (independent) if (testInfo.title.includes('NoticeServed - No')) { process.env.TENANCY_START_DATE_KNOWN = testInfo.title.includes('noDefendants') ? 'NO' : 'YES'; - const tenancyKey = ['Introductory', 'Demoted', 'Assured', 'Secure', 'Flexible'].find(type => - testInfo.title.includes(type) - ); + const tenancyKey = ['Introductory', 'Demoted', 'Assured', 'Secure', 'Flexible'].find(type => + testInfo.title.includes(type) + ); - switch (tenancyKey) { - case 'Introductory': - process.env.TENANCY_TYPE = 'INTRODUCTORY_TENANCY'; - process.env.GROUNDS = 'RENT_ARREARS_GROUND10'; - break; + switch (tenancyKey) { + case 'Introductory': + process.env.TENANCY_TYPE = 'INTRODUCTORY_TENANCY'; + process.env.GROUNDS = 'RENT_ARREARS_GROUND10'; + break; - case 'Demoted': - process.env.TENANCY_TYPE = 'DEMOTED_TENANCY'; - process.env.GROUNDS = 'RENT_ARREARS'; - break; + case 'Demoted': + process.env.TENANCY_TYPE = 'DEMOTED_TENANCY'; + process.env.GROUNDS = 'RENT_ARREARS'; + break; - case 'Assured': - process.env.TENANCY_TYPE = 'ASSURED_TENANCY'; - break; + case 'Assured': + process.env.TENANCY_TYPE = 'ASSURED_TENANCY'; + break; - case 'Secure': - process.env.TENANCY_TYPE = 'SECURE_TENANCY'; - break; + case 'Secure': + process.env.TENANCY_TYPE = 'SECURE_TENANCY'; + break; - case 'Flexible': - process.env.TENANCY_TYPE = 'FLEXIBLE_TENANCY'; - break; + case 'Flexible': + process.env.TENANCY_TYPE = 'FLEXIBLE_TENANCY'; + break; + } } if (testInfo.title.includes('@noDefendants')) { diff --git a/src/test/ui/functional/tenancyDateDetails.pft.ts b/src/test/ui/functional/tenancyDateDetails.pft.ts index 5a93cdcef..e0885d341 100644 --- a/src/test/ui/functional/tenancyDateDetails.pft.ts +++ b/src/test/ui/functional/tenancyDateDetails.pft.ts @@ -1,4 +1,4 @@ -import { dashboard, tenancyDateDetails, tenancyDetails } from '../data/page-data'; +import { dashboard, tenancyDateDetails, tenancyTypeDetails } from '../data/page-data'; import { performAction, performActions, performValidation } from '../utils/controller'; export async function tenancyDateDetailsErrorValidation(): Promise { @@ -50,7 +50,7 @@ export async function tenancyDateDetailsErrorValidation(): Promise { } export async function tenancyDateDetailsNavigationTests(): Promise { - await performValidation('pageNavigation', tenancyDateDetails.backLink, tenancyDetails.mainHeader); + await performValidation('pageNavigation', tenancyDateDetails.backLink, tenancyTypeDetails.mainHeader); await performAction('clickRadioButton', tenancyDateDetails.yesRadioOption); await performValidation('pageNavigation', tenancyDateDetails.saveForLaterButton, dashboard.mainHeader); } diff --git a/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts b/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts index cc991877b..90933043b 100644 --- a/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts +++ b/src/test/ui/utils/actions/custom-actions/respondToClaim.action.ts @@ -23,8 +23,7 @@ import { tenancyDateUnknown, tenancyTypeDetails, } from '../../../data/page-data'; -import { formatCurrency } from '../../common/string.utils'; -import { formatTextToLowercaseSeparatedBySpace } from '../../common/string.utils'; +import { formatCurrency, formatTextToLowercaseSeparatedBySpace } from '../../common/string.utils'; import { performAction, performActions, performValidation } from '../../controller'; import { IAction, actionData, actionRecord } from '../../interfaces'; export let claimantsName: string; @@ -301,9 +300,8 @@ export class RespondToClaimAction implements IAction { await performAction('inputText', rentArrears.howMuchDoYouBelieveHiddenTextLabel, rentArrearsInfo.rentAmount); } await performAction('clickButton', rentArrears.saveAndContinueButton); - } - + private async tenancyOrContractTypeDetails(tenancyTypeDetailsInfo: actionRecord) { const tenancyType = formatTextToLowercaseSeparatedBySpace(tenancyTypeDetailsInfo.tenancyType as string); const article = /^[aeiou]/i.test(tenancyType) ? 'an' : 'a'; diff --git a/src/test/ui/utils/common/string.utils.ts b/src/test/ui/utils/common/string.utils.ts index 964ffa8c3..c8ebd081b 100644 --- a/src/test/ui/utils/common/string.utils.ts +++ b/src/test/ui/utils/common/string.utils.ts @@ -12,7 +12,8 @@ export function formatCurrency(value: number | string): string { throw new Error(`Invalid currency value: ${value}`); } return `£${(Number(value) / 100).toFixed(2)}`; - +} + export function formatTextToLowercaseSeparatedBySpace(value: string): string { return value.toLowerCase().replace(/_/g, ' ').trim(); } From 7c4d7327d172de3ea0707b1b18f5af8c7077f866 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Fri, 27 Mar 2026 20:12:48 +0000 Subject: [PATCH 19/20] fixed conflicts --- src/test/ui/e2eTest/respondToAClaim.spec.ts | 55 +++++++++++---------- 1 file changed, 28 insertions(+), 27 deletions(-) diff --git a/src/test/ui/e2eTest/respondToAClaim.spec.ts b/src/test/ui/e2eTest/respondToAClaim.spec.ts index 28140e3bd..82d26059d 100644 --- a/src/test/ui/e2eTest/respondToAClaim.spec.ts +++ b/src/test/ui/e2eTest/respondToAClaim.spec.ts @@ -34,6 +34,34 @@ test.beforeEach(async ({ page }, testInfo) => { process.env.NOTICE_SERVED = 'YES'; } + const tenancyKey = ['Introductory', 'Demoted', 'Assured', 'Secure', 'Flexible'].find(type => + testInfo.title.includes(type) + ); + + switch (tenancyKey) { + case 'Introductory': + process.env.TENANCY_TYPE = 'INTRODUCTORY_TENANCY'; + process.env.GROUNDS = 'RENT_ARREARS_GROUND10'; + break; + + case 'Demoted': + process.env.TENANCY_TYPE = 'DEMOTED_TENANCY'; + process.env.GROUNDS = 'RENT_ARREARS'; + break; + + case 'Assured': + process.env.TENANCY_TYPE = 'ASSURED_TENANCY'; + break; + + case 'Secure': + process.env.TENANCY_TYPE = 'SECURE_TENANCY'; + break; + + case 'Flexible': + process.env.TENANCY_TYPE = 'FLEXIBLE_TENANCY'; + break; + } + // Notice date provided if (testInfo.title.includes('NoticeDateProvided - No')) { process.env.NOTICE_DATE_PROVIDED = 'NO'; @@ -46,33 +74,6 @@ test.beforeEach(async ({ page }, testInfo) => { // Tenancy start date logic (independent) if (testInfo.title.includes('NoticeServed - No')) { process.env.TENANCY_START_DATE_KNOWN = testInfo.title.includes('noDefendants') ? 'NO' : 'YES'; - const tenancyKey = ['Introductory', 'Demoted', 'Assured', 'Secure', 'Flexible'].find(type => - testInfo.title.includes(type) - ); - - switch (tenancyKey) { - case 'Introductory': - process.env.TENANCY_TYPE = 'INTRODUCTORY_TENANCY'; - process.env.GROUNDS = 'RENT_ARREARS_GROUND10'; - break; - - case 'Demoted': - process.env.TENANCY_TYPE = 'DEMOTED_TENANCY'; - process.env.GROUNDS = 'RENT_ARREARS'; - break; - - case 'Assured': - process.env.TENANCY_TYPE = 'ASSURED_TENANCY'; - break; - - case 'Secure': - process.env.TENANCY_TYPE = 'SECURE_TENANCY'; - break; - - case 'Flexible': - process.env.TENANCY_TYPE = 'FLEXIBLE_TENANCY'; - break; - } } if (testInfo.title.includes('@noDefendants')) { From 9c3114a434c1291274ba55e7250f7570f62ca807 Mon Sep 17 00:00:00 2001 From: ashajayaprakash Date: Sat, 28 Mar 2026 00:04:27 +0000 Subject: [PATCH 20/20] fixed conflicts --- src/test/ui/e2eTest/respondToAClaim.spec.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/test/ui/e2eTest/respondToAClaim.spec.ts b/src/test/ui/e2eTest/respondToAClaim.spec.ts index 82d26059d..c5ba6f6e9 100644 --- a/src/test/ui/e2eTest/respondToAClaim.spec.ts +++ b/src/test/ui/e2eTest/respondToAClaim.spec.ts @@ -33,7 +33,7 @@ test.beforeEach(async ({ page }, testInfo) => { } else { process.env.NOTICE_SERVED = 'YES'; } - + // Assign the tenancy type & grounds in the payload const tenancyKey = ['Introductory', 'Demoted', 'Assured', 'Secure', 'Flexible'].find(type => testInfo.title.includes(type) ); @@ -62,16 +62,19 @@ test.beforeEach(async ({ page }, testInfo) => { break; } - // Notice date provided + // Check notice date provided for back link navigation if (testInfo.title.includes('NoticeDateProvided - No')) { process.env.NOTICE_DATE_PROVIDED = 'NO'; } else if (testInfo.title.includes('NoticeDateProvided - Yes')) { process.env.NOTICE_DATE_PROVIDED = 'YES'; } + + //Check if No or Im not sure is selected on NoticeDetails page - for back link navigation if (testInfo.title.includes('NoticeDetails - No') || testInfo.title.includes('NoticeDetails - Im not sure')) { process.env.NOTICE_DETAILS_NO_NOTSURE = 'YES'; } - // Tenancy start date logic (independent) + + // Tenancy start date logic for noDefendantTest if (testInfo.title.includes('NoticeServed - No')) { process.env.TENANCY_START_DATE_KNOWN = testInfo.title.includes('noDefendants') ? 'NO' : 'YES'; } @@ -82,8 +85,6 @@ test.beforeEach(async ({ page }, testInfo) => { process.env.CLAIMANT_NAME = submitCaseApiData.submitCasePayloadNoDefendants.overriddenClaimantName; await performAction('createCaseAPI', { data: createCaseApiData.createCasePayload }); await performAction('submitCaseAPI', { data: submitCaseApiData.submitCasePayloadNoDefendants }); - } else if (testInfo.title.includes('@rentNonRent')) { - process.env.CORRESPONDENCE_ADDRESS = 'KNOWN'; } else if (testInfo.title.includes('@assured')) { await performAction('createCaseAPI', { data: createCaseApiData.createCasePayload }); await performAction('submitCaseAPI', { data: submitCaseApiData.submitCasePayloadAssuredTenancy }); @@ -94,6 +95,7 @@ test.beforeEach(async ({ page }, testInfo) => { await performAction('createCaseAPI', { data: createCaseApiData.createCasePayload }); await performAction('submitCaseAPI', { data: submitCaseApiData.submitCasePayloadOtherTenancy }); } else if (testInfo.title.includes('@rentAndNonRent')) { + process.env.CORRESPONDENCE_ADDRESS = 'KNOWN'; await performAction('createCaseAPI', { data: createCaseApiData.createCasePayload }); await performAction('submitCaseAPI', { data: submitCaseApiData.submitCasePayloadRentNonRent }); } else {