Skip to content

Commit 52173a2

Browse files
review fix
1 parent 56eb911 commit 52173a2

3 files changed

Lines changed: 60 additions & 39 deletions

File tree

tests/component-tests/events-tests/event-subscription.spec.ts

Lines changed: 9 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import {
1111
pollUpsertLetterLogForError,
1212
} from "tests/helpers/aws-cloudwatch-helper";
1313
import { supplierDataSetup } from "tests/helpers/suppliers-setup-helper";
14+
import { pollForLettersInDb } from "tests/helpers/poll-for-letters-helper";
1415

1516
let baseUrl: string;
1617

@@ -27,7 +28,6 @@ test.describe("Event Subscription SNS Tests", () => {
2728
logger.info(`Testing event subscription with domainId: ${domainId}`);
2829
const preparedEvent = createPreparedV1Event({ domainId });
2930
const response = await sendSnsEvent(preparedEvent);
30-
const RETRY_DELAY_MS = 30_000;
3131

3232
expect(response.MessageId).toBeTruthy();
3333

@@ -48,40 +48,14 @@ test.describe("Event Subscription SNS Tests", () => {
4848
// check if supplier exists in suppliers table
4949
await supplierDataSetup(supplierId);
5050

51-
const headers = createValidRequestHeaders(supplierId);
52-
let statusCode = 0;
53-
let letterStatus: string | undefined;
54-
55-
for (let attempt = 1; attempt <= 3; attempt++) {
56-
const getLetterResponse = await request.get(
57-
`${baseUrl}/${SUPPLIER_LETTERS}/${domainId}`,
58-
{
59-
headers,
60-
},
61-
);
62-
63-
statusCode = getLetterResponse.status();
64-
const responseBody = (await getLetterResponse.json()) as {
65-
data?: { attributes?: { status?: string } };
66-
};
67-
letterStatus = responseBody.data?.attributes?.status;
68-
69-
if (statusCode === 200 && letterStatus === "PENDING") {
70-
logger.info(
71-
`Attempt ${attempt}: Received status code ${statusCode} for domainId: ${domainId}`,
72-
);
73-
break;
74-
}
75-
76-
if (attempt < 3) {
77-
logger.info(
78-
`Attempt ${attempt}: Received status code ${statusCode} for domainId: ${domainId}. Retrying after ${RETRY_DELAY_MS / 1000} seconds...`,
79-
);
80-
await new Promise((resolve) => {
81-
setTimeout(resolve, RETRY_DELAY_MS); // Wait for 30 seconds before the next attempt
82-
});
83-
}
84-
}
51+
// poll for letter to be inserted in db with status PENDING
52+
const { letterStatus, statusCode } = await pollForLettersInDb(
53+
request,
54+
supplierId,
55+
domainId,
56+
baseUrl,
57+
);
58+
8559
expect(statusCode).toBe(200);
8660
expect(letterStatus).toBe("PENDING");
8761
});

tests/helpers/aws-cloudwatch-helper.ts

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const sleep = (ms: number) =>
1010
});
1111

1212
export async function pollSupplierAllocatorLogForResolvedSpec(
13-
domainId?: string,
13+
domainId: string,
1414
): Promise<string> {
1515
const intervalMs = 5000;
1616
const startTimeMs = Date.now() - 5 * 60_000;
@@ -27,9 +27,7 @@ export async function pollSupplierAllocatorLogForResolvedSpec(
2727
startTime: startTimeMs,
2828
interleaved: true,
2929
limit: 100,
30-
filterPattern: domainId
31-
? `"Sending message to upsert letter queue" "${domainId}"`
32-
: `"Sending message to upsert letter queue"`,
30+
filterPattern: `"Sending message to upsert letter queue" "${domainId}"`,
3331
}),
3432
);
3533

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
import type { APIRequestContext } from "@playwright/test";
2+
import { createValidRequestHeaders } from "tests/constants/request-headers";
3+
import { SUPPLIER_LETTERS } from "tests/constants/api-constants";
4+
import { logger } from "./pino-logger";
5+
6+
export async function pollForLettersInDb(
7+
request: APIRequestContext,
8+
supplierId: string,
9+
domainId: string,
10+
baseUrl: string,
11+
): Promise<{ letterStatus: string | undefined; statusCode: number }> {
12+
const headers = createValidRequestHeaders(supplierId);
13+
let statusCode = 0;
14+
let letterStatus: string | undefined;
15+
const RETRY_DELAY_MS = 10_000;
16+
const MAX_ATTEMPTS = 5;
17+
18+
for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {
19+
const getLetterResponse = await request.get(
20+
`${baseUrl}/${SUPPLIER_LETTERS}/${domainId}`,
21+
{
22+
headers,
23+
},
24+
);
25+
26+
statusCode = getLetterResponse.status();
27+
const responseBody = (await getLetterResponse.json()) as {
28+
data?: { attributes?: { status?: string } };
29+
};
30+
letterStatus = responseBody.data?.attributes?.status;
31+
32+
if (statusCode === 200 && letterStatus === "PENDING") {
33+
logger.info(
34+
`Attempt ${attempt}: Received status code ${statusCode} for domainId: ${domainId}`,
35+
);
36+
break;
37+
}
38+
39+
if (attempt < MAX_ATTEMPTS) {
40+
logger.info(
41+
`Attempt ${attempt}: Received status code ${statusCode} for domainId: ${domainId}. Retrying after ${RETRY_DELAY_MS / 1000} seconds...`,
42+
);
43+
await new Promise((resolve) => {
44+
setTimeout(resolve, RETRY_DELAY_MS); // Wait for 30 seconds before the next attempt
45+
});
46+
}
47+
}
48+
return { letterStatus, statusCode };
49+
}

0 commit comments

Comments
 (0)