diff --git a/app/presenters/return-requirements/check.presenter.js b/app/presenters/return-requirements/check.presenter.js index b4e79b785f..c8f62ab9ac 100644 --- a/app/presenters/return-requirements/check.presenter.js +++ b/app/presenters/return-requirements/check.presenter.js @@ -5,7 +5,7 @@ * @module CheckPresenter */ -const { formatLongDate } = require('../base.presenter.js') +const { formatAbstractionDate, formatLongDate } = require('../base.presenter.js') const { returnRequirementReasons } = require('../../lib/static-lookups.lib.js') function go (session) { @@ -26,6 +26,14 @@ function go (session) { } } +function _abstractionPeriod (abstractionPeriod) { + const { 'start-abstraction-period-day': startDay, 'start-abstraction-period-month': startMonth, 'end-abstraction-period-day': endDay, 'end-abstraction-period-month': endMonth } = abstractionPeriod + const startDate = formatAbstractionDate(startDay, startMonth) + const endDate = formatAbstractionDate(endDay, endMonth) + + return `From ${startDate} to ${endDate}` +} + function _reasonLink (sessionId, journey) { if (journey === 'returns-required') { return `/system/return-requirements/${sessionId}/reason` @@ -39,19 +47,29 @@ function _requirements (session) { const completedRequirements = [] - for (const requirement of requirements) { - const { siteDescription, agreementsExceptions } = requirement - + for (const [index, requirement] of requirements.entries()) { + const { agreementsExceptions } = requirement // NOTE: We determine a requirement is complete because agreement exceptions is populated and it is the last step in // the journey if (agreementsExceptions) { - completedRequirements.push({ siteDescription }) + completedRequirements.push(_mapRequirement(requirement, index)) } } return completedRequirements } +function _mapRequirement (requirement, index) { + return { + abstractionPeriod: _abstractionPeriod(requirement.abstractionPeriod), + frequencyCollected: requirement.frequencyCollected, + frequencyReported: requirement.frequencyReported, + index, + purposes: 'purpose', + siteDescription: requirement.siteDescription + } +} + function _startDate (session) { const { licence, startDateOptions, startDateDay, startDateMonth, startDateYear } = session diff --git a/app/views/return-requirements/check.njk b/app/views/return-requirements/check.njk index 88630944f6..309e9c33d4 100644 --- a/app/views/return-requirements/check.njk +++ b/app/views/return-requirements/check.njk @@ -108,18 +108,162 @@ preventDoubleClick: true }) }} - {% for requirement in requirements %} - {# Set an easier to use index #} - {% set rowIndex = loop.index0 %}
-

{{requirement.siteDescription}}

- {{ govukButton({ - text: "Remove requirement", - classes: "govuk-button--warning", - preventDoubleClick: true, - href: "/system/return-requirements/" + sessionId + "/remove/" + rowIndex - }) }} + {{ govukSummaryList({ + card: { + title: { + text: requirement.siteDescription + } + }, + classes: "govuk-summary-list--no-border", + rows: [ + { + key: { + text: "Purpose" + }, + value: { + html: "requirement.purposes" + }, + actions: { + items: [ + { + href: "purpose/" + requirement.index , + text: "Change", + visuallyHiddenText: "Purpose" + } + ] + } + }, + { + key: { + text: "Point" + }, + value: { + html: "requirement.points" + }, + actions: { + items: [ + { + href: "points/" + requirement.index , + text: "Change", + visuallyHiddenText: "Point" + } + ] + } + }, + { + key: { + text: "Abstraction period" + }, + value: { + html: requirement.abstractionPeriod + }, + actions: { + items: [ + { + href: "abstraction-period/" + requirement.index , + text: "Change", + visuallyHiddenText: "Abstraction period" + } + ] + } + }, + { + key: { + text: "Returns cycle" + }, + value: { + html: "requirement.returnsCycle" + }, + actions: { + items: [ + { + href: "returns-cycle/" + requirement.index , + text: "Change", + visuallyHiddenText: "Returns cycle" + } + ] + } + }, + { + key: { + text: "Site description" + }, + value: { + html: requirement.siteDescription + }, + actions: { + items: [ + { + href: "site-description/" + requirement.index , + text: "Change", + visuallyHiddenText: "Site description" + } + ] + } + }, + { + key: { + text: "Collection" + }, + value: { + html: requirement.frequencyCollected | capitalize + }, + actions: { + items: [ + { + href: "frequency-collected/" + requirement.index , + text: "Change", + visuallyHiddenText: "Collection" + } + ] + } + }, + { + key: { + text: "Reporting" + }, + value: { + html: requirement.frequencyReported | capitalize + }, + actions: { + items: [ + { + href: "frequency-reported/" + requirement.index , + text: "Change", + visuallyHiddenText: "Reporting" + } + ] + } + }, + { + key: { + text: "Agreements exceptions" + }, + value: { + html: "requirement.agreementsExceptions" + }, + actions: { + items: [ + { + href: "agreements-exceptions/" + requirement.index , + text: "Change", + visuallyHiddenText: "Agreements exception" + } + ] + } + } + ] + }) }} + {% if requirements.length >= 2 %} + {{ govukButton({ + text: "Remove requirement", + classes: "govuk-button--warning", + preventDoubleClick: true, + href: "/system/return-requirements/" + sessionId + "/remove/" + requirement.index + }) }} + {% endif %}
{% endfor %} diff --git a/test/presenters/return-requirements/check.presenter.test.js b/test/presenters/return-requirements/check.presenter.test.js index a773e051fa..8dc5ff9b3c 100644 --- a/test/presenters/return-requirements/check.presenter.test.js +++ b/test/presenters/return-requirements/check.presenter.test.js @@ -12,8 +12,31 @@ const CheckPresenter = require('../../../app/presenters/return-requirements/chec describe('Return Requirements - Check presenter', () => { let session + let requirement beforeEach(() => { + requirement = { + points: [ + '286' + ], + purposes: [ + '772136d1-9184-417b-90cd-91053287d1df' + ], + returnsCycle: 'summer', + siteDescription: 'A place in the sun', + abstractionPeriod: { + 'end-abstraction-period-day': '01', + 'end-abstraction-period-month': '03', + 'start-abstraction-period-day': '01', + 'start-abstraction-period-month': '06' + }, + frequencyReported: 'daily', + frequencyCollected: 'daily', + agreementsExceptions: [ + 'gravity-fill' + ] + } + session = { id: '61e07498-f309-4829-96a9-72084a54996d', checkPageVisited: false, @@ -26,7 +49,7 @@ describe('Return Requirements - Check presenter', () => { startDate: '2022-04-01T00:00:00.000Z' }, journey: 'returns-required', - requirements: [{}], + requirements: [{ ...requirement }], startDateOptions: 'licenceStartDate', reason: 'major-change' } @@ -44,7 +67,14 @@ describe('Return Requirements - Check presenter', () => { pageTitle: 'Check the return requirements for Turbo Kid', reason: 'Major change', reasonLink: '/system/return-requirements/61e07498-f309-4829-96a9-72084a54996d/reason', - requirements: [], + requirements: [{ + abstractionPeriod: 'From 1 June to 1 March', + frequencyCollected: 'daily', + frequencyReported: 'daily', + index: 0, + purposes: 'purpose', + siteDescription: 'A place in the sun' + }], sessionId: '61e07498-f309-4829-96a9-72084a54996d', startDate: '1 January 2023', userEmail: 'No notes added' @@ -187,4 +217,33 @@ describe('Return Requirements - Check presenter', () => { }) }) }) + + describe("the 'requirements' property", () => { + describe('when the requirement has agreements exceptions', () => { + it('correctly returns and requirement with agreements exceptions', () => { + const result = CheckPresenter.go(session) + + expect(result.requirements).to.equal([{ + abstractionPeriod: 'From 1 June to 1 March', + frequencyCollected: 'daily', + frequencyReported: 'daily', + index: 0, + purposes: 'purpose', + siteDescription: 'A place in the sun' + } + ]) + }) + }) + describe('when the requirement does not have any agreements exceptions', () => { + beforeEach(() => { + delete session.requirements[0].agreementsExceptions + }) + + it('correctly does not return the requirement', () => { + const result = CheckPresenter.go(session) + + expect(result.requirements).to.equal([]) + }) + }) + }) })