Created
November 14, 2020 15:25
-
-
Save OssiPesonen/1e0909903f5efec734e152a6cc81e688 to your computer and use it in GitHub Desktop.
Lambda SES bounce event handler unit test
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
const AWS = require('aws-sdk-mock'); | |
const assert = require('assert'); | |
const testFn = require('lambda-tester'); | |
const receiver = require('../index').handler; | |
const complaintNotification = require('./resources/complaintNotification.json'); | |
const missingHeaders = require('./resources/missingHeaders.json'); | |
const missingTargetArn = require('./resources/missingTargetArnHeader.json'); | |
const bounceNotification = require('./resources/bounceNotification.json'); | |
process.env.DLQ_URL = 'http://localhost'; | |
describe('Testing Lambda handler', async (done) => { | |
describe('Test non-Bounce message', function () { | |
it('Should return 200 and return not a bounce message', async function () { | |
AWS.mock('SQS', 'sendMessage', (params) => { | |
assert.strictEqual(params.MessageBody, JSON.stringify(complaintNotification)); | |
assert.strictEqual(params.QueueUrl, 'http://localhost'); | |
return Promise.resolve('Success'); | |
}); | |
let params = { | |
Records: [{ | |
Sns: { | |
Message: JSON.stringify(complaintNotification) | |
} | |
}] | |
}; | |
await testFn(receiver) | |
.event(params) | |
.expectResolve((result) => { | |
assert.strictEqual(result.statusCode, 200); | |
assert.strictEqual(result.body, '{"message":"Not a bounce message"}'); | |
}); | |
AWS.restore('SQS', 'sendMessage'); | |
}); | |
it('Should return 200, with original headers missing message', async function () { | |
AWS.mock('SQS', 'sendMessage', (params) => { | |
assert.strictEqual(params.MessageBody, JSON.stringify(missingHeaders)); | |
assert.strictEqual(params.QueueUrl, 'http://localhost'); | |
return Promise.resolve('Success'); | |
}); | |
let params = { | |
Records: [{ | |
Sns: { | |
Message: JSON.stringify(missingHeaders) | |
} | |
}] | |
}; | |
await testFn(receiver) | |
.event(params) | |
.expectResolve((result) => { | |
assert.strictEqual(result.statusCode, 200); | |
assert.strictEqual(result.body, '{"message":"Original message headers missing"}'); | |
}); | |
AWS.restore('SQS', 'sendMessage'); | |
}); | |
it('Should return 200, with TargetArn header message missing', async function () { | |
AWS.mock('SQS', 'sendMessage', (params) => { | |
assert.strictEqual(params.MessageBody, JSON.stringify(missingTargetArn)); | |
assert.strictEqual(params.QueueUrl, 'http://localhost'); | |
return Promise.resolve('Success'); | |
}); | |
let params = { | |
Records: [{ | |
Sns: { | |
Message: JSON.stringify(missingTargetArn) | |
} | |
}] | |
}; | |
await testFn(receiver) | |
.event(params) | |
.expectResolve((result) => { | |
assert.strictEqual(result.statusCode, 200); | |
assert.strictEqual(result.body, '{"message":"Missing TargetArn header"}'); | |
}); | |
AWS.restore('SQS', 'sendMessage'); | |
}); | |
}); | |
describe('Test successful message delivery', function () { | |
it('Should return 200, with successful SNS call', async function () { | |
AWS.mock('SNS', 'publish', (params) => { | |
assert.strictEqual(params.Message, '{"messageId":"00000138111222aa-33322211-cccc-cccc-cccc-ddddaaaa0680-000000","bounceType":"Permanent","bounceSubType":"General","timestamp":"2016-01-27T14:59:38.237Z","bouncedRecipients":[{"emailAddress":"jane@example.com"}]}'); | |
assert.strictEqual(params.Subject, 'Here is a bounced email notification') | |
assert.strictEqual(params.TargetArn, 'arn:sns:batman:is:bruce:wayne'); | |
return Promise.resolve('Success'); | |
}); | |
let params = { | |
Records: [{ | |
Sns: { | |
Message: JSON.stringify(bounceNotification) | |
} | |
}] | |
}; | |
await testFn(receiver) | |
.event(params) | |
.expectResolve((result) => { | |
assert.strictEqual(result.statusCode, 200); | |
assert.strictEqual(result.body, '{"message":"ok"}'); | |
}); | |
AWS.restore('SNS', 'publish'); | |
}); | |
}); | |
done(); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment