Skip to content

Commit d3c3425

Browse files
authored
Merge pull request #408 from PermanentOrg/fix_sns_publishing
Fix SNS publishing bug
2 parents 9410949 + 2e7f4ca commit d3c3425

File tree

2 files changed

+98
-4
lines changed

2 files changed

+98
-4
lines changed

packages/api/src/publisher_client.test.ts

Lines changed: 97 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,8 @@
1-
import { PublishBatchCommand, SNSClient } from "@aws-sdk/client-sns";
1+
import {
2+
PublishBatchCommand,
3+
SNSClient,
4+
type PublishBatchInput,
5+
} from "@aws-sdk/client-sns";
26
import { publisherClient } from "./publisher_client";
37

48
const mockSend = jest.fn();
@@ -15,6 +19,13 @@ describe("batchPublishMessages", () => {
1519
send: mockSend.mockResolvedValue({ Failed: [] }),
1620
}),
1721
);
22+
23+
jest.mocked(PublishBatchCommand).mockImplementation(
24+
jest.fn().mockImplementation((input: PublishBatchInput) => ({
25+
__input: input,
26+
})),
27+
);
28+
1829
const messages = [
1930
{ id: "1", body: "message 1" },
2031
{ id: "2", body: "message 2" },
@@ -27,16 +38,99 @@ describe("batchPublishMessages", () => {
2738
{ id: "9", body: "message 9" },
2839
{ id: "10", body: "message 10" },
2940
{ id: "11", body: "message 11" },
41+
{ id: "12", body: "message 12" },
42+
{ id: "13", body: "message 13" },
43+
{ id: "14", body: "message 14" },
44+
{ id: "15", body: "message 15" },
45+
{ id: "16", body: "message 16" },
46+
{ id: "17", body: "message 17" },
47+
{ id: "18", body: "message 18" },
48+
{ id: "19", body: "message 19" },
49+
{ id: "20", body: "message 20" },
50+
{ id: "21", body: "message 21" },
3051
];
3152

3253
const result = await publisherClient.batchPublishMessages(
3354
"topic",
3455
messages,
3556
);
3657

37-
expect(mockSend).toHaveBeenCalledTimes(2);
58+
expect(mockSend).toHaveBeenCalledTimes(3);
59+
const {
60+
mock: {
61+
calls: [firstCallArguments],
62+
},
63+
} = mockSend as {
64+
mock: { calls: Array<Array<{ __input: PublishBatchInput }>> };
65+
};
66+
const {
67+
mock: {
68+
calls: [, secondCallArguments],
69+
},
70+
} = mockSend as {
71+
mock: { calls: Array<Array<{ __input: PublishBatchInput }>> };
72+
};
73+
const {
74+
mock: {
75+
calls: [, , thirdCallArguments],
76+
},
77+
} = mockSend as {
78+
mock: { calls: Array<Array<{ __input: PublishBatchInput }>> };
79+
};
80+
expect(firstCallArguments).toBeDefined();
81+
if (firstCallArguments !== undefined) {
82+
expect(firstCallArguments[0]).toBeDefined();
83+
if (firstCallArguments[0] !== undefined) {
84+
expect(firstCallArguments[0].__input).toEqual({
85+
TopicArn: "topic",
86+
PublishBatchRequestEntries: [
87+
{ Id: "1", Message: "message 1" },
88+
{ Id: "2", Message: "message 2" },
89+
{ Id: "3", Message: "message 3" },
90+
{ Id: "4", Message: "message 4" },
91+
{ Id: "5", Message: "message 5" },
92+
{ Id: "6", Message: "message 6" },
93+
{ Id: "7", Message: "message 7" },
94+
{ Id: "8", Message: "message 8" },
95+
{ Id: "9", Message: "message 9" },
96+
{ Id: "10", Message: "message 10" },
97+
],
98+
});
99+
}
100+
}
101+
expect(secondCallArguments).toBeDefined();
102+
if (secondCallArguments !== undefined) {
103+
expect(secondCallArguments[0]).toBeDefined();
104+
if (secondCallArguments[0] !== undefined) {
105+
expect(secondCallArguments[0].__input).toEqual({
106+
TopicArn: "topic",
107+
PublishBatchRequestEntries: [
108+
{ Id: "11", Message: "message 11" },
109+
{ Id: "12", Message: "message 12" },
110+
{ Id: "13", Message: "message 13" },
111+
{ Id: "14", Message: "message 14" },
112+
{ Id: "15", Message: "message 15" },
113+
{ Id: "16", Message: "message 16" },
114+
{ Id: "17", Message: "message 17" },
115+
{ Id: "18", Message: "message 18" },
116+
{ Id: "19", Message: "message 19" },
117+
{ Id: "20", Message: "message 20" },
118+
],
119+
});
120+
}
121+
}
122+
expect(thirdCallArguments).toBeDefined();
123+
if (thirdCallArguments !== undefined) {
124+
expect(thirdCallArguments[0]).toBeDefined();
125+
if (thirdCallArguments[0] !== undefined) {
126+
expect(thirdCallArguments[0].__input).toEqual({
127+
TopicArn: "topic",
128+
PublishBatchRequestEntries: [{ Id: "21", Message: "message 21" }],
129+
});
130+
}
131+
}
38132
expect(result.failedMessages.length).toBe(0);
39-
expect(result.messagesSent).toBe(11);
133+
expect(result.messagesSent).toBe(21);
40134
});
41135

42136
test("should report failures", async () => {

packages/api/src/publisher_client.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ const batchPublishMessages = async (
2323
const chunksOfMessages = [
2424
...Array(Math.ceil(messages.length / CHUNK_SIZE)).keys(),
2525
].map((chunkIndex) =>
26-
messages.slice(chunkIndex * CHUNK_SIZE, chunkIndex++ * CHUNK_SIZE),
26+
messages.slice(chunkIndex * CHUNK_SIZE, (chunkIndex + 1) * CHUNK_SIZE),
2727
);
2828

2929
const responses = await Promise.all(

0 commit comments

Comments
 (0)