@incdevco/framework
Version:
node.js lambda framework
279 lines (184 loc) • 5.78 kB
JavaScript
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();
});
});