conan-aws-lambda
Version:
AWS Lambda plugin for Conan: The Deployer.
141 lines (118 loc) • 3.12 kB
JavaScript
import ConanAwsLambda from "../../../lib/components/conanAwsLambda.js";
import sinon from "sinon";
describe("lambda.invoke(payload, callback)", () => {
let mockConan,
lambda,
lambdaName,
payload,
lambdaConstructorSpy,
invoke,
invokeError,
invokeReturnData;
class MockAWSLambda {
constructor(...options) {
lambdaConstructorSpy(...options);
}
}
beforeEach(() => {
payload = {
name: "Bob"
};
lambdaConstructorSpy = sinon.spy();
const MockAWS = {
Lambda: MockAWSLambda
};
mockConan = {
config: {
region: "us-east-1"
},
steps: {
libraries: {
AWS: MockAWS
},
add: () => {}
}
};
invokeReturnData = "";
invoke = MockAWSLambda.prototype.invoke = sinon.spy((parameters, invokeCallback) => {
/* eslint-disable quotes */
invokeReturnData = `{"message": "Hello, World!"}`;
invokeCallback(null, {
StatusCode: 200,
Payload: invokeReturnData
});
});
lambdaName = "MyLambda";
lambda = new ConanAwsLambda(mockConan, lambdaName);
});
it("should set the correct region for the lambda constructor", done => {
lambda.invoke(payload, () => {
lambdaConstructorSpy.calledWith({
region: mockConan.config.region
}).should.be.true;
done();
});
});
it("should call AWS Lambda with the correct parameters", done => {
lambda.invoke(payload, () => {
invoke.calledWith({
FunctionName: lambda.name(),
Payload: JSON.stringify(payload)
}).should.be.true;
done();
});
});
it("should call AWS Lambda with the correct alias if provided", done => {
lambda.alias("development");
lambda.invoke(payload, () => {
invoke.calledWith({
FunctionName: lambda.name(),
Qualifier: lambda.alias(),
Payload: JSON.stringify(payload)
}).should.be.true;
done();
});
});
describe("(When successful)", () => {
it("should return the status code from AWS Lambda", () => {
lambda.invoke(payload, (error, data) => {
data.statusCode.should.eql(200);
});
});
it("should return the JSON parsed payload from AWS Lambda", () => {
lambda.invoke(payload, (error, data) => {
data.payload.should.eql(JSON.parse(invokeReturnData));
});
});
// it("should return the status code from AWS Lambda", () => {
// lambda.invoke(payload, (error, data) => {
// data.statusCode.should.eql(200);
// });
// });
});
describe("(When AWS Lambda returns an error)", () => {
beforeEach(() => {
MockAWSLambda.prototype.invoke = sinon.spy((parameters, callback) => {
invokeError = new Error("Lambda invoke failed!");
callback(invokeError);
});
});
it("should return the error in the callback", done => {
lambda.invoke(payload, error => {
error.should.eql(invokeError);
done();
});
});
});
describe("(When region is not set on conan)", () => {
beforeEach(() => {
delete mockConan.config.region;
});
it("should return an error in the callback", done => {
lambda.invoke(payload, error => {
error.message.should.eql("conan.config.region is required to use .invoke().");
done();
});
});
});
});