@defra-fish/gafl-webapp-service 1.61.0-rc.9 → 1.62.0-rc.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +7 -7
- package/src/handlers/__tests__/authentication-handler.redirect.spec.js +6 -4
- package/src/handlers/authentication-handler.js +4 -4
- package/src/locales/cy.json +20 -10
- package/src/locales/en.json +20 -10
- package/src/pages/concessions/disability/__tests__/disability-concession.spec.js +7 -21
- package/src/pages/concessions/disability/disability-concession.njk +12 -30
- package/src/pages/concessions/disability/route.js +0 -5
- package/src/pages/concessions/disability/update-transaction.js +1 -1
- package/src/pages/layout/layout.njk +94 -95
- package/src/pages/renewals/identify/__tests__/{identity.spec.js → identify.spec.js} +8 -10
- package/src/pages/renewals/identify/identify.njk +1 -5
- package/src/pages/renewals/identify/route.js +1 -1
- package/src/pages/renewals/licence-not-found/__tests__/route.spec.js +22 -0
- package/src/pages/renewals/licence-not-found/licence-not-found.njk +23 -0
- package/src/pages/renewals/licence-not-found/route.js +4 -0
- package/src/pages/summary/licence-summary/__tests__/__snapshots__/route.spec.js.snap +5 -5
- package/src/pages/summary/licence-summary/__tests__/route.spec.js +3 -3
- package/src/pages/summary/licence-summary/route.js +11 -2
- package/src/routes/journey-definition.js +7 -1
- package/src/routes/routes.js +3 -1
- package/src/services/address-lookup/address-lookup-service.js +1 -1
- package/src/uri.js +1 -0
package/package.json
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@defra-fish/gafl-webapp-service",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.62.0-rc.0",
|
|
4
4
|
"description": "The websales frontend for the GAFL service",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"engines": {
|
|
7
|
-
"node": ">=
|
|
7
|
+
"node": ">=20"
|
|
8
8
|
},
|
|
9
9
|
"keywords": [
|
|
10
10
|
"rod",
|
|
@@ -36,8 +36,8 @@
|
|
|
36
36
|
"prepare": "gulp --gulpfile build/gulpfile.cjs"
|
|
37
37
|
},
|
|
38
38
|
"dependencies": {
|
|
39
|
-
"@defra-fish/business-rules-lib": "1.
|
|
40
|
-
"@defra-fish/connectors-lib": "1.
|
|
39
|
+
"@defra-fish/business-rules-lib": "1.62.0-rc.0",
|
|
40
|
+
"@defra-fish/connectors-lib": "1.62.0-rc.0",
|
|
41
41
|
"@defra/hapi-gapi": "^2.0.0",
|
|
42
42
|
"@hapi/boom": "^9.1.2",
|
|
43
43
|
"@hapi/catbox-redis": "^6.0.2",
|
|
@@ -52,12 +52,12 @@
|
|
|
52
52
|
"debug": "^4.3.3",
|
|
53
53
|
"disinfect": "^1.1.0",
|
|
54
54
|
"find": "^0.3.0",
|
|
55
|
-
"govuk-frontend": "^5.2
|
|
55
|
+
"govuk-frontend": "^5.10.2",
|
|
56
56
|
"hapi-i18n": "^3.0.1",
|
|
57
57
|
"joi": "^17.6.0",
|
|
58
58
|
"moment": "^2.29.1",
|
|
59
59
|
"moment-timezone": "^0.5.34",
|
|
60
|
-
"node-fetch": "^2.
|
|
60
|
+
"node-fetch": "^2.7.0",
|
|
61
61
|
"nunjucks": "^3.2.3",
|
|
62
62
|
"openid-client": "^4.9.1",
|
|
63
63
|
"semver": "^7.3.5",
|
|
@@ -79,5 +79,5 @@
|
|
|
79
79
|
"./gafl-jest-matchers.js"
|
|
80
80
|
]
|
|
81
81
|
},
|
|
82
|
-
"gitHead": "
|
|
82
|
+
"gitHead": "d56e1a0d0f4b22f1dded800c0ed511b737cb91a7"
|
|
83
83
|
}
|
|
@@ -1,13 +1,15 @@
|
|
|
1
1
|
import handler from '../authentication-handler.js'
|
|
2
|
-
import {
|
|
2
|
+
import { LICENCE_NOT_FOUND, CONTROLLER, RENEWAL_INACTIVE } from '../../uri.js'
|
|
3
3
|
import { salesApi } from '@defra-fish/connectors-lib'
|
|
4
4
|
|
|
5
5
|
jest.mock('../../processors/uri-helper.js')
|
|
6
6
|
jest.mock('../page-handler.js', () => ({ errorShimm: () => {} }))
|
|
7
7
|
jest.mock('../../uri.js', () => ({
|
|
8
8
|
IDENTIFY: {
|
|
9
|
-
page: 'identify page'
|
|
10
|
-
|
|
9
|
+
page: 'identify page'
|
|
10
|
+
},
|
|
11
|
+
LICENCE_NOT_FOUND: {
|
|
12
|
+
uri: Symbol('licence not found uri')
|
|
11
13
|
},
|
|
12
14
|
CONTROLLER: {
|
|
13
15
|
uri: Symbol('controller uri')
|
|
@@ -40,7 +42,7 @@ const getSampleAuthResult = (description = 'M', durationMagnitude = 12) => ({
|
|
|
40
42
|
})
|
|
41
43
|
|
|
42
44
|
describe.each([
|
|
43
|
-
[false, '
|
|
45
|
+
[false, 'licence not found', LICENCE_NOT_FOUND.uri, 1],
|
|
44
46
|
[getSampleAuthResult(), 'controller', CONTROLLER.uri, -1],
|
|
45
47
|
[getSampleAuthResult(), 'renewal inactive', RENEWAL_INACTIVE.uri, 61],
|
|
46
48
|
[getSampleAuthResult(), 'renewal inactive', RENEWAL_INACTIVE.uri, -61],
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { setUpCacheFromAuthenticationResult, setUpPayloads } from '../processors/renewals-write-cache.js'
|
|
2
|
-
import { IDENTIFY,
|
|
2
|
+
import { IDENTIFY, RENEWAL_INACTIVE, LICENCE_NOT_FOUND, CONTROLLER } from '../uri.js'
|
|
3
3
|
import { RENEWAL_ERROR_REASON } from '../constants.js'
|
|
4
4
|
import { validation, RENEW_BEFORE_DAYS, RENEW_AFTER_DAYS, SERVICE_LOCAL_TIME } from '@defra-fish/business-rules-lib'
|
|
5
5
|
import Joi from 'joi'
|
|
@@ -8,7 +8,7 @@ import moment from 'moment-timezone'
|
|
|
8
8
|
|
|
9
9
|
/**
|
|
10
10
|
* Handler to authenticate the user on the easy renewals journey. It will
|
|
11
|
-
* (1) Redirect
|
|
11
|
+
* (1) Redirect to an error page where there is an authentication failure
|
|
12
12
|
* (2) Redirect to an error page where the renewal has expired
|
|
13
13
|
* (3) Redirect back to an error page where a licence is already issued
|
|
14
14
|
* (4) Establish the session cache and redirect into the controller where the user is authenticated
|
|
@@ -43,9 +43,9 @@ export default async (request, h) => {
|
|
|
43
43
|
|
|
44
44
|
if (!authenticationResult) {
|
|
45
45
|
payload.referenceNumber = referenceNumber
|
|
46
|
-
await request.cache().helpers.page.setCurrentPermission(IDENTIFY.page, { payload
|
|
46
|
+
await request.cache().helpers.page.setCurrentPermission(IDENTIFY.page, { payload })
|
|
47
47
|
await request.cache().helpers.status.setCurrentPermission({ referenceNumber, authentication: { authorized: false } })
|
|
48
|
-
return h.redirectWithLanguageCode(
|
|
48
|
+
return h.redirectWithLanguageCode(LICENCE_NOT_FOUND.uri)
|
|
49
49
|
} else {
|
|
50
50
|
// Test for 12 month licence
|
|
51
51
|
const daysDiff = moment(authenticationResult.permission.endDate).diff(moment().tz(SERVICE_LOCAL_TIME).startOf('day'), 'days')
|
package/src/locales/cy.json
CHANGED
|
@@ -254,7 +254,8 @@
|
|
|
254
254
|
"cookies_survey_subheading": "Arolwg o’n perfformiad",
|
|
255
255
|
"cookies_title": "Cwcis",
|
|
256
256
|
"cost": "Cost",
|
|
257
|
-
"disability_concession_12_month": "
|
|
257
|
+
"disability_concession_12_month": "Mae deiliaid trwydded blwyddyn yn gymwys ar gyfer consesiwn os byddant yn derbyn Taliad Anibyniaeth Personol (PIP), Lwfans Byw i’r Anabl (DLA) neu wedi bodloni’r meini prawf ar gyfer ",
|
|
258
|
+
"disability_concession_12_month_link": "Bathodyn Glas (yn agor mewn tab newydd)",
|
|
258
259
|
"disability_concession_badge_error_msg": "Nodwch rif Bathodyn Glas deiliad y drwydded",
|
|
259
260
|
"disability_concession_error_choose_option": "Dewiswch un o’r opsiynau.",
|
|
260
261
|
"disability_concession_error_ni_empty": "Nodwch Rif Yswiriant Gwladol deiliad y drwydded",
|
|
@@ -264,12 +265,15 @@
|
|
|
264
265
|
"disability_concession_ni_hint": "Mae hwn ar eich cerdyn Yswiriant Gwladol, llythyr budd-daliadau, slip talu neu P60. Er enghraifft 'QQ 12 34 56 C'",
|
|
265
266
|
"disability_concession_ni_label_jr": "Rhif Yswiriant Gwladol neu Gyfeirnod Plant",
|
|
266
267
|
"disability_concession_ni_label": "Rhif Yswiriant Gwladol",
|
|
267
|
-
"
|
|
268
|
-
"
|
|
269
|
-
"
|
|
270
|
-
"
|
|
271
|
-
"
|
|
272
|
-
"
|
|
268
|
+
"disability_concession_radio_badge_self": "Ydw, yn meddu ar Fathodyn Glas neu wedi bodloni’r meini prawf",
|
|
269
|
+
"disability_concession_radio_badge_bobo": "Ydyn, yn meddu ar Fathodyn Glas neu wedi bodloni’r meini prawf",
|
|
270
|
+
"disability_concession_radio_dla": "neu’r Lwfans Byw i’r Anabl (DLA)",
|
|
271
|
+
"disability_concession_radio_no_self": "Nac ydw",
|
|
272
|
+
"disability_concession_radio_no_bobo": "Nac ydyn",
|
|
273
|
+
"disability_concession_radio_pip_self": "Ydw, Taliad Anibyniaeth Personol (PIP)",
|
|
274
|
+
"disability_concession_radio_pip_bobo": "Ydyn, Taliad Anibyniaeth Personol (PIP)",
|
|
275
|
+
"disability_concession_title_bobo": "Ydyn nhw’n gymwys ar gyfer consesiwn?",
|
|
276
|
+
"disability_concession_title_self": "Ydych chi’n gymwys ar gyfer consesiwn?",
|
|
273
277
|
"date_day": "Diwrnod",
|
|
274
278
|
"dob_entry_hint": "Er enghraifft, 23 11 1979",
|
|
275
279
|
"dob_error_date_real": "Mae’n rhaid i’r dyddiad geni fod yn ddyddiad dilys",
|
|
@@ -328,8 +332,6 @@
|
|
|
328
332
|
"identify_error_date_real": "Mae’n rhaid i’r dyddiad geni fod yn ddyddiad dilys",
|
|
329
333
|
"identify_error_empty_postcode": "Nid ydych wedi nodi cod post",
|
|
330
334
|
"identify_error_empty": "Rhowch chwe nodyn olaf eich trwydded",
|
|
331
|
-
"identify_error_invalid_1": "Nid oes gennym gofnod o rif trwydded sy'n gorffen gyda ",
|
|
332
|
-
"identify_error_invalid_2": " sy’n cyd-fynd â'r manylion hyn.",
|
|
333
335
|
"identify_error_missing_day": "Mae’n rhaid i’r dyddiad geni gynnwys diwrnod",
|
|
334
336
|
"identify_error_missing_month": "Mae’n rhaid i’r dyddiad geni gynnwys mis",
|
|
335
337
|
"identify_error_missing_year": "Mae’n rhaid i’r dyddiad geni gynnwys blwyddyn",
|
|
@@ -416,6 +418,13 @@
|
|
|
416
418
|
"licence_length_title_other": "Am ba hyd y maent am gael y drwydded?",
|
|
417
419
|
"licence_length_title_you": "Am ba hyd yr hoffech chi gael y drwydded?",
|
|
418
420
|
"licence_num": "Rhif trwydded",
|
|
421
|
+
"licence_not_found_title": "Ni allwn ddod o hyd i drwydded sy’n cyfateb â'r manylion a roddwyd",
|
|
422
|
+
"licence_not_found_body_1": "Gwiriwch eich bod wedi mewnbynnu’r manylion yn gywir - ",
|
|
423
|
+
"licence_not_found_body_previous_page": "ewch yn ôl i’r dudalen flaenorol",
|
|
424
|
+
"licence_not_found_body_2": "Os byddwch yn parhau i weld y dudalen hon gallwch ofyn am gymorth drwy e-bostio ",
|
|
425
|
+
"licence_not_found_body_ea_link": "enquiries@environment-agency.gov.uk",
|
|
426
|
+
"licence_not_found_body_3": " neu ffonio 03708 506 506 (8am - 6pm o ddydd Llun i ddydd Gwener, ac eithrio gwyliau cyhoeddus). ",
|
|
427
|
+
"licence_not_found_body_call_charges_link": "Gallwch weld costau’r galwadau yma (yn agor mewn tab newydd)",
|
|
419
428
|
"licence_start_days": " diwrnod nesaf",
|
|
420
429
|
"licence_start_enter_todays_date": "Rhowch ddyddiad heddiw os ydych chi am i’r drwydded 1 diwrnod neu 8 diwrnod ddechrau yn hwyrach heddiw.",
|
|
421
430
|
"licence_start_error_date_real": "Mae’n rhaid i ddyddiad dechrau’r drwydded fod yn ddyddiad dilys",
|
|
@@ -462,7 +471,8 @@
|
|
|
462
471
|
"licence_start_title_other": "Dyddiad dechrau’r drwydded?",
|
|
463
472
|
"licence_start_title_you": "Pryd yr hoffech i'ch trwydded ddechrau?",
|
|
464
473
|
"licence_start_today_or_within": "Gall y drwydded ddechrau heddiw neu unrhyw ddiwrnod o fewn y ",
|
|
465
|
-
"
|
|
474
|
+
"licence_summary_blue_badge": "Bathodyn Glas",
|
|
475
|
+
"licence_summary_blue_badge_eligible": "Cymwys",
|
|
466
476
|
"licence_summary_change": "Newid",
|
|
467
477
|
"licence_summary_disability_concession": "Consesiwn anabledd",
|
|
468
478
|
"licence_summary_dob": "Dyddiad geni",
|
package/src/locales/en.json
CHANGED
|
@@ -254,7 +254,8 @@
|
|
|
254
254
|
"cookies_survey_subheading": "Our performance survey",
|
|
255
255
|
"cookies_title": "Cookies",
|
|
256
256
|
"cost": "Cost",
|
|
257
|
-
"disability_concession_12_month": "12 month licence holders
|
|
257
|
+
"disability_concession_12_month": "12 month licence holders are eligible for a concession if they receive Personal Independence Payment (PIP), Disability Living Allowance (DLA), have or meet the criteria for a ",
|
|
258
|
+
"disability_concession_12_month_link": "Blue Badge (opens in new tab)",
|
|
258
259
|
"disability_concession_badge_error_msg": "Enter the licence holder’s Blue Badge number",
|
|
259
260
|
"disability_concession_error_choose_option": "Choose one of the options.",
|
|
260
261
|
"disability_concession_error_ni_empty": "Enter the licence holder’s National Insurance number",
|
|
@@ -264,12 +265,15 @@
|
|
|
264
265
|
"disability_concession_ni_hint": "This can be found on a National Insurance card, benefit letter, payslip or P60. For example 'QQ 12 34 56 C'",
|
|
265
266
|
"disability_concession_ni_label_jr": "National Insurance or Child Reference number",
|
|
266
267
|
"disability_concession_ni_label": "National Insurance number",
|
|
267
|
-
"
|
|
268
|
-
"
|
|
269
|
-
"
|
|
270
|
-
"
|
|
271
|
-
"
|
|
272
|
-
"
|
|
268
|
+
"disability_concession_radio_badge_self": "Yes, have or meet the eligibility criteria for Blue Badge",
|
|
269
|
+
"disability_concession_radio_badge_bobo": "Yes, have or meet the eligibility criteria for Blue Badge",
|
|
270
|
+
"disability_concession_radio_dla": "Or Disability Living Allowance (DLA)",
|
|
271
|
+
"disability_concession_radio_no_self": "No",
|
|
272
|
+
"disability_concession_radio_no_bobo": "No",
|
|
273
|
+
"disability_concession_radio_pip_self": "Yes, Personal Independence Payment (PIP)",
|
|
274
|
+
"disability_concession_radio_pip_bobo": "Yes, Personal Independence Payment (PIP)",
|
|
275
|
+
"disability_concession_title_bobo": "Are they eligible for a concession?",
|
|
276
|
+
"disability_concession_title_self": "Are you eligible for a concession?",
|
|
273
277
|
"date_day": "Day",
|
|
274
278
|
"dob_entry_hint": "For example, 23 11 1979",
|
|
275
279
|
"dob_error_date_real": "Date of birth must be a real date",
|
|
@@ -328,8 +332,6 @@
|
|
|
328
332
|
"identify_error_date_real": "Date of birth must be a real date",
|
|
329
333
|
"identify_error_empty_postcode": "You did not enter a postcode",
|
|
330
334
|
"identify_error_empty": "Enter the last six characters of your licence number",
|
|
331
|
-
"identify_error_invalid_1": "We do not have any record of a licence number ending ",
|
|
332
|
-
"identify_error_invalid_2": " matching these details.",
|
|
333
335
|
"identify_error_missing_day": "Date of birth must include a day",
|
|
334
336
|
"identify_error_missing_month": "Date of birth must include a month",
|
|
335
337
|
"identify_error_missing_year": "Date of birth must include a year",
|
|
@@ -415,6 +417,13 @@
|
|
|
415
417
|
"licence_length_one_day": "1 day licences are valid for 24 hours from the start time that you select.",
|
|
416
418
|
"licence_length_title_other": "How long do they want the licence for?",
|
|
417
419
|
"licence_length_title_you": "How long do you want your licence for?",
|
|
420
|
+
"licence_not_found_title": "We cannot find a licence matching the details you provided",
|
|
421
|
+
"licence_not_found_body_1": "Check you have entered your details correctly - ",
|
|
422
|
+
"licence_not_found_body_previous_page": "go back to the previous page",
|
|
423
|
+
"licence_not_found_body_2": "If you keep seeing this page you can get help by emailing ",
|
|
424
|
+
"licence_not_found_body_ea_link": "enquiries@environment-agency.gov.uk",
|
|
425
|
+
"licence_not_found_body_3": " or calling 03708 506 506 (8am to 6pm, Monday to Friday, except public holidays). ",
|
|
426
|
+
"licence_not_found_body_call_charges_link": "View call charges (opens in new tab)",
|
|
418
427
|
"licence_num": "Licence number",
|
|
419
428
|
"licence_start_days": " days",
|
|
420
429
|
"licence_start_enter_todays_date": "Enter today’s date if you want the 1-day or 8-day licence to start later today.",
|
|
@@ -462,7 +471,8 @@
|
|
|
462
471
|
"licence_start_title_other": "When should the licence start?",
|
|
463
472
|
"licence_start_title_you": "When would you like your licence to start?",
|
|
464
473
|
"licence_start_today_or_within": "The licence can start today or any day within the next ",
|
|
465
|
-
"
|
|
474
|
+
"licence_summary_blue_badge": "Blue Badge",
|
|
475
|
+
"licence_summary_blue_badge_eligible": "Eligible",
|
|
466
476
|
"licence_summary_change": "Change",
|
|
467
477
|
"licence_summary_disability_concession": "Disability concession",
|
|
468
478
|
"licence_summary_dob": "Date of birth",
|
|
@@ -31,15 +31,6 @@ describe('The disability concession page', () => {
|
|
|
31
31
|
expect(response.headers.location).toHaveValidPathFor(DISABILITY_CONCESSION.uri)
|
|
32
32
|
})
|
|
33
33
|
|
|
34
|
-
it('redirects back to itself on posting blue badge with an empty blue number', async () => {
|
|
35
|
-
const response = await injectWithCookies('POST', DISABILITY_CONCESSION.uri, {
|
|
36
|
-
'disability-concession': disabilityConcessionTypes.blueBadge,
|
|
37
|
-
'blue-badge-number': ''
|
|
38
|
-
})
|
|
39
|
-
expect(response.statusCode).toBe(302)
|
|
40
|
-
expect(response.headers.location).toHaveValidPathFor(DISABILITY_CONCESSION.uri)
|
|
41
|
-
})
|
|
42
|
-
|
|
43
34
|
it('on setting a correct ni number it redirects to the licence-to-start page', async () => {
|
|
44
35
|
const response = await injectWithCookies('POST', DISABILITY_CONCESSION.uri, {
|
|
45
36
|
'disability-concession': disabilityConcessionTypes.pipDla,
|
|
@@ -62,32 +53,28 @@ describe('The disability concession page', () => {
|
|
|
62
53
|
})
|
|
63
54
|
})
|
|
64
55
|
|
|
65
|
-
it('on
|
|
56
|
+
it('on selecting blue badge or meets criteria of bb, it causes a redirect to the licence-to-start page', async () => {
|
|
66
57
|
const response = await injectWithCookies('POST', DISABILITY_CONCESSION.uri, {
|
|
67
|
-
'disability-concession': disabilityConcessionTypes.blueBadge
|
|
68
|
-
'blue-badge-number': '1234'
|
|
58
|
+
'disability-concession': disabilityConcessionTypes.blueBadge
|
|
69
59
|
})
|
|
70
60
|
expect(response.statusCode).toBe(302)
|
|
71
61
|
expect(response.headers.location).toHaveValidPathFor(LICENCE_TO_START.uri)
|
|
72
62
|
})
|
|
73
63
|
|
|
74
|
-
it('on
|
|
64
|
+
it('on selecting blue badge or meets criteria of bb, it adds a disabled concession to the cache', async () => {
|
|
75
65
|
await injectWithCookies('POST', DISABILITY_CONCESSION.uri, {
|
|
76
|
-
'disability-concession': disabilityConcessionTypes.blueBadge
|
|
77
|
-
'blue-badge-number': '1234'
|
|
66
|
+
'disability-concession': disabilityConcessionTypes.blueBadge
|
|
78
67
|
})
|
|
79
68
|
const { payload } = await injectWithCookies('GET', TEST_TRANSACTION.uri)
|
|
80
69
|
expect(concessionHelper.hasDisabled(JSON.parse(payload).permissions[0])).toBeTruthy()
|
|
81
70
|
expect(JSON.parse(payload).permissions[0].concessions[0].proof).toEqual({
|
|
82
|
-
type: CONCESSION_PROOF.blueBadge
|
|
83
|
-
referenceNumber: '1234'
|
|
71
|
+
type: CONCESSION_PROOF.blueBadge
|
|
84
72
|
})
|
|
85
73
|
})
|
|
86
74
|
|
|
87
75
|
it('on setting a disability concession and changing to a 8 day licence and back, the concession is restored', async () => {
|
|
88
76
|
await injectWithCookies('POST', DISABILITY_CONCESSION.uri, {
|
|
89
|
-
'disability-concession': disabilityConcessionTypes.blueBadge
|
|
90
|
-
'blue-badge-number': '1234'
|
|
77
|
+
'disability-concession': disabilityConcessionTypes.blueBadge
|
|
91
78
|
})
|
|
92
79
|
await injectWithCookies('POST', LICENCE_LENGTH.uri, { 'licence-length': '8D' })
|
|
93
80
|
const { payload } = await injectWithCookies('GET', TEST_TRANSACTION.uri)
|
|
@@ -96,8 +83,7 @@ describe('The disability concession page', () => {
|
|
|
96
83
|
const { payload: payload2 } = await injectWithCookies('GET', TEST_TRANSACTION.uri)
|
|
97
84
|
expect(concessionHelper.hasDisabled(JSON.parse(payload2).permissions[0])).toBeTruthy()
|
|
98
85
|
expect(JSON.parse(payload2).permissions[0].concessions[0].proof).toEqual({
|
|
99
|
-
type: CONCESSION_PROOF.blueBadge
|
|
100
|
-
referenceNumber: '1234'
|
|
86
|
+
type: CONCESSION_PROOF.blueBadge
|
|
101
87
|
})
|
|
102
88
|
})
|
|
103
89
|
|
|
@@ -2,8 +2,9 @@
|
|
|
2
2
|
{% from "radios/macro.njk" import govukRadios %}
|
|
3
3
|
{% from "input/macro.njk" import govukInput %}
|
|
4
4
|
|
|
5
|
-
{% set title = mssgs.
|
|
5
|
+
{% set title = mssgs.disability_concession_title_self if data.isLicenceForYou else mssgs.disability_concession_title_bobo %}
|
|
6
6
|
{% set describedByTag = "ni-number-hint" %}
|
|
7
|
+
{% set suffix = 'self' if data.isLicenceForYou else 'bobo' %}
|
|
7
8
|
|
|
8
9
|
{%
|
|
9
10
|
set errorMap = {
|
|
@@ -13,10 +14,6 @@
|
|
|
13
14
|
'ni-number': {
|
|
14
15
|
'string.empty': { ref: '#ni-number', text: mssgs.disability_concession_error_ni_empty },
|
|
15
16
|
'string.pattern.base': { ref: '#ni-number', text: mssgs.disability_concession_error_ni_pattern }
|
|
16
|
-
},
|
|
17
|
-
'blue-badge-number': {
|
|
18
|
-
'string.empty': { ref: '#blue-badge-number', text: mssgs.disability_concession_badge_error_msg },
|
|
19
|
-
'string.max': { ref: '#blue-badge-number', text: mssgs.disability_concession_badge_error_msg }
|
|
20
17
|
}
|
|
21
18
|
}
|
|
22
19
|
%}
|
|
@@ -38,23 +35,9 @@
|
|
|
38
35
|
}) }}
|
|
39
36
|
{% endset -%}
|
|
40
37
|
|
|
41
|
-
{% set blueBadge %}
|
|
42
|
-
{{ govukInput({
|
|
43
|
-
label: {
|
|
44
|
-
html: mssgs.disability_concession_badge_error_msg
|
|
45
|
-
},
|
|
46
|
-
id: "blue-badge-number",
|
|
47
|
-
name: "blue-badge-number",
|
|
48
|
-
value: payload['blue-badge-number'],
|
|
49
|
-
classes: "govuk-input--width-20",
|
|
50
|
-
attributes: { maxlength: 25 },
|
|
51
|
-
errorMessage: { text: mssgs.disability_concession_badge_error_msg } if error['blue-badge-number']
|
|
52
|
-
}) }}
|
|
53
|
-
{% endset -%}
|
|
54
|
-
|
|
55
38
|
{% block pageContent %}
|
|
56
39
|
{% if not data.hasJunior and not data.hasSenior %}
|
|
57
|
-
<p class="govuk-
|
|
40
|
+
<p class="govuk-hint">{{ mssgs.disability_concession_12_month }}<a href="https://www.gov.uk/government/publications/blue-badge-can-i-get-one/can-i-get-a-blue-badge" class="govuk-link" target="_blank">{{ mssgs.disability_concession_12_month_link }}</a></p>
|
|
58
41
|
{% endif %}
|
|
59
42
|
|
|
60
43
|
{{ govukRadios({
|
|
@@ -62,21 +45,20 @@
|
|
|
62
45
|
name: "disability-concession",
|
|
63
46
|
items: [
|
|
64
47
|
{
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
48
|
+
html: mssgs['disability_concession_radio_pip_' ~ suffix] ~ '<br>' ~ mssgs.disability_concession_radio_dla,
|
|
49
|
+
value: data.pipDla,
|
|
50
|
+
checked: payload['disability-concession'] === data.pipDla,
|
|
51
|
+
conditional: { html: pipDla }
|
|
69
52
|
},
|
|
70
53
|
{
|
|
71
|
-
text: mssgs
|
|
54
|
+
text: mssgs['disability_concession_radio_badge_' ~ suffix],
|
|
72
55
|
value: data.blueBadge,
|
|
73
|
-
checked: payload['disability-concession'] === data.blueBadge
|
|
74
|
-
conditional: { html: blueBadge }
|
|
56
|
+
checked: payload['disability-concession'] === data.blueBadge
|
|
75
57
|
},
|
|
76
58
|
{
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
59
|
+
text: mssgs['disability_concession_radio_no_' ~ suffix],
|
|
60
|
+
value: data.no,
|
|
61
|
+
checked: payload['disability-concession'] === data.no
|
|
80
62
|
}
|
|
81
63
|
],
|
|
82
64
|
errorMessage: { text: mssgs.disability_concession_error_choose_option } if error['disability-concession']
|
|
@@ -14,11 +14,6 @@ const validator = Joi.object({
|
|
|
14
14
|
is: disabilityConcessionTypes.pipDla,
|
|
15
15
|
then: validation.contact.createNationalInsuranceNumberValidator(Joi).required(),
|
|
16
16
|
otherwise: Joi.string().empty('')
|
|
17
|
-
}),
|
|
18
|
-
'blue-badge-number': Joi.alternatives().conditional('disability-concession', {
|
|
19
|
-
is: disabilityConcessionTypes.blueBadge,
|
|
20
|
-
then: Joi.string().max(25).required(),
|
|
21
|
-
otherwise: Joi.string().empty('')
|
|
22
17
|
})
|
|
23
18
|
}).options({ abortEarly: false, allowUnknown: true })
|
|
24
19
|
|
|
@@ -19,7 +19,7 @@ export default async request => {
|
|
|
19
19
|
concessionHelper.addDisabled(permission, CONCESSION_PROOF.NI, payload['ni-number'])
|
|
20
20
|
Object.assign(permission, { licenceLength: '12M', licenceStartTime: '0' })
|
|
21
21
|
} else if (payload['disability-concession'] === disabilityConcessionTypes.blueBadge) {
|
|
22
|
-
concessionHelper.addDisabled(permission, CONCESSION_PROOF.blueBadge
|
|
22
|
+
concessionHelper.addDisabled(permission, CONCESSION_PROOF.blueBadge)
|
|
23
23
|
Object.assign(permission, { licenceLength: '12M', licenceStartTime: '0' })
|
|
24
24
|
} else {
|
|
25
25
|
concessionHelper.removeDisabled(permission)
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
<meta name="robots" content="noindex">
|
|
6
6
|
{% endif %}
|
|
7
7
|
|
|
8
|
+
{% from "cookie-banner/macro.njk" import govukCookieBanner %}
|
|
8
9
|
{% from "header/macro.njk" import govukHeader %}
|
|
9
10
|
{% from "button/macro.njk" import govukButton %}
|
|
10
11
|
{% from "back-link/macro.njk" import govukBackLink %}
|
|
@@ -13,115 +14,112 @@
|
|
|
13
14
|
{% set htmlLang = "cy" %}
|
|
14
15
|
{% endif %}
|
|
15
16
|
|
|
17
|
+
{% set govukRebrand = true %}
|
|
18
|
+
|
|
16
19
|
{% macro csrf() %}
|
|
17
20
|
<div><input type="hidden" name="{{CSRF_TOKEN_NAME}}" value="{{CSRF_TOKEN_VALUE}}"></div>
|
|
18
21
|
{% endmacro %}
|
|
19
22
|
|
|
23
|
+
{% set cbHtml %}
|
|
24
|
+
<p class="govuk-body">{{ mssgs.analytics_banner_preamble_1 }}</p>
|
|
25
|
+
<p class="govuk-body">{{ mssgs.analytics_banner_preamble_2 }}</p>
|
|
26
|
+
{% endset %}
|
|
27
|
+
|
|
20
28
|
{% block head %}
|
|
21
|
-
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
|
22
|
-
<link href="/public/stylesheets/main.css" rel="stylesheet" type="text/css" />
|
|
23
|
-
<meta http-equiv="Cache-Control" content="no-store" />
|
|
24
|
-
<meta http-equiv="Pragma" content="no-cache">
|
|
25
|
-
<meta http-equiv="Expires" content="-1">
|
|
29
|
+
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
|
|
30
|
+
<link href="/public/stylesheets/main.css" rel="stylesheet" type="text/css" />
|
|
31
|
+
<meta http-equiv="Cache-Control" content="no-store" />
|
|
32
|
+
<meta http-equiv="Pragma" content="no-cache">
|
|
33
|
+
<meta http-equiv="Expires" content="-1">
|
|
26
34
|
{% endblock %}
|
|
27
35
|
|
|
28
36
|
{% block header %}
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
<form method="POST" novalidate action='{{ uri.analyticsFormAction }}'>
|
|
32
|
-
{% if not analyticsSelected %}
|
|
33
|
-
<div id="cookie-banner" class="cookie-banner no-print" role="region" aria-label="cookie banner">
|
|
34
|
-
<div id="cookie-message" class="cookie-message no-print" role="region" aria-label="cookie message">
|
|
35
|
-
<div class="govuk-width-container">
|
|
36
|
-
<h2 class="govuk-cookie-banner__heading govuk-heading-m">
|
|
37
|
-
{{ mssgs.analytics_banner_title }}
|
|
38
|
-
</h2>
|
|
39
|
-
<div class="govuk-cookie-banner__content">
|
|
40
|
-
<p class="govuk-body">
|
|
41
|
-
{{ mssgs.analytics_banner_preamble_1 }}
|
|
42
|
-
</p>
|
|
43
|
-
<p class="govuk-body">
|
|
44
|
-
{{ mssgs.analytics_banner_preamble_2 }}
|
|
45
|
-
</p>
|
|
46
|
-
</div>
|
|
47
|
-
<div class="govuk-button-group">
|
|
48
|
-
{{ govukButton({
|
|
49
|
-
attributes: { id: 'accept' },
|
|
50
|
-
preventDoubleClick: true,
|
|
51
|
-
name: "analyticsResponse",
|
|
52
|
-
text: mssgs.analytics_banner_accept,
|
|
53
|
-
value: 'accept'
|
|
54
|
-
}) }}
|
|
55
|
-
{{ govukButton({
|
|
56
|
-
attributes: { id: 'reject' },
|
|
57
|
-
preventDoubleClick: true,
|
|
58
|
-
name: "analyticsResponse",
|
|
59
|
-
text: mssgs.analytics_banner_reject,
|
|
60
|
-
value: 'reject'
|
|
61
|
-
}) }}
|
|
62
|
-
<a class="govuk-link" href="{{ _uri.cookies }}">{{ mssgs.analytics_banner_view_cookies_link }}</a>
|
|
63
|
-
</div>
|
|
64
|
-
</div>
|
|
65
|
-
</div>
|
|
66
|
-
</div>
|
|
67
|
-
{% endif %}
|
|
68
|
-
{% if analyticsSelected %}
|
|
69
|
-
{% if acceptedTracking %}
|
|
70
|
-
<div id="cookie-accept" class="cookie-message" role="region" aria-label="cookie accept">
|
|
71
|
-
<div class="govuk-width-container">
|
|
72
|
-
<div class="govuk-cookie-banner__content">
|
|
73
|
-
<p class="govuk-body" id="cookie-acceptance">
|
|
74
|
-
{{ mssgs.analytics_banner_acceptance_1 }} <a class="govuk-link" href="{{ _uri.cookies }}">{{ mssgs.analytics_banner_cookies_link }}</a> {{ mssgs.analytics_banner_acceptance_2 }}
|
|
75
|
-
</p>
|
|
76
|
-
</div>
|
|
77
|
-
<div class="govuk-button-group">
|
|
78
|
-
{{ govukButton({
|
|
79
|
-
attributes: { id: 'hide' },
|
|
80
|
-
preventDoubleClick: true,
|
|
81
|
-
name: "hide",
|
|
82
|
-
text: mssgs.analytics_banner_hide,
|
|
83
|
-
value: true
|
|
84
|
-
}) }}
|
|
85
|
-
</div>
|
|
86
|
-
</div>
|
|
87
|
-
</div>
|
|
88
|
-
</div>
|
|
89
|
-
{% else %}
|
|
90
|
-
<div id="cookie-reject" class="cookie-banner no-print" role="region">
|
|
91
|
-
<div class="govuk-width-container">
|
|
92
|
-
<div class="govuk-cookie-banner__content">
|
|
93
|
-
<p class="govuk-body">
|
|
94
|
-
{{ mssgs.analytics_banner_rejection_1 }} <a class="govuk-link" href="{{ _uri.cookies }}">{{ mssgs.analytics_banner_cookies_link }}</a> {{ mssgs.analytics_banner_rejection_2 }}
|
|
95
|
-
</p>
|
|
96
|
-
</div>
|
|
97
|
-
<div class="govuk-button-group">
|
|
98
|
-
{{ govukButton({
|
|
99
|
-
attributes: { id: 'hide' },
|
|
100
|
-
preventDoubleClick: true,
|
|
101
|
-
name: "hideMessage",
|
|
102
|
-
text: mssgs.analytics_banner_hide,
|
|
103
|
-
value: true
|
|
104
|
-
}) }}
|
|
105
|
-
</div>
|
|
106
|
-
</div>
|
|
107
|
-
</div>
|
|
108
|
-
{% endif %}
|
|
109
|
-
{% endif %}
|
|
37
|
+
<form action="{{ uri.analyticsFormAction }}" method="POST">
|
|
38
|
+
{{ csrf() }}
|
|
110
39
|
|
|
111
|
-
|
|
112
|
-
|
|
40
|
+
{% if displayAnalytics and not analyticsMessageDisplayed %}
|
|
41
|
+
{% if not analyticsSelected %}
|
|
42
|
+
{{ govukCookieBanner({
|
|
43
|
+
rebrand: true,
|
|
44
|
+
ariaLabel: mssgs.analytics_banner_title,
|
|
45
|
+
messages: [
|
|
46
|
+
{
|
|
47
|
+
headingText: mssgs.analytics_banner_title,
|
|
48
|
+
html: cbHtml,
|
|
49
|
+
actions: [
|
|
50
|
+
{
|
|
51
|
+
text: mssgs.analytics_banner_accept,
|
|
52
|
+
type: "submit",
|
|
53
|
+
name: "analyticsResponse",
|
|
54
|
+
id: "analytics-accept",
|
|
55
|
+
value: "accept"
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
text: mssgs.analytics_banner_reject,
|
|
59
|
+
type: "submit",
|
|
60
|
+
name: "analyticsResponse",
|
|
61
|
+
id: "analytics-reject",
|
|
62
|
+
value: "reject"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
text: mssgs.analytics_banner_view_cookies_link,
|
|
66
|
+
href: _uri.cookies,
|
|
67
|
+
id: "analytics-view"
|
|
68
|
+
}
|
|
69
|
+
]
|
|
70
|
+
}
|
|
71
|
+
]
|
|
72
|
+
}) }}
|
|
73
|
+
{% else %}
|
|
74
|
+
{% if acceptedTracking %}
|
|
75
|
+
{% set messageHtml %}
|
|
76
|
+
<p class="govuk-body">
|
|
77
|
+
{{ mssgs.analytics_banner_acceptance_1 }}
|
|
78
|
+
<a class="govuk-link" href="{{ _uri.cookies }}">{{ mssgs.analytics_banner_cookies_link }}</a>
|
|
79
|
+
{{ mssgs.analytics_banner_acceptance_2 }}
|
|
80
|
+
</p>
|
|
81
|
+
{% endset %}
|
|
82
|
+
{% else %}
|
|
83
|
+
{% set messageHtml %}
|
|
84
|
+
<p class="govuk-body">
|
|
85
|
+
{{ mssgs.analytics_banner_rejection_1 }}
|
|
86
|
+
<a class="govuk-link" href="{{ _uri.cookies }}">{{ mssgs.analytics_banner_cookies_link }}</a>
|
|
87
|
+
{{ mssgs.analytics_banner_rejection_2 }}
|
|
88
|
+
</p>
|
|
89
|
+
{% endset %}
|
|
113
90
|
{% endif %}
|
|
91
|
+
|
|
92
|
+
{{ govukCookieBanner({
|
|
93
|
+
rebrand: true,
|
|
94
|
+
ariaLabel: mssgs.analytics_banner_title,
|
|
95
|
+
messages: [
|
|
96
|
+
{
|
|
97
|
+
html: messageHtml,
|
|
98
|
+
actions: [
|
|
99
|
+
{
|
|
100
|
+
text: mssgs.analytics_banner_hide,
|
|
101
|
+
type: 'submit',
|
|
102
|
+
name: 'hideMessage',
|
|
103
|
+
id: 'hide-message',
|
|
104
|
+
value: "true"
|
|
105
|
+
}
|
|
106
|
+
]
|
|
107
|
+
}
|
|
108
|
+
]
|
|
109
|
+
}) }}
|
|
110
|
+
{% endif %}
|
|
114
111
|
{% endif %}
|
|
115
112
|
|
|
116
113
|
{{ govukHeader({
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
114
|
+
rebrand: true,
|
|
115
|
+
assetsPath: assetPath + '/images',
|
|
116
|
+
homepageUrl: "https://www.gov.uk/",
|
|
117
|
+
serviceUrl: "/",
|
|
118
|
+
classes: "no-print",
|
|
119
|
+
containerClasses: "govuk-width-container",
|
|
120
|
+
serviceName: mssgs.header_service_name if not TELESALES else "Get a rod fishing licence (TELESALES)"
|
|
124
121
|
}) }}
|
|
122
|
+
</form>
|
|
125
123
|
{% endblock %}
|
|
126
124
|
|
|
127
125
|
{% block beforeContent %}
|
|
@@ -245,6 +243,7 @@
|
|
|
245
243
|
</div>
|
|
246
244
|
</footer>
|
|
247
245
|
{% endblock %}
|
|
246
|
+
|
|
248
247
|
{% block bodyEnd %}
|
|
249
248
|
<script type="module" src="/public/javascript/govuk-frontend-min.js"></script>
|
|
250
249
|
<script nonce="{{nonce}}" type="module">
|
|
@@ -9,7 +9,8 @@ import {
|
|
|
9
9
|
RENEWAL_INACTIVE,
|
|
10
10
|
LICENCE_LENGTH,
|
|
11
11
|
CONTACT_SUMMARY,
|
|
12
|
-
NEW_TRANSACTION
|
|
12
|
+
NEW_TRANSACTION,
|
|
13
|
+
LICENCE_NOT_FOUND
|
|
13
14
|
} from '../../../../uri.js'
|
|
14
15
|
import { start, stop, initialize, injectWithCookies, mockSalesApi } from '../../../../__mocks__/test-utils-system.js'
|
|
15
16
|
|
|
@@ -52,15 +53,12 @@ mockSalesApi()
|
|
|
52
53
|
salesApi.countries.getAll = jest.fn(() => Promise.resolve(mockDefraCountries))
|
|
53
54
|
|
|
54
55
|
describe('The easy renewal identification page', () => {
|
|
55
|
-
it('redirects
|
|
56
|
+
it('redirects from identify to licence not found page when called with an invalid permission reference', async () => {
|
|
56
57
|
const data = await injectWithCookies('GET', RENEWAL_PUBLIC.uri.replace('{referenceNumber}', 'not-a-valid-reference-number'))
|
|
57
58
|
expect(data.statusCode).toBe(302)
|
|
58
59
|
expect(data.headers.location).toHaveValidPathFor(IDENTIFY.uri)
|
|
59
|
-
const data2 = await injectWithCookies('GET',
|
|
60
|
-
expect(data2.statusCode).toBe(
|
|
61
|
-
expect(data2.headers.location).toHaveValidPathFor(IDENTIFY.uri)
|
|
62
|
-
const data3 = await injectWithCookies('GET', IDENTIFY.uri)
|
|
63
|
-
expect(data3.statusCode).toBe(200)
|
|
60
|
+
const data2 = await injectWithCookies('GET', LICENCE_NOT_FOUND.uri)
|
|
61
|
+
expect(data2.statusCode).toBe(200)
|
|
64
62
|
})
|
|
65
63
|
|
|
66
64
|
it('returns successfully when called with a valid reference ', async () => {
|
|
@@ -87,7 +85,7 @@ describe('The easy renewal identification page', () => {
|
|
|
87
85
|
expect(data.headers.location).toHaveValidPathFor(IDENTIFY.uri)
|
|
88
86
|
})
|
|
89
87
|
|
|
90
|
-
it('redirects
|
|
88
|
+
it('redirects to licence not found on posting valid but not authenticated details', async () => {
|
|
91
89
|
salesApi.authenticate.mockImplementation(jest.fn(async () => new Promise(resolve => resolve(null))))
|
|
92
90
|
await injectWithCookies('GET', VALID_RENEWAL_PUBLIC_URI)
|
|
93
91
|
await injectWithCookies('GET', IDENTIFY.uri)
|
|
@@ -100,8 +98,8 @@ describe('The easy renewal identification page', () => {
|
|
|
100
98
|
expect(data.headers.location).toHaveValidPathFor(AUTHENTICATE.uri)
|
|
101
99
|
const data2 = await injectWithCookies('GET', AUTHENTICATE.uri)
|
|
102
100
|
expect(data2.statusCode).toBe(302)
|
|
103
|
-
expect(data2.headers.location).toHaveValidPathFor(
|
|
104
|
-
const data3 = await injectWithCookies('GET',
|
|
101
|
+
expect(data2.headers.location).toHaveValidPathFor(LICENCE_NOT_FOUND.uri)
|
|
102
|
+
const data3 = await injectWithCookies('GET', LICENCE_NOT_FOUND.uri)
|
|
105
103
|
expect(data3.statusCode).toBe(200)
|
|
106
104
|
})
|
|
107
105
|
|
|
@@ -15,11 +15,7 @@
|
|
|
15
15
|
set errorMap = {
|
|
16
16
|
'referenceNumber' : {
|
|
17
17
|
'string.empty': { text: mssgs.identify_error_empty, ref: '#ref' },
|
|
18
|
-
'string.pattern.base': { text: mssgs.identify_error_pattern, ref: '#ref' }
|
|
19
|
-
'string.invalid': {
|
|
20
|
-
text: mssgs.identify_error_invalid_1 + payload.referenceNumber + mssgs.identify_error_invalid_2,
|
|
21
|
-
ref: "#ref"
|
|
22
|
-
}
|
|
18
|
+
'string.pattern.base': { text: mssgs.identify_error_pattern, ref: '#ref' }
|
|
23
19
|
},
|
|
24
20
|
'postcode': {
|
|
25
21
|
'string.empty': { ref: '#postcode', text: mssgs.identify_error_empty_postcode },
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { IDENTIFY,
|
|
1
|
+
import { IDENTIFY, NEW_TRANSACTION, AUTHENTICATE } from '../../../uri.js'
|
|
2
2
|
import pageRoute from '../../../routes/page-route.js'
|
|
3
3
|
import Joi from 'joi'
|
|
4
4
|
import { validation } from '@defra-fish/business-rules-lib'
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import pageRoute from '../../../../routes/page-route.js'
|
|
2
|
+
import { LICENCE_NOT_FOUND } from '../../../../uri.js'
|
|
3
|
+
import '../route.js'
|
|
4
|
+
|
|
5
|
+
jest.mock('../../../../routes/page-route.js', () => jest.fn())
|
|
6
|
+
jest.mock('../../../../uri.js', () => ({
|
|
7
|
+
RENEWAL_PUBLIC: { uri: Symbol('renewal public uri') },
|
|
8
|
+
LICENCE_NOT_FOUND: {
|
|
9
|
+
page: Symbol('licence-not-found page'),
|
|
10
|
+
uri: Symbol('licence-not-found uri')
|
|
11
|
+
}
|
|
12
|
+
}))
|
|
13
|
+
|
|
14
|
+
describe('LICENCE_NOT_FOUND route', () => {
|
|
15
|
+
it('passes LICENCE_NOT_FOUND.page as the first argument to pageRoute', () => {
|
|
16
|
+
expect(pageRoute.mock.calls[0][0]).toBe(LICENCE_NOT_FOUND.page)
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
it('passes LICENCE_NOT_FOUND.uri as the second argument to pageRoute', () => {
|
|
20
|
+
expect(pageRoute.mock.calls[0][1]).toBe(LICENCE_NOT_FOUND.uri)
|
|
21
|
+
})
|
|
22
|
+
})
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
{% extends "layout.njk" %}
|
|
2
|
+
{% extends "standard-form.njk" %}
|
|
3
|
+
|
|
4
|
+
{% set title = mssgs.licence_not_found_title %}
|
|
5
|
+
|
|
6
|
+
{% block content %}
|
|
7
|
+
<div class="govuk-grid-row">
|
|
8
|
+
<div class="govuk-grid-column-two-thirds">
|
|
9
|
+
<h1 class="govuk-heading-l">{{ mssgs.licence_not_found_title }}</h1>
|
|
10
|
+
<p class="govuk-body">
|
|
11
|
+
{{ mssgs.licence_not_found_body_1 }}
|
|
12
|
+
<a class="govuk-link" href="/buy/renew/identify">{{ mssgs.licence_not_found_body_previous_page }}</a>{{ mssgs.full_stop }}
|
|
13
|
+
</p>
|
|
14
|
+
<p class="govuk-body">
|
|
15
|
+
{{ mssgs.licence_not_found_body_2 }}
|
|
16
|
+
<a href="mailto:enquiries@environment-agency.gov.uk">{{ mssgs.licence_not_found_body_ea_link }}</a>
|
|
17
|
+
{{ mssgs.licence_not_found_body_3 }}
|
|
18
|
+
<a href="https://www.gov.uk/call-charges" target="_blank" rel="noopener">
|
|
19
|
+
{{ mssgs.licence_not_found_body_call_charges_link }}</a>{{ mssgs.full_stop }}
|
|
20
|
+
</p>
|
|
21
|
+
</div>
|
|
22
|
+
</div>
|
|
23
|
+
{% endblock %}
|
|
@@ -599,7 +599,7 @@ Array [
|
|
|
599
599
|
"text": "licence_summary_disability_concession",
|
|
600
600
|
},
|
|
601
601
|
"value": Object {
|
|
602
|
-
"html": "
|
|
602
|
+
"html": "licence_summary_none",
|
|
603
603
|
},
|
|
604
604
|
},
|
|
605
605
|
Object {
|
|
@@ -930,15 +930,15 @@ Array [
|
|
|
930
930
|
},
|
|
931
931
|
"href": "/buy/disability-concession",
|
|
932
932
|
"text": "contact_summary_change",
|
|
933
|
-
"visuallyHiddenText": "
|
|
933
|
+
"visuallyHiddenText": "licence_summary_blue_badge",
|
|
934
934
|
},
|
|
935
935
|
],
|
|
936
936
|
},
|
|
937
937
|
"key": Object {
|
|
938
|
-
"text": "
|
|
938
|
+
"text": "licence_summary_blue_badge",
|
|
939
939
|
},
|
|
940
940
|
"value": Object {
|
|
941
|
-
"html": "
|
|
941
|
+
"html": "licence_summary_blue_badge_eligible",
|
|
942
942
|
},
|
|
943
943
|
},
|
|
944
944
|
Object {
|
|
@@ -1172,7 +1172,7 @@ Array [
|
|
|
1172
1172
|
"text": "licence_summary_disability_concession",
|
|
1173
1173
|
},
|
|
1174
1174
|
"value": Object {
|
|
1175
|
-
"html": "
|
|
1175
|
+
"html": "licence_summary_none",
|
|
1176
1176
|
},
|
|
1177
1177
|
},
|
|
1178
1178
|
Object {
|
|
@@ -84,7 +84,8 @@ const getMockRequest = ({
|
|
|
84
84
|
licence_type_12m: 'licence_type_12m',
|
|
85
85
|
licence_type_8d: 'licence_type_8d',
|
|
86
86
|
licence_type_1d: 'licence_type_1d',
|
|
87
|
-
|
|
87
|
+
licence_summary_blue_badge: 'licence_summary_blue_badge',
|
|
88
|
+
licence_summary_blue_badge_eligible: 'licence_summary_blue_badge_eligible',
|
|
88
89
|
licence_summary_ni_num: 'licence_summary_ni_num',
|
|
89
90
|
licence_summary_disability_concession: 'licence_summary_disability_concession',
|
|
90
91
|
free: 'gratis',
|
|
@@ -163,8 +164,7 @@ const getMockBlueBadgePermission = () => ({
|
|
|
163
164
|
{
|
|
164
165
|
type: mappingConstants.CONCESSION.DISABLED,
|
|
165
166
|
proof: {
|
|
166
|
-
type: mappingConstants.CONCESSION_PROOF.blueBadge
|
|
167
|
-
referenceNumber: 'AB1 CDE 0 1234F5678'
|
|
167
|
+
type: mappingConstants.CONCESSION_PROOF.blueBadge
|
|
168
168
|
}
|
|
169
169
|
}
|
|
170
170
|
]
|
|
@@ -70,7 +70,7 @@ class RowGenerator {
|
|
|
70
70
|
|
|
71
71
|
_getConcessionText () {
|
|
72
72
|
if (this.disabled?.proof?.type === CONCESSION_PROOF.blueBadge) {
|
|
73
|
-
return this.labels.
|
|
73
|
+
return this.labels.licence_summary_blue_badge
|
|
74
74
|
} else if (this.disabled?.proof?.type === CONCESSION_PROOF.NI) {
|
|
75
75
|
return this.labels.licence_summary_ni_num
|
|
76
76
|
}
|
|
@@ -93,7 +93,16 @@ class RowGenerator {
|
|
|
93
93
|
}
|
|
94
94
|
|
|
95
95
|
generateConcessionRow () {
|
|
96
|
-
const label =
|
|
96
|
+
const label = (() => {
|
|
97
|
+
if (this.disabled?.proof?.type === CONCESSION_PROOF.blueBadge) {
|
|
98
|
+
return this.labels.licence_summary_blue_badge_eligible
|
|
99
|
+
}
|
|
100
|
+
if (this.disabled?.proof?.type === CONCESSION_PROOF.NI) {
|
|
101
|
+
return this.disabled.proof.referenceNumber
|
|
102
|
+
}
|
|
103
|
+
return this.labels.licence_summary_none
|
|
104
|
+
})()
|
|
105
|
+
|
|
97
106
|
const concessionText = this._getConcessionText()
|
|
98
107
|
return this._generateRow(concessionText, label, DISABILITY_CONCESSION.uri, concessionText, 'change-benefit-check')
|
|
99
108
|
}
|
|
@@ -28,7 +28,8 @@ import {
|
|
|
28
28
|
RENEWAL_INACTIVE,
|
|
29
29
|
RENEWAL_START_DATE,
|
|
30
30
|
CHOOSE_PAYMENT,
|
|
31
|
-
SET_UP_PAYMENT
|
|
31
|
+
SET_UP_PAYMENT,
|
|
32
|
+
LICENCE_NOT_FOUND
|
|
32
33
|
} from '../uri.js'
|
|
33
34
|
|
|
34
35
|
import { CommonResults, CONTACT_SUMMARY_SEEN, ShowDigitalLicencePages } from '../constants.js'
|
|
@@ -416,6 +417,11 @@ export default [
|
|
|
416
417
|
}
|
|
417
418
|
},
|
|
418
419
|
|
|
420
|
+
{
|
|
421
|
+
current: LICENCE_NOT_FOUND,
|
|
422
|
+
backLink: IDENTIFY.uri
|
|
423
|
+
},
|
|
424
|
+
|
|
419
425
|
// The change start time is handled directly - not via the controller, as it has dynamic validation
|
|
420
426
|
{
|
|
421
427
|
current: RENEWAL_START_DATE,
|
package/src/routes/routes.js
CHANGED
|
@@ -30,6 +30,7 @@ import paymentFailed from '../pages/payment/failed/route.js'
|
|
|
30
30
|
import identify from '../pages/renewals/identify/route.js'
|
|
31
31
|
import invalidLink from '../pages/renewals/renewal-inactive/route.js'
|
|
32
32
|
import renewalStartDate from '../pages/renewals/renewal-start-date/route.js'
|
|
33
|
+
import licenceNotFound from '../pages/renewals/licence-not-found/route.js'
|
|
33
34
|
|
|
34
35
|
import staticAssets from './static-routes.js'
|
|
35
36
|
import miscRoutes from './misc-routes.js'
|
|
@@ -71,7 +72,8 @@ const routes = [
|
|
|
71
72
|
...invalidLink,
|
|
72
73
|
...renewalStartDate,
|
|
73
74
|
...choosePayment,
|
|
74
|
-
...setUpRecurring
|
|
75
|
+
...setUpRecurring,
|
|
76
|
+
...licenceNotFound
|
|
75
77
|
]
|
|
76
78
|
|
|
77
79
|
if (process.env.CHANNEL === 'telesales') {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import fetch from 'node-fetch'
|
|
2
|
-
|
|
3
2
|
import { ADDRESS_LOOKUP_SERVICE, ADDRESS_LOOKUP_TIMEOUT_MS_DEFAULT } from '../../constants.js'
|
|
4
3
|
import db from 'debug'
|
|
5
4
|
const debug = db('webapp:address-lookup-service')
|
|
5
|
+
|
|
6
6
|
export default async (premises, postcode) => {
|
|
7
7
|
const url = new URL(process.env.ADDRESS_LOOKUP_URL)
|
|
8
8
|
|
package/src/uri.js
CHANGED
|
@@ -48,6 +48,7 @@ export const IDENTIFY = { uri: '/buy/renew/identify', page: 'identify' }
|
|
|
48
48
|
export const RENEWAL_INACTIVE = { uri: '/buy/renew/inactive', page: 'renewal-inactive' }
|
|
49
49
|
export const AUTHENTICATE = { uri: '/buy/renew/authenticate' }
|
|
50
50
|
export const RENEWAL_START_DATE = { uri: '/buy/renew/renewal-start-date', page: 'renewal-start-date' }
|
|
51
|
+
export const LICENCE_NOT_FOUND = { uri: '/buy/renew/licence-not-found', page: 'licence-not-found' }
|
|
51
52
|
|
|
52
53
|
export const CONTROLLER = { uri: '/buy' }
|
|
53
54
|
export const NEW_TRANSACTION = { uri: '/buy/new' }
|