|
9 | 9 | } from "aws-lambda"; |
10 | 10 | import { mockDeep } from "jest-mock-extended"; |
11 | 11 | import { MI } from "@internal/datastore"; |
12 | | -import { createHandler } from "../mi-updates-transformer"; |
| 12 | +import createHandler from "../mi-updates-transformer"; |
13 | 13 | import { Deps } from "../deps"; |
14 | 14 | import { EnvVars } from "../env"; |
15 | 15 | import { mapMIToCloudEvent } from "../mappers/mi-mapper"; |
@@ -69,6 +69,29 @@ function generateInsertRecord(newMI: MI): DynamoDBRecord { |
69 | 69 | }; |
70 | 70 | } |
71 | 71 |
|
| 72 | +function generateDeleteRecord(oldMI: MI): DynamoDBRecord { |
| 73 | + const oldImage = Object.fromEntries( |
| 74 | + Object.entries(oldMI).map(([key, value]) => [key, toAttr(value)]), |
| 75 | + ); |
| 76 | + return { |
| 77 | + eventName: "REMOVE", |
| 78 | + dynamodb: { OldImage: oldImage }, |
| 79 | + }; |
| 80 | +} |
| 81 | + |
| 82 | +function generateModifyRecord(oldMI: MI, newMI: MI): DynamoDBRecord { |
| 83 | + const oldImage = Object.fromEntries( |
| 84 | + Object.entries(oldMI).map(([key, value]) => [key, toAttr(value)]), |
| 85 | + ); |
| 86 | + const newImage = Object.fromEntries( |
| 87 | + Object.entries(newMI).map(([key, value]) => [key, toAttr(value)]), |
| 88 | + ); |
| 89 | + return { |
| 90 | + eventName: "MODIFY", |
| 91 | + dynamodb: { OldImage: oldImage, NewImage: newImage }, |
| 92 | + }; |
| 93 | +} |
| 94 | + |
72 | 95 | describe("mi-updates-transformer Lambda", () => { |
73 | 96 | const mockedDeps: jest.Mocked<Deps> = { |
74 | 97 | snsClient: { send: jest.fn() } as unknown as SNSClient, |
@@ -122,6 +145,28 @@ describe("mi-updates-transformer Lambda", () => { |
122 | 145 | expect(mockedDeps.snsClient.send).not.toHaveBeenCalled(); |
123 | 146 | }); |
124 | 147 |
|
| 148 | + it("does not publish modify data", async () => { |
| 149 | + const handler = createHandler(mockedDeps); |
| 150 | + const miEvents = generateMIEvents(2); |
| 151 | + |
| 152 | + const updateMI = generateModifyRecord(miEvents[0], miEvents[1]); |
| 153 | + const testData = generateKinesisEvent([updateMI]); |
| 154 | + await handler(testData, mockDeep<Context>(), jest.fn()); |
| 155 | + |
| 156 | + expect(mockedDeps.snsClient.send).not.toHaveBeenCalled(); |
| 157 | + }); |
| 158 | + |
| 159 | + it("does not publish delete data", async () => { |
| 160 | + const handler = createHandler(mockedDeps); |
| 161 | + const miEvents = generateMIEvents(2); |
| 162 | + |
| 163 | + const deleteMI = generateDeleteRecord(miEvents[0]); |
| 164 | + const testData = generateKinesisEvent([deleteMI]); |
| 165 | + await handler(testData, mockDeep<Context>(), jest.fn()); |
| 166 | + |
| 167 | + expect(mockedDeps.snsClient.send).not.toHaveBeenCalled(); |
| 168 | + }); |
| 169 | + |
125 | 170 | it("batches mutiple records into a single call to SNS", async () => { |
126 | 171 | const handler = createHandler(mockedDeps); |
127 | 172 | const miEvents = generateMIEvents(10); |
|
0 commit comments