diff --git a/integration_tests/e2e/domainEvent.cy.ts b/integration_tests/e2e/domainEvent.cy.ts new file mode 100644 index 0000000..e6fab6c --- /dev/null +++ b/integration_tests/e2e/domainEvent.cy.ts @@ -0,0 +1,76 @@ +context('Domain Event checks', () => { + it('Basic Details Merge Alert', () => { + cy.visit('/basic-details/00000000-0000-0000-0000-100000000101') + cy.get('#reviewAlert').should('exist') + }) + + it('Warning Details Merge Alert', () => { + cy.visit('/warning-details/00000000-0000-0000-0000-100000000101') + cy.get('#reviewAlert').should('exist') + }) + + it('Warning Type Merge Alert', () => { + cy.visit('/warning-type/00000000-0000-0000-0000-100000000101') + cy.get('#reviewAlert').should('exist') + }) + + it('Next Appointment Merge Alert', () => { + cy.visit('/next-appointment/00000000-0000-0000-0000-100000000101') + cy.get('#reviewAlert').should('exist') + }) + + it('Check your report Merge Alert', () => { + cy.visit('/check-your-report/00000000-0000-0000-0000-100000000101') + cy.get('#reviewAlert').should('exist') + }) + + it('Basic Details UnMerge Alert', () => { + cy.visit('/basic-details/00000000-0000-0000-0000-100000000102') + cy.get('#reviewAlert').should('exist') + }) + + it('Warning Details UnMerge Alert', () => { + cy.visit('/warning-details/00000000-0000-0000-0000-100000000102') + cy.get('#reviewAlert').should('exist') + }) + + it('Warning Type UnMerge Alert', () => { + cy.visit('/warning-type/00000000-0000-0000-0000-100000000102') + cy.get('#reviewAlert').should('exist') + }) + + it('Next Appointment UnMerge Alert', () => { + cy.visit('/next-appointment/00000000-0000-0000-0000-100000000102') + cy.get('#reviewAlert').should('exist') + }) + + it('Check your report UnMerge Alert', () => { + cy.visit('/check-your-report/00000000-0000-0000-0000-100000000102') + cy.get('#reviewAlert').should('exist') + }) + + it('Basic Details No Alert', () => { + cy.visit('/basic-details/00000000-0000-0000-0000-000000000001') + cy.get('#reviewAlert').should('not.exist') + }) + + it('Warning Details No Alert', () => { + cy.visit('/warning-details/00000000-0000-0000-0000-000000000001') + cy.get('#reviewAlert').should('not.exist') + }) + + it('Warning Type No Alert', () => { + cy.visit('/warning-type/00000000-0000-0000-0000-000000000001') + cy.get('#reviewAlert').should('not.exist') + }) + + it('Next Appointment No Alert', () => { + cy.visit('/next-appointment/00000000-0000-0000-0000-000000000001') + cy.get('#reviewAlert').should('not.exist') + }) + + it('Check your report No Alert', () => { + cy.visit('/check-your-report/00000000-0000-0000-0000-000000000001') + cy.get('#reviewAlert').should('not.exist') + }) +}) diff --git a/server/data/breachNoticeApiClient.ts b/server/data/breachNoticeApiClient.ts index 5f37811..535199b 100644 --- a/server/data/breachNoticeApiClient.ts +++ b/server/data/breachNoticeApiClient.ts @@ -69,6 +69,8 @@ export interface BreachNotice { nextAppointmentSaved: boolean useDefaultAddress: boolean useDefaultReplyAddress: boolean + reviewRequiredDate: Date + reviewEvent: string breachNoticeContactList: BreachNoticeContact[] breachNoticeRequirementList: BreachNoticeRequirement[] optionalNumberChecked: boolean diff --git a/server/views/pages/basic-details.njk b/server/views/pages/basic-details.njk index 23211f1..53b3c30 100644 --- a/server/views/pages/basic-details.njk +++ b/server/views/pages/basic-details.njk @@ -59,6 +59,8 @@
+ {% include "partials/review-required.njk" %} +

Breach Notice - Basic Details

Title and Full Name

diff --git a/server/views/pages/check-your-report.njk b/server/views/pages/check-your-report.njk index 0ca837f..9c71db3 100644 --- a/server/views/pages/check-your-report.njk +++ b/server/views/pages/check-your-report.njk @@ -31,6 +31,8 @@
+ {% include "partials/review-required.njk" %} +

Breach Notice - Check Your Answers

diff --git a/server/views/pages/next-appointment.njk b/server/views/pages/next-appointment.njk index cb2604e..1ccf97f 100644 --- a/server/views/pages/next-appointment.njk +++ b/server/views/pages/next-appointment.njk @@ -33,6 +33,7 @@
+ {% include "partials/review-required.njk" %}

Breach Notice - Next Appointment

diff --git a/server/views/pages/warning-details.njk b/server/views/pages/warning-details.njk index 73f9d8c..57e54e7 100644 --- a/server/views/pages/warning-details.njk +++ b/server/views/pages/warning-details.njk @@ -31,6 +31,7 @@ {% include "pages/side-nav.njk" %}
+ {% include "partials/review-required.njk" %}

{{ applicationName + " - " + breachNotice.breachNoticeTypeDescription + " Details" }}

diff --git a/server/views/pages/warning-type.njk b/server/views/pages/warning-type.njk index c0dc74e..ba03411 100644 --- a/server/views/pages/warning-type.njk +++ b/server/views/pages/warning-type.njk @@ -5,85 +5,87 @@ {% block content %} - {% from "moj/components/side-navigation/macro.njk" import mojSideNavigation %} - {% from "govuk/components/radios/macro.njk" import govukRadios %} - {% from "govuk/components/select/macro.njk" import govukSelect %} - {% from "govuk/components/button/macro.njk" import govukButton %} - {% from "moj/components/date-picker/macro.njk" import mojDatePicker %} - {% from "govuk/components/table/macro.njk" import govukTable %} - {% from "govuk/components/select/macro.njk" import govukSelect %} + {% from "moj/components/side-navigation/macro.njk" import mojSideNavigation %} + {% from "govuk/components/radios/macro.njk" import govukRadios %} + {% from "govuk/components/select/macro.njk" import govukSelect %} + {% from "govuk/components/button/macro.njk" import govukButton %} + {% from "moj/components/date-picker/macro.njk" import mojDatePicker %} + {% from "govuk/components/table/macro.njk" import govukTable %} + {% from "govuk/components/select/macro.njk" import govukSelect %} -
- {% set errorList =[ - { text: errorMessages.warningType.text, href: "#warning-type" } if errorMessages.warningType else None, - { text: errorMessages.sentenceType.text, href: "#sentence-type" } if errorMessages.sentenceType else None - ] | reject("undefined") %} + + {% set errorList =[ + { text: errorMessages.warningType.text, href: "#warning-type" } if errorMessages.warningType else None, + { text: errorMessages.sentenceType.text, href: "#sentence-type" } if errorMessages.sentenceType else None + ] | reject("undefined") %} - {% if errorMessages | length > 0 %} - {% from "govuk/components/error-summary/macro.njk" import govukErrorSummary %} - {{ govukErrorSummary({ titleText: "There is a problem", errorList: errorList }) }} - {% endif %} + {% if errorMessages | length > 0 %} + {% from "govuk/components/error-summary/macro.njk" import govukErrorSummary %} + {{ govukErrorSummary({ titleText: "There is a problem", errorList: errorList }) }} + {% endif %} - -
-
+ +
+
- {% include "pages/side-nav.njk" %} + {% include "pages/side-nav.njk" %} -
+
-
-

Breach Notice - Warning Type

+
+ {% include "partials/review-required.njk" %} - {{ govukRadios({ - id: "warning-type", - name: "warningType", - fieldset: { - legend: { - text: "Select a Warning Type", - isPageHeading: false, - classes: "govuk-fieldset__legend--m" - } - }, - items: warningTypeRadioButtons, - errorMessage: { - text: errorMessages.warningType.text - } if errorMessages.warningType.text - }) }} +

Breach Notice - Warning Type

- {{ govukSelect({ - id: "sentence-type", - name: "sentenceType", - label: { - text: "Select the Sentence Type being enforced", - classes: "govuk-fieldset__legend--m" - }, - items: sentenceTypeSelectItems, - errorMessage: { - text: errorMessages.sentenceType.text - } if errorMessages.sentenceType.text - }) }} + {{ govukRadios({ + id: "warning-type", + name: "warningType", + fieldset: { + legend: { + text: "Select a Warning Type", + isPageHeading: false, + classes: "govuk-fieldset__legend--m" + } + }, + items: warningTypeRadioButtons, + errorMessage: { + text: errorMessages.warningType.text + } if errorMessages.warningType.text + }) }} -
- {{ govukButton({ - text: "Continue", - preventDoubleClick: "true", - type: "submit", - attributes: { - id: "continue-button" - } - }) }} - {{ govukButton({ - text: "Save Progress and Close", - href: "/basic-details/"+breachNotice.id, - classes: "govuk-button--secondary", - preventDoubleClick: "true", - attributes: { - id: "close-button" - } - }) }} -
-
+ {{ govukSelect({ + id: "sentence-type", + name: "sentenceType", + label: { + text: "Select the Sentence Type being enforced", + classes: "govuk-fieldset__legend--m" + }, + items: sentenceTypeSelectItems, + errorMessage: { + text: errorMessages.sentenceType.text + } if errorMessages.sentenceType.text + }) }} + +
+ {{ govukButton({ + text: "Continue", + preventDoubleClick: "true", + type: "submit", + attributes: { + id: "continue-button" + } + }) }} + {{ govukButton({ + text: "Save Progress and Close", + href: "/basic-details/"+breachNotice.id, + classes: "govuk-button--secondary", + preventDoubleClick: "true", + attributes: { + id: "close-button" + } + }) }}
- +
+
+ {% endblock %} diff --git a/server/views/partials/review-required.njk b/server/views/partials/review-required.njk new file mode 100644 index 0000000..fdcd62d --- /dev/null +++ b/server/views/partials/review-required.njk @@ -0,0 +1,24 @@ +{%- from "moj/components/alert/macro.njk" import mojAlert -%} + +{% if breachNotice.reviewRequiredDate != null %} + + {% set messageHtml %} + {% if breachNotice.reviewEvent == 'MERGE' %} + A Merge occurred on {{ breachNotice.reviewRequiredDate | toUserDate() }} in NDelius and important details have chaged. This report should be reviewed before proceeding. Please confirm all information or discard this report. + {% endif %} + {% if breachNotice.reviewEvent == 'UNMERGE' %} + A Unmerge occurred on {{ breachNotice.reviewRequiredDate | toUserDate() }} in NDelius and important details have chaged. This report should be reviewed before proceeding. Please confirm all information or discard this report. + {% endif %} + {% endset -%} + + {{ mojAlert({ + variant: "warning", + title: "Review Required", + showTitleAsHeading: true, + dismissible: false, + html: messageHtml, + attributes: { + id: "reviewAlert" + } + }) }} +{% endif %} diff --git a/wiremock/mappings/breach-notice-api.json b/wiremock/mappings/breach-notice-api.json index b672b00..5ae71e2 100644 --- a/wiremock/mappings/breach-notice-api.json +++ b/wiremock/mappings/breach-notice-api.json @@ -749,6 +749,156 @@ }, "transformers": ["response-template"] } + }, + { + "request": { + "url": "/breach-notice-api/breach-notice/00000000-0000-0000-0000-100000000101", + "method": "GET" + }, + "response": { + "status": 200, + "jsonBody": { + "id": "00000000-0000-0000-0000-100000000101", + "crn": "X100504", + "titleAndFullName": "Mr Billy The Kid", + "dateOfLetter": "2025-01-01", + "referenceNumber": "REF0001", + "responseRequiredByDate": "2025-01-01", + "breachNoticeTypeCode": "BW", + "breachNoticeTypeDescription": "Breach Warning", + "breachConditionTypeCode": "BRE", + "breachConditionTypeDescription": "Breach", + "breachSentenceTypeCode": "CO", + "breachSentenceTypeDescription": "Community Order(s)", + "responsibleOfficer": "An Officer", + "contactNumber": "0892929187", + "nextAppointmentType": "App Type", + "nextAppointmentDate": "2025-01-01T12:34:56", + "nextAppointmentLocation": "Location", + "nextAppointmentOfficer": "Officer", + "nextAppointmentContact": "0292827177", + "completedDate": null, + "offenderAddress": { + "addressId": 12345, + "type": "Postal", + "buildingName": null, + "buildingNumber": "21", + "streetName": "Postal Street", + "district": "Postal District", + "townCity": "PostCity", + "county": "Postal County", + "postcode": "NE30 3ZZ" + }, + "replyAddress": { + "addressId": 33333, + "type": "Postal", + "buildingName": null, + "buildingNumber": "21", + "streetName": "Reply Street", + "district": "Reply District", + "townCity": "Reply City", + "county": "Reply County", + "postcode": "NE22 3AA" + }, + "basicDetailsSaved": true, + "warningTypeSaved": true, + "warningDetailsSaved": true, + "nextAppointmentSaved": true, + "useDefaultAddress": true, + "useDefaultReplyAddress": true, + "reviewRequiredDate": "2025-01-01T12:34:56", + "reviewEvent": "MERGE", + "breachNoticeContactList": [ + { + "contactId": 1 + } + ], + "breachNoticeRequirementList": [ + { + "requirementId": 1 + } + ] + }, + "headers": { + "Content-Type": "application/json;charset=UTF-8" + }, + "transformers": ["response-template"] + } + }, + { + "request": { + "url": "/breach-notice-api/breach-notice/00000000-0000-0000-0000-100000000102", + "method": "GET" + }, + "response": { + "status": 200, + "jsonBody": { + "id": "00000000-0000-0000-0000-100000000102", + "crn": "X100504", + "titleAndFullName": "Mr Billy The Kid", + "dateOfLetter": "2025-01-01", + "referenceNumber": "REF0001", + "responseRequiredByDate": "2025-01-01", + "breachNoticeTypeCode": "BW", + "breachNoticeTypeDescription": "Breach Warning", + "breachConditionTypeCode": "BRE", + "breachConditionTypeDescription": "Breach", + "breachSentenceTypeCode": "CO", + "breachSentenceTypeDescription": "Community Order(s)", + "responsibleOfficer": "An Officer", + "contactNumber": "0892929187", + "nextAppointmentType": "App Type", + "nextAppointmentDate": "2025-01-01T12:34:56", + "nextAppointmentLocation": "Location", + "nextAppointmentOfficer": "Officer", + "nextAppointmentContact": "0292827177", + "completedDate": null, + "offenderAddress": { + "addressId": 12345, + "type": "Postal", + "buildingName": null, + "buildingNumber": "21", + "streetName": "Postal Street", + "district": "Postal District", + "townCity": "PostCity", + "county": "Postal County", + "postcode": "NE30 3ZZ" + }, + "replyAddress": { + "addressId": 33333, + "type": "Postal", + "buildingName": null, + "buildingNumber": "21", + "streetName": "Reply Street", + "district": "Reply District", + "townCity": "Reply City", + "county": "Reply County", + "postcode": "NE22 3AA" + }, + "basicDetailsSaved": true, + "warningTypeSaved": true, + "warningDetailsSaved": true, + "nextAppointmentSaved": true, + "useDefaultAddress": true, + "useDefaultReplyAddress": true, + "reviewRequiredDate": "2025-01-01T12:34:56", + "reviewEvent": "UNMERGE", + "breachNoticeContactList": [ + { + "contactId": 1 + } + ], + "breachNoticeRequirementList": [ + { + "requirementId": 1 + } + ] + }, + "headers": { + "Content-Type": "application/json;charset=UTF-8" + }, + "transformers": ["response-template"] + } } ] }