Skip to content

Commit 9bc9ad3

Browse files
committed
Address review comments
1 parent 2dffb63 commit 9bc9ad3

File tree

4 files changed

+20
-29
lines changed

4 files changed

+20
-29
lines changed

infrastructure/terraform/components/api/resources/spec.tmpl.json

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,6 @@
3434
"description": "Server error"
3535
}
3636
},
37-
"security": [
38-
{
39-
"LambdaAuthorizer": []
40-
}
41-
],
4237
"summary": "Healthcheck endpoint",
4338
"x-amazon-apigateway-integration": {
4439
"contentHandling": "CONVERT_TO_TEXT",

lambdas/api-handler/src/handlers/__tests__/get-letter-data.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ import { makeApiGwEvent } from './utils/test-utils';
1818
import { ValidationError } from '../../errors';
1919
import * as errors from '../../contracts/errors';
2020
import { createGetLetterDataHandler } from '../get-letter-data';
21-
import { Destination, S3Client } from '@aws-sdk/client-s3';
21+
import { S3Client } from '@aws-sdk/client-s3';
2222
import pino from 'pino';
2323
import { LetterRepository } from '@internal/datastore/src';
2424
import { EnvVars } from '../../config/env';

lambdas/api-handler/src/handlers/__tests__/get_status.test.ts

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ describe('API Lambda handler', () => {
1111
it('passes if S3 and DynamoDB are available', async() => {
1212

1313
const event = makeApiGwEvent({path: '/_status',
14-
headers: {'nhsd-supplier-id': 'supplier1', 'nhsd-correlation-id': 'correlationId', 'x-request-id': 'requestId'}
14+
headers: {'Nhsd-Correlation-Id': 'correlationId'}
1515
});
1616

1717
const getLetterDataHandler = createGetStatusHandler(getMockedDeps());
@@ -28,15 +28,14 @@ describe('API Lambda handler', () => {
2828
mockedDeps.s3Client.send = jest.fn().mockRejectedValue(new Error('unexpected error'));
2929

3030
const event = makeApiGwEvent({path: '/_status',
31-
headers: {'nhsd-supplier-id': 'supplier1', 'nhsd-correlation-id': 'correlationId', 'x-request-id': 'requestId'}
31+
headers: {'Nhsd-Correlation-Id': 'correlationId'}
3232
});
3333

3434
const getLetterDataHandler = createGetStatusHandler(mockedDeps);
3535
const result = await getLetterDataHandler(event, mockDeep<Context>(), jest.fn());
3636

37-
expect(result).toEqual(expect.objectContaining({
38-
statusCode: 500
39-
}));
37+
expect(result!.statusCode).toBe(500);
38+
expect(JSON.parse(result!.body).errors[0].id).toBe('correlationId');
4039
});
4140

4241

@@ -45,28 +44,29 @@ describe('API Lambda handler', () => {
4544
mockedDeps.dbHealthcheck.check = jest.fn().mockRejectedValue(new Error('unexpected error'));
4645

4746
const event = makeApiGwEvent({path: '/_status',
48-
headers: {'nhsd-supplier-id': 'supplier1', 'nhsd-correlation-id': 'correlationId', 'x-request-id': 'requestId'}
47+
headers: {'Nhsd-Correlation-Id': 'correlationId'}
4948
});
5049

5150
const getLetterDataHandler = createGetStatusHandler(mockedDeps);
5251
const result = await getLetterDataHandler(event, mockDeep<Context>(), jest.fn());
5352

54-
expect(result).toEqual(expect.objectContaining({
55-
statusCode: 500
56-
}));
53+
expect(result!.statusCode).toBe(500);
54+
expect(JSON.parse(result!.body).errors[0].id).toBe('correlationId');
5755
});
5856

59-
it('fails if request ID is absent', async() => {
57+
it('allows the correlation ID to be absent', async() => {
58+
const mockedDeps = getMockedDeps();
59+
mockedDeps.dbHealthcheck.check = jest.fn().mockRejectedValue(new Error('unexpected error'));
60+
6061
const event = makeApiGwEvent({path: '/_status',
61-
headers: {'nhsd-supplier-id': 'supplier1', 'nhsd-correlation-id': 'correlationId'}
62+
headers: {}
6263
});
6364

64-
const getLetterDataHandler = createGetStatusHandler(getMockedDeps());
65+
const getLetterDataHandler = createGetStatusHandler(mockedDeps);
6566
const result = await getLetterDataHandler(event, mockDeep<Context>(), jest.fn());
6667

67-
expect(result).toEqual(expect.objectContaining({
68-
statusCode: 500
69-
}));
68+
expect(result!.statusCode).toBe(500);
69+
expect(JSON.parse(result!.body).errors[0].id).toBeDefined();
7070
});
7171

7272
function getMockedDeps(): jest.Mocked<Deps> {

lambdas/api-handler/src/handlers/get-status.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,30 @@
11
import { APIGatewayProxyHandler } from "aws-lambda";
22
import { Deps } from "../config/deps";
33
import { ListBucketsCommand, S3Client } from "@aws-sdk/client-s3";
4-
import { validateCommonHeaders } from "../utils/validation";
54
import { mapErrorToResponse } from "../mappers/error-mapper";
65

76
export function createGetStatusHandler(deps: Deps): APIGatewayProxyHandler {
87

98
return async(event) => {
109

11-
const commonHeadersResult = validateCommonHeaders(event.headers, deps);
12-
13-
if (!commonHeadersResult.ok) {
14-
return mapErrorToResponse(commonHeadersResult.error, commonHeadersResult.correlationId, deps.logger);
15-
}
10+
const correlationId = Object.entries(event.headers)
11+
.find(([headerName, _]) => headerName.toLowerCase() === deps.env.APIM_CORRELATION_HEADER)?.[1];
1612

1713
try {
1814
await deps.dbHealthcheck.check();
1915
await s3HealthCheck(deps.s3Client);
2016

2117
deps.logger.info({
2218
description: 'Healthcheck passed',
23-
supplierId: commonHeadersResult.value.supplierId
19+
correlationId
2420
});
2521

2622
return {
2723
statusCode: 200,
2824
body: '{}'
2925
};
3026
} catch (error) {
31-
return mapErrorToResponse(error, commonHeadersResult.value.correlationId, deps.logger);
27+
return mapErrorToResponse(error, correlationId || '', deps.logger);
3228
}
3329
}
3430
}

0 commit comments

Comments
 (0)