diff --git a/src/config/index.ts b/src/config/index.ts
index 1a2a06e..30d53be 100644
--- a/src/config/index.ts
+++ b/src/config/index.ts
@@ -12,10 +12,13 @@ export const SERVICE_NAME = 'Node Prototype';
export const LANDING_PAGE = 'info';
export const NOT_FOUND = 'page-not-found';
export const ERROR_PAGE = 'error';
+export const CONFIRMATION = 'confirmation';
// Routing paths
export const LANDING_URL = '/info';
export const INFO_URL = '/info';
export const HEALTHCHECK_URL = '/healthcheck';
+export const CONFIRMATION_URL = '/confirmation';
export const SERVICE_URL = `${BASE_URL}${LANDING_URL}`;
+
diff --git a/src/controller/confirmation.controller.ts b/src/controller/confirmation.controller.ts
new file mode 100644
index 0000000..d558ed0
--- /dev/null
+++ b/src/controller/confirmation.controller.ts
@@ -0,0 +1,6 @@
+import { Request, Response } from 'express';
+import * as config from '../config';
+
+export const get = (_req: Request, res: Response) => {
+ return res.render(config.CONFIRMATION);
+};
\ No newline at end of file
diff --git a/src/routes/confirmation.ts b/src/routes/confirmation.ts
new file mode 100644
index 0000000..23687c3
--- /dev/null
+++ b/src/routes/confirmation.ts
@@ -0,0 +1,10 @@
+import { Router } from 'express';
+
+import { get } from '../controller/confirmation.controller';
+import * as config from '../config';
+
+const confirmationRouter = Router();
+
+confirmationRouter.get(config.CONFIRMATION_URL, get);
+
+export default confirmationRouter;
diff --git a/src/routes/index.ts b/src/routes/index.ts
index 01e515a..4c92a6e 100644
--- a/src/routes/index.ts
+++ b/src/routes/index.ts
@@ -3,11 +3,13 @@ import { Router } from 'express';
import { logger } from '../middleware/logger.middleware';
import healthcheckRouter from './healthcheck';
import infoRouter from './info';
+import confirmationRouter from './confirmation';
const router = Router();
router.use(logger);
router.use(healthcheckRouter);
router.use(infoRouter);
+router.use(confirmationRouter);
export default router;
diff --git a/src/views/confirmation.html b/src/views/confirmation.html
new file mode 100644
index 0000000..6b92c22
--- /dev/null
+++ b/src/views/confirmation.html
@@ -0,0 +1,29 @@
+{% extends "layout.html" %}
+
+{% set mainClasses = "govuk-main-wrapper--l" %}
+
+{% block content %}
+
+
+ {{ govukPanel({
+ titleText: "GitHub request complete",
+ html: "Your reference number
987654321"
+ }) }}
+
+
We have sent you a confirmation email.
+
+
What happens next
+
+
+ We’ve sent your request to cabinetoffice internal developer platform.
+
+
+ They will contact you either to confirm your request, or to ask for more information.
+
+
+
+ What did you think of this service? (takes 30 seconds)
+
+
+
+{% endblock %}
\ No newline at end of file
diff --git a/src/views/layout.html b/src/views/layout.html
index d58d153..313a32c 100644
--- a/src/views/layout.html
+++ b/src/views/layout.html
@@ -2,6 +2,7 @@
{% from "govuk/components/footer/macro.njk" import govukFooter %}
{% from "govuk/components/header/macro.njk" import govukHeader %}
+{% from "govuk/components/panel/macro.njk" import govukPanel %}
{% block head %}
diff --git a/test/integration/controller/error.spec.ts b/test/integration/controller/error.spec.ts
index f5e957e..66d62bc 100644
--- a/test/integration/controller/error.spec.ts
+++ b/test/integration/controller/error.spec.ts
@@ -1,4 +1,5 @@
jest.mock('../../../src/controller/info.controller');
+jest.mock('../../../src/utils/logger');
import { jest, beforeEach, describe, expect, test } from '@jest/globals';
import request from 'supertest';
diff --git a/test/integration/routes/confirmation.spec.ts b/test/integration/routes/confirmation.spec.ts
new file mode 100644
index 0000000..1c11ed4
--- /dev/null
+++ b/test/integration/routes/confirmation.spec.ts
@@ -0,0 +1,31 @@
+jest.mock('../../../src/middleware/logger.middleware');
+jest.mock('../../../src/utils/logger');
+
+import { jest, beforeEach, describe, expect, test } from '@jest/globals';
+import { Request, Response, NextFunction } from 'express';
+import request from 'supertest';
+
+import app from '../../../src/app';
+import * as config from '../../../src/config';
+import { logger } from '../../../src/middleware/logger.middleware';
+
+import { MOCK_GET_CONFIRMATION_RESPONSE } from '../../mock/text.mock';
+
+const mockedLogger = logger as jest.Mock;
+mockedLogger.mockImplementation((req: Request, res: Response, next: NextFunction) => next());
+
+describe('Confirmation endpoint integration tests', () => {
+ beforeEach(() => {
+ jest.clearAllMocks();
+ });
+
+ describe('GET tests', () => {
+ test('should render confirmation template', async () => {
+ const res = await request(app).get(config.CONFIRMATION_URL);
+
+ expect(res.status).toEqual(200);
+ expect(res.text).toContain(MOCK_GET_CONFIRMATION_RESPONSE);
+ expect(mockedLogger).toHaveBeenCalledTimes(1);
+ });
+ });
+});
diff --git a/test/integration/routes/healthcheck.spec.ts b/test/integration/routes/healthcheck.spec.ts
index bc6c434..3a84257 100644
--- a/test/integration/routes/healthcheck.spec.ts
+++ b/test/integration/routes/healthcheck.spec.ts
@@ -1,4 +1,5 @@
jest.mock('../../../src/middleware/logger.middleware');
+jest.mock('../../../src/utils/logger');
import { jest, beforeEach, describe, expect, test } from '@jest/globals';
import { Request, Response, NextFunction } from 'express';
diff --git a/test/integration/routes/info.spec.ts b/test/integration/routes/info.spec.ts
index 59d0981..9ec7c34 100644
--- a/test/integration/routes/info.spec.ts
+++ b/test/integration/routes/info.spec.ts
@@ -1,4 +1,5 @@
jest.mock('../../../src/middleware/logger.middleware');
+jest.mock('../../../src/utils/logger');
import { jest, beforeEach, describe, expect, test } from '@jest/globals';
import { Request, Response, NextFunction } from 'express';
diff --git a/test/mock/text.mock.ts b/test/mock/text.mock.ts
index 47f86fc..2609fc5 100644
--- a/test/mock/text.mock.ts
+++ b/test/mock/text.mock.ts
@@ -1,6 +1,7 @@
export const MOCK_GET_INFO_RESPONSE = 'Placeholder - Info Page';
export const MOCK_POST_INFO_RESPONSE = 'post request test';
export const MOCK_OK_RESPONSE = 'OK';
+export const MOCK_GET_CONFIRMATION_RESPONSE = 'GitHub request complete';
export const MOCK_NOT_FOUND_RESPONSE = 'Page not found';
export const MOCK_SERVICE_UNAVAILABLE = 'Sorry, there is a problem with the service';
export const MOCK_SERVER_ERROR = 'Pipe 3000 requires elevated privileges';
diff --git a/test/unit/controller/confirmation.controller.spec.ts b/test/unit/controller/confirmation.controller.spec.ts
new file mode 100644
index 0000000..5f0fc95
--- /dev/null
+++ b/test/unit/controller/confirmation.controller.spec.ts
@@ -0,0 +1,27 @@
+import { describe, expect, afterEach, test, jest } from '@jest/globals';
+import { Request, Response } from 'express';
+
+import { get } from '../../../src/controller/confirmation.controller';
+import * as config from '../../../src/config';
+
+const req = {} as Request;
+
+const mockResponse = () => {
+ const res = {} as Response;
+ res.render = jest.fn().mockReturnValue(res) as any;
+ return res;
+};
+
+describe('Confirmation controller test suites', () => {
+ afterEach(() => {
+ jest.resetAllMocks();
+ });
+
+ test('should render confirmation template', () => {
+ const res = mockResponse();
+
+ get(req, res);
+
+ expect(res.render).toHaveBeenCalledWith(config.CONFIRMATION);
+ });
+});