Skip to content

Commit fdf47c1

Browse files
committed
CCM-13146 update tests to query cloudwatch
1 parent 7f04a9b commit fdf47c1

File tree

3 files changed

+85
-1
lines changed

3 files changed

+85
-1
lines changed

tests/playwright/digital-letters-component-tests/handle-ttl.component.spec.ts

Lines changed: 48 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import { expect, test } from '@playwright/test';
2+
import { ENV } from 'constants/backend-constants';
3+
import { getLogsFromCloudwatch } from 'helpers/cloudwatch-helpers';
24
import { deleteTtl, putTtl } from 'helpers/dynamodb-helpers';
35
import expectToPassEventually from 'helpers/expectations';
46
import { v4 as uuidv4 } from 'uuid';
@@ -57,7 +59,52 @@ test.describe('Digital Letters - Handle TTL', () => {
5759
expect(deleteResponseCode).toBe(200);
5860

5961
await expectToPassEventually(async () => {
60-
// Check lambda log for withdrawn messageReference.
62+
const eventLogEntry = await getLogsFromCloudwatch(
63+
`/aws/lambda/nhs-${ENV}-dl-ttl-handle-expiry`,
64+
`{ ($.messageUri = "${messageUri}") and ($.description = "ItemDequeued event not sent as item withdrawn") }`
65+
);
66+
67+
expect(eventLogEntry.length).toEqual(1);
68+
});
69+
});
70+
71+
test('should handle expired item', async () => {
72+
const letterId = uuidv4();
73+
const messageUri = `https://example.com/ttl/resource/${letterId}`;
74+
75+
const event = {
76+
...baseEvent,
77+
id: letterId,
78+
data: {
79+
...baseEvent.data,
80+
messageUri,
81+
'digital-letter-id': letterId,
82+
},
83+
};
84+
85+
const ttlItem = {
86+
PK: messageUri,
87+
SK: 'TTL',
88+
dateOfExpiry: '2023-12-31#0',
89+
event,
90+
ttl: Date.now() / 1000 + 3600,
91+
};
92+
93+
const putResponseCode = await putTtl(ttlItem);
94+
expect(putResponseCode).toBe(200);
95+
96+
const deleteResponseCode = await deleteTtl(messageUri);
97+
expect(deleteResponseCode).toBe(200);
98+
99+
await expectToPassEventually(async () => {
100+
await expectToPassEventually(async () => {
101+
const eventLogEntry = await getLogsFromCloudwatch(
102+
`/aws/vendedlogs/events/event-bus/nhs-${ENV}-dl`,
103+
`{ ($.id = "${letterId}") }`
104+
);
105+
106+
expect(eventLogEntry.length).toEqual(1);
107+
});
61108
});
62109
});
63110
});
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
import {
2+
CloudWatchLogsClient,
3+
FilterLogEventsCommand,
4+
} from '@aws-sdk/client-cloudwatch-logs';
5+
import { region } from 'utils';
6+
import { test } from '@playwright/test';
7+
8+
const client = new CloudWatchLogsClient({ region: region() });
9+
10+
let testStartTime = new Date();
11+
12+
test.beforeEach(() => {
13+
testStartTime = new Date();
14+
});
15+
16+
/**
17+
* @param logGroupName e.g. `/aws/lambda/nhs-main-dl-apim-key-generation`
18+
* @param pattern e.g. `{ $.id = ${JSON.stringify(letterId)} }`
19+
*/
20+
export async function getLogsFromCloudwatch(
21+
logGroupName: string,
22+
pattern: string
23+
): Promise<unknown[]> {
24+
const filterEvents = new FilterLogEventsCommand({
25+
logGroupName,
26+
startTime: testStartTime.getTime() - 60 * 1000,
27+
filterPattern: pattern,
28+
limit: 50,
29+
});
30+
31+
const { events = [] } = await client.send(filterEvents);
32+
33+
return events.flatMap(({ message }) =>
34+
message ? [JSON.parse(message)] : []
35+
);
36+
}

utils/utils/src/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
export * from './dynamodb';
22
export * from './lambda-utils';
3+
export * from './locations';
34
export * from './logger';
45
export * from './sqs-utils';
56
export * from './ssm-utils';

0 commit comments

Comments
 (0)