UNPKG

@incdevco/framework

Version:
279 lines (184 loc) 5.78 kB
var Expect = require('chai').expect; var Mock = require('../../mock'); var sinon = require('sinon'); var Lambda = require('./index'); var sandbox = sinon.sandbox.create(); describe('lambda queue-consumer', function () { 'use strict'; var config, lambda, mock; beforeEach(function () { config = { queueName: 'queue-name', sqs: {} }; lambda = new Lambda(config); mock = new Mock(); sandbox.stub(lambda.console, 'log'); }); afterEach(function() { sandbox.verifyAndRestore(); }); describe('deleteMessage', function () { it('should', function (done) { var expected, message; expected = 'expected'; message = new Lambda.Message(lambda.sqs, 'QueueUrl', { ReceiptHandle: 'ReceiptHandle' }); mock.mock(lambda.sqs) .expect('deleteMessage') .with({ QueueUrl: 'QueueUrl', ReceiptHandle: message.receiptHandle }) .willReturnAwsPromiseResolve(expected); message.delete() .then(function (result) { Expect(result).to.equal(expected, 'result'); return mock.done(done); }) .catch(done); }); }); describe('getQueueName', function() { it('should use name when supplied', function () { var event, expected, name, result; event = { detail: { stage: 'stage' } }; name = 'name'; expected = undefined + '-' + name; result = lambda.getQueueName(event, name); Expect(result).to.equal(expected, 'result'); }); }); describe('handler', function() { it('should', function (done) { var context, event, expected; event = require('./example-event.json'); expected = { attempts: 1, messages: 1 }; context = { fail: done, succeed: function (result) { try { Expect(result).to.deep.equal(expected, 'result'); mock.done(done); } catch (exception) { done(exception); } } }; var mocked = mock.mock(lambda.sqs); mocked.expect('getQueueUrl') .with({ QueueName: 'queue-name' }) .willReturnAwsPromiseResolve({ QueueUrl: 'QueueUrl' }); mocked.expect('receiveMessage') .with({ AttributeNames: undefined, MaxNumberOfMessages: 10, MessageAttributeNames: undefined, QueueUrl: 'QueueUrl', VisibilityTimeout: undefined, WaitTimeSeconds: 20 }) .willReturnAwsPromiseResolve({ Messages: [ {} ] }); lambda.handler(event, context); }); it('should do nothing when no messages are received', function (done) { var context, event, expected; event = require('./example-event.json'); expected = { attempts: 1, messages: 0 }; context = { fail: done, succeed: function (result) { try { Expect(result).to.deep.equal(expected, 'result'); mock.done(done); } catch (exception) { done(exception); } } }; var mocked = mock.mock(lambda.sqs); mocked.expect('getQueueUrl') .with({ QueueName: 'queue-name' }) .willReturnAwsPromiseResolve({ QueueUrl: 'QueueUrl' }); mocked.expect('receiveMessage') .with({ AttributeNames: undefined, MaxNumberOfMessages: 10, MessageAttributeNames: undefined, QueueUrl: 'QueueUrl', VisibilityTimeout: undefined, WaitTimeSeconds: 20 }) .willReturnAwsPromiseResolve({ }); lambda.handler(event, context); }); it('should catch any exception thrown by handleMessage', function (done) { var context, event, expected; event = require('./example-event.json'); expected = new Error('expected'); context = { succeed: done, fail: function (exception) { try { Expect(exception).to.deep.equal(expected, 'exception'); mock.done(done); } catch (exception) { done(exception); } } }; var mocked = mock.mock(lambda.sqs); mocked.expect('getQueueUrl') .with({ QueueName: 'queue-name' }) .willReturnAwsPromiseResolve({ QueueUrl: 'QueueUrl' }); mocked.expect('receiveMessage') .with({ AttributeNames: undefined, MaxNumberOfMessages: 10, MessageAttributeNames: undefined, QueueUrl: 'QueueUrl', VisibilityTimeout: undefined, WaitTimeSeconds: 20 }) .willReturnAwsPromiseResolve({ Messages: [ {} ] }); mock.mock(lambda).expect('handleMessage') .willReject(expected); lambda.handler(event, context); }); }); afterEach(function () { mock.restore(); }); });