Skip to content

Commit 9d9fa42

Browse files
author
cj1993
authored
Merge branch 'main' into GOVSI-528/terms-and-conds
2 parents 2c39687 + fdf2199 commit 9d9fa42

20 files changed

Lines changed: 523 additions & 64 deletions

package.json

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@
6161
"i18next": "^20.3.5",
6262
"i18next-fs-backend": "^1.1.1",
6363
"i18next-http-middleware": "^3.1.4",
64-
"jsdom": "^16.6.0",
64+
"jsdom": "^17.0.0",
6565
"nunjucks": "^3.2.3",
6666
"libphonenumber-js": "^1.9.23",
6767
"prettier": "^2.3.2",
@@ -73,17 +73,17 @@
7373
"@types/chai": "^4.2.21",
7474
"@types/chai-as-promised": "^7.1.4",
7575
"@types/cheerio": "^0.22.30",
76-
"@types/cookie-session": "^2.0.42",
76+
"@types/cookie-session": "^2.0.43",
7777
"@types/cookie-parser": "^1.4.2",
7878
"@types/csurf": "^1.11.2",
7979
"@types/express": "^4.17.13",
8080
"@types/i18next-fs-backend": "^1.0.1",
81-
"@types/node": "^15.14.3",
81+
"@types/node": "^15.14.8",
8282
"@types/nunjucks": "^3.1.5",
83-
"@types/mocha": "^8.2.3",
83+
"@types/mocha": "^9.0.0",
8484
"@types/nock": "^11.1.0",
8585
"@types/pino": "^6.3.11",
86-
"@types/pino-http": "^5.4.1",
86+
"@types/pino-http": "^5.4.3",
8787
"@types/pino-pretty": "^4.7.1",
8888
"@types/sinon": "^10.0.2",
8989
"@types/sinon-chai": "^3.2.5",
@@ -107,10 +107,10 @@
107107
"nyc": "^15.1.0",
108108
"pino-pretty": "^5.1.0",
109109
"sass": "^1.35.2",
110-
"sinon": "^11.1.1",
110+
"sinon": "^11.1.2",
111111
"sinon-chai": "^3.7.0",
112-
"supertest": "^6.1.3",
113-
"ts-node": "^10.0.0",
112+
"supertest": "^6.1.5",
113+
"ts-node": "^10.2.1",
114114
"typescript": "^4.3.5",
115115
"uglify-js": "^3.14.1"
116116
}

src/app.constants.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@ export const PATH_NAMES = {
33
TERMS_AND_CONDITIONS: "/terms-and-conditions",
44
PRIVACY_POLICY: "/privacy-statement",
55
COOKIES_POLICY: "/cookies",
6+
SIGN_IN_OR_CREATE: "/sign-in-or-create",
67
ENTER_EMAIL: "/enter-email",
8+
ACCOUNT_NOT_FOUND: "/account-not-found",
79
CHECK_YOUR_EMAIL: "/check-your-email",
810
ENTER_PASSWORD: "/enter-password",
911
CREATE_ACCOUNT_CHECK_EMAIL: "/check-email",

src/app.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,8 @@ import { signedOutRouter } from "./components/signed-out/signed-out-routes";
4343
import { getSessionIdMiddleware } from "./middleware/session-middleware";
4444
import { shareInfoRouter } from "./components/share-info/share-info-routes";
4545
import { updatedTermsCondsRouter } from "./components/updated-terms-conds/updated-terms-conds-routes";
46+
import { signInOrCreateRouter } from "./components/sign-in-or-create/sign-in-or-create-routes";
47+
import { accountNotFoundRouter } from "./components/account-not-found/account-not-found-routes";
4648

4749
const APP_VIEWS = [
4850
path.join(__dirname, "components"),
@@ -51,7 +53,9 @@ const APP_VIEWS = [
5153

5254
function registerRoutes(app: express.Application) {
5355
app.use(landingRouter);
56+
app.use(signInOrCreateRouter);
5457
app.use(enterEmailRouter);
58+
app.use(accountNotFoundRouter);
5559
app.use(enterPasswordRouter);
5660
app.use(verifyEmailRouter);
5761
app.use(createPasswordRouter);
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
import { Request, Response } from "express";
2+
3+
export function accountNotFoundGet(req: Request, res: Response): void {
4+
res.render("account-not-found/index.njk", { email: "account.not.found@anymail.com"});
5+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import { PATH_NAMES } from "../../app.constants";
2+
3+
import * as express from "express";
4+
import { accountNotFoundGet } from "./account-not-found-controller";
5+
import { validateSessionMiddleware } from "../../middleware/session-middleware";
6+
7+
const router = express.Router();
8+
9+
router.get(
10+
PATH_NAMES.ACCOUNT_NOT_FOUND,
11+
validateSessionMiddleware,
12+
accountNotFoundGet
13+
);
14+
15+
export { router as accountNotFoundRouter };
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
{% extends "common/layout/base.njk" %}
2+
{% from "govuk/components/button/macro.njk" import govukButton %}
3+
{% from "govuk/components/inset-text/macro.njk" import govukInsetText %}
4+
5+
{% set pageTitleName = 'pages.accountNotFound.title' | translate %}
6+
7+
{% block content %}
8+
9+
{% include "common/errors/errorSummary.njk" %}
10+
11+
<h1 class="govuk-heading-l govuk-!-margin-top-0 govuk-!-margin-bottom-3">{{'pages.accountNotFound.header' | translate}}</h1>
12+
13+
<input type="hidden" name="_csrf" value="{{csrfToken}}"/>
14+
15+
<p class="govuk-body">
16+
{{ 'pages.accountNotFound.paragraph1' | translate }}
17+
</p>
18+
19+
{% set insetTextHtml %}
20+
<p class="govuk-body">{{'pages.accountNotFound.insetText1' | translate}}</p>
21+
<p class="govuk-body">{{'pages.accountNotFound.insetText2' | translate}}</p>
22+
<p class="govuk-body">{{'pages.accountNotFound.insetText3' | translate}}</p>
23+
{% endset %}
24+
25+
{{ govukInsetText({
26+
html: insetTextHtml
27+
}) }}
28+
29+
{{ govukButton({
30+
"text": button_text|default('pages.accountNotFound.createAccountButtonText' | translate, true),
31+
"href": "/enter-email-create-account"
32+
}) }}
33+
34+
<p class="govuk-body">
35+
<a href="/enter-email-existing-account" class="govuk-link" rel="noreferrer noopener">{{'pages.accountNotFound.tryAnotherLinkText' | translate }}</a>
36+
</p>
37+
38+
39+
{% endblock %}
40+

src/components/enter-email/enter-email-controller.ts

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,18 @@ import { enterEmailService } from "./enter-email-service";
55
import { EnterEmailServiceInterface } from "./types";
66

77
export function enterEmailGet(req: Request, res: Response): void {
8-
res.render("enter-email/index.njk");
8+
res.render("enter-email/index.njk");
99
}
1010

11+
export function enterEmailCreateAccountGet(req: Request, res: Response): void {
12+
res.render("enter-email/enter-email-create-account.njk");
13+
}
14+
15+
export function enterEmailExistingAccountGet(req: Request, res: Response): void {
16+
res.render("enter-email/enter-email-existing-account.njk");
17+
}
18+
19+
1120
export function enterEmailPost(
1221
service: EnterEmailServiceInterface = enterEmailService()
1322
): ExpressRouteFunc {
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{% extends "common/layout/base.njk" %}
2+
{% from "govuk/components/input/macro.njk" import govukInput %}
3+
{% from "govuk/components/button/macro.njk" import govukButton %}
4+
{% from "govuk/components/error-summary/macro.njk" import govukErrorSummary %}
5+
{% from "govuk/components/inset-text/macro.njk" import govukInsetText %}
6+
7+
{% set pageTitleName = 'pages.enterEmailCreateAccount.title' | translate %}
8+
9+
{% block content %}
10+
11+
{% include "common/errors/errorSummary.njk" %}
12+
13+
<h1 class="govuk-heading-l govuk-!-margin-top-0 govuk-!-margin-bottom-3">{{'pages.enterEmailCreateAccount.header' | translate}}</h1>
14+
15+
<p class="govuk-body">{{'pages.enterEmailCreateAccount.text' | translate}}</p>
16+
17+
<form action="/enter-email" method="post" novalidate>
18+
19+
<input type="hidden" name="_csrf" value="{{csrfToken}}"/>
20+
21+
{{ govukInput({
22+
label: {
23+
text: 'pages.enterEmailCreateAccount.email.label' | translate
24+
},
25+
id: "email",
26+
name: "email",
27+
value: email,
28+
errorMessage: {
29+
text: errors['email'].text
30+
} if (errors['email'])})
31+
}}
32+
33+
{{ govukButton({
34+
"text": button_text|default("Continue", true),
35+
"type": "Submit",
36+
"preventDoubleClick": true
37+
}) }}
38+
39+
</form>
40+
41+
{% endblock %}
42+
43+
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
{% extends "common/layout/base.njk" %}
2+
{% from "govuk/components/input/macro.njk" import govukInput %}
3+
{% from "govuk/components/button/macro.njk" import govukButton %}
4+
{% from "govuk/components/error-summary/macro.njk" import govukErrorSummary %}
5+
{% from "govuk/components/inset-text/macro.njk" import govukInsetText %}
6+
7+
{% set pageTitleName = 'pages.enterEmailExistingAccount.title' | translate %}
8+
9+
{% block content %}
10+
11+
{% include "common/errors/errorSummary.njk" %}
12+
13+
<h1 class="govuk-heading-l govuk-!-margin-top-0 govuk-!-margin-bottom-3">{{'pages.enterEmailExistingAccount.header' | translate}}</h1>
14+
15+
<p class="govuk-body">{{'pages.enterEmailExistingAccount.text' | translate}}</p>
16+
17+
<form action="/enter-email" method="post" novalidate>
18+
19+
<input type="hidden" name="_csrf" value="{{csrfToken}}"/>
20+
21+
{{ govukInput({
22+
label: {
23+
text: 'pages.enterEmailExistingAccount.email.label' | translate
24+
},
25+
id: "email",
26+
name: "email",
27+
value: email,
28+
errorMessage: {
29+
text: errors['email'].text
30+
} if (errors['email'])})
31+
}}
32+
33+
{{ govukButton({
34+
"text": button_text|default("Continue", true),
35+
"type": "Submit",
36+
"preventDoubleClick": true
37+
}) }}
38+
39+
</form>
40+
41+
{% endblock %}
42+
43+

src/components/enter-email/enter-email-routes.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { PATH_NAMES } from "../../app.constants";
22
import { validateEnterEmailRequest } from "./enter-email-validation";
3-
import { enterEmailPost, enterEmailGet } from "./enter-email-controller";
3+
import { enterEmailPost, enterEmailGet, enterEmailCreateAccountGet, enterEmailExistingAccountGet } from "./enter-email-controller";
44
import * as express from "express";
55
import { validateSessionMiddleware } from "../../middleware/session-middleware";
66
import { asyncHandler } from "../../utils/async";
@@ -11,6 +11,9 @@ router.get("/", validateSessionMiddleware, enterEmailGet);
1111

1212
router.get(PATH_NAMES.ENTER_EMAIL, validateSessionMiddleware, enterEmailGet);
1313

14+
router.get("/enter-email-create-account", validateSessionMiddleware, enterEmailCreateAccountGet);
15+
router.get("/enter-email-existing-account", validateSessionMiddleware, enterEmailExistingAccountGet);
16+
1417
router.post(
1518
PATH_NAMES.ENTER_EMAIL,
1619
validateSessionMiddleware,

0 commit comments

Comments
 (0)