Skip to content

Commit d5fb621

Browse files
committed
FPAD-7877: Refactor send-sqs-message
Option to pass in an SqsClient to avoid creating it multiple times
1 parent 9bbbf65 commit d5fb621

5 files changed

Lines changed: 27 additions & 21 deletions

File tree

src/commons/get-env-or-throw.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,12 @@
1+
import logger from './logger';
2+
13
const getEnvOrThrow = (name: string) => {
24
const value = process.env[name];
35

4-
if (!value) throw new Error(`Environment variable ${name} not found`);
6+
if (!value) {
7+
logger.error(`Environment variable ${name} not found`);
8+
throw new Error(`Environment variable ${name} not found`);
9+
}
510

611
return value;
712
};

src/handlers/tests/txma-handler.test.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,7 @@ describe('TxMA Handler', () => {
9494
},
9595
],
9696
'delete_queue',
97+
undefined,
9798
);
9899
});
99100

@@ -115,6 +116,7 @@ describe('TxMA Handler', () => {
115116
},
116117
],
117118
'intervention_queue',
119+
undefined,
118120
);
119121
});
120122

src/handlers/txma-handler.ts

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import { SQSEvent, Context } from 'aws-lambda';
22
import logger from '../commons/logger';
33
import { TxMAEgressEvent } from '../data-types/interfaces';
4-
import { sendBatchSqsMessage } from '../services/send-sqs-message';
4+
import { createSqsClient, sendBatchSqsMessage } from '../services/send-sqs-message';
55
import { addMetric, metric } from '../commons/metrics';
66
import { MetricNames } from '../data-types/constants';
77
import { AccountDeleteMessage } from '../contracts/account-delete-message';
@@ -52,11 +52,14 @@ export async function handler(event: SQSEvent, context: Context): Promise<void>
5252
}
5353
}
5454

55+
const sqsClient = createSqsClient();
56+
5557
const promiseList = [];
5658

57-
if (deletionMessages.length > 0) promiseList.push(sendBatchSqsMessage(deletionMessages, accountDeletionSqsQueue));
59+
if (deletionMessages.length > 0)
60+
promiseList.push(sendBatchSqsMessage(deletionMessages, accountDeletionSqsQueue, sqsClient));
5861
if (interventionMessages.length > 0)
59-
promiseList.push(sendBatchSqsMessage(interventionMessages, accountInterventionEventsQueue));
62+
promiseList.push(sendBatchSqsMessage(interventionMessages, accountInterventionEventsQueue, sqsClient));
6063

6164
await Promise.all(promiseList);
6265

src/services/send-sqs-message.ts

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,19 @@ import {
77
SendMessageBatchCommandOutput,
88
SendMessageBatchRequestEntry,
99
} from '@aws-sdk/client-sqs';
10-
import logger from '../commons/logger';
10+
import getEnvOrThrow from '../commons/get-env-or-throw';
11+
12+
export function createSqsClient() {
13+
const region = getEnvOrThrow('AWS_REGION');
14+
15+
return new SQSClient({ region });
16+
}
1117

1218
export async function sendSqsMessage(
1319
messageBody: string,
1420
queueUrl: string | undefined,
21+
client: SQSClient = createSqsClient(),
1522
): Promise<SendMessageCommandOutput> {
16-
if (!process.env['AWS_REGION']) {
17-
logger.error('AWS_REGION environment variable is not set');
18-
throw new Error('AWS_REGION environment variable not set');
19-
}
20-
const region = process.env['AWS_REGION'];
21-
const client = new SQSClient({ region });
2223
const message: SendMessageRequest = {
2324
QueueUrl: queueUrl,
2425
MessageBody: messageBody,
@@ -29,13 +30,8 @@ export async function sendSqsMessage(
2930
export async function sendBatchSqsMessage(
3031
messages: SendMessageBatchRequestEntry[],
3132
queueUrl: string | undefined,
33+
client: SQSClient = createSqsClient(),
3234
): Promise<SendMessageBatchCommandOutput> {
33-
if (!process.env['AWS_REGION']) {
34-
logger.error('AWS_REGION environment variable is not set');
35-
throw new Error('AWS_REGION environment variable not set');
36-
}
37-
const region = process.env['AWS_REGION'];
38-
const client = new SQSClient({ region });
3935
const parameters = {
4036
QueueUrl: queueUrl,
4137
Entries: messages,

src/services/test/send-sqs-message.test.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ describe('sendSqsMessage', () => {
3030

3131
it('throws an error if AWS_REGION environment variable is not set', async () => {
3232
vi.stubEnv('AWS_REGION', '');
33-
await expect(sendSqsMessage(messageBody, queueUrl)).rejects.toThrow('AWS_REGION environment variable not set');
33+
await expect(sendSqsMessage(messageBody, queueUrl)).rejects.toThrow('Environment variable AWS_REGION not found');
3434
// eslint-disable-next-line @typescript-eslint/unbound-method
35-
expect(vi.mocked(logger.error)).toHaveBeenCalledWith('AWS_REGION environment variable is not set');
35+
expect(vi.mocked(logger.error)).toHaveBeenCalledWith('Environment variable AWS_REGION not found');
3636
});
3737

3838
it('sends a message successfully when AWS_REGION and parameters are set', async () => {
@@ -73,9 +73,9 @@ describe('sendBatchSqsMessage', () => {
7373

7474
it('throws an error if AWS_REGION environment variable is not set', async () => {
7575
vi.stubEnv('AWS_REGION', '');
76-
await expect(sendBatchSqsMessage(entries, queueUrl)).rejects.toThrow('AWS_REGION environment variable not set');
76+
await expect(sendBatchSqsMessage(entries, queueUrl)).rejects.toThrow('Environment variable AWS_REGION not found');
7777
// eslint-disable-next-line @typescript-eslint/unbound-method
78-
expect(vi.mocked(logger.error)).toHaveBeenCalledWith('AWS_REGION environment variable is not set');
78+
expect(vi.mocked(logger.error)).toHaveBeenCalledWith('Environment variable AWS_REGION not found');
7979
});
8080

8181
it('sends a message successfully when AWS_REGION and parameters are set', async () => {

0 commit comments

Comments
 (0)