UNPKG

node-lambda-postinstall

Version:

Command line tool for locally running and remotely deploying your node.js applications to Amazon Lambda.

162 lines (134 loc) 4.53 kB
var chai = require('chai'); var program = require('commander'); var fs = require('fs'); var Hoek = require('hoek'); var lambda = require('../lib/main'); var fs = require('fs'); var _ = require('lodash'); var zip = require('node-zip'); var assert = chai.assert; var originalProgram = { environment: 'development', accessKey: 'key', secretKey: 'secret', sessionToken: 'token', functionName: 'node-lambda', handler: 'index.handler', mode: 'event', role: 'some:arn:aws:iam::role', memorySize: 128, timeout: 3, description: '', runtime: 'nodejs', region: 'us-east-1,us-west-2,eu-west-1' }; var codeDirectory = lambda._codeDirectory(program); describe('node-lambda', function () { beforeEach(function () { program = Hoek.clone(originalProgram); }); it('version should be set', function () { assert.equal(lambda.version, '0.7.1'); }); describe('_params', function () { it('appends environment to original functionName', function () { var params = lambda._params(program); assert.equal(params.FunctionName, 'node-lambda-development'); }); it('appends environment to original functionName (production)', function () { program.environment = 'production'; var params = lambda._params(program); assert.equal(params.FunctionName, 'node-lambda-production'); }); it('appends version to original functionName', function () { program.version = '2015-02-01'; var params = lambda._params(program); assert.equal(params.FunctionName, 'node-lambda-development-2015-02-01'); }); }); describe('_zipfileTmpPath', function () { it('has the correct path', function () { var zipfileTmpPath = lambda._zipfileTmpPath(program); var value = zipfileTmpPath.indexOf(program.functionName) > 0; assert.equal(value, true); }); }); describe('_rsync', function () { it('rsync an index.js as well as other files', function (done) { lambda._rsync(program, codeDirectory, function (err, result) { var contents = fs.readdirSync(codeDirectory); result = _.includes(contents, 'index.js'); assert.equal(result, true); done(); }); }); }); describe('_npmInstall', function () { beforeEach(function (done) { lambda._rsync(program, codeDirectory, function (err) { if (err) { return done(err); } done(); }); }); it('_npm adds node_modules', function (done) { this.timeout(60000); // give it time to build the node modules lambda._npmInstall(program, codeDirectory, function (err, result) { var contents = fs.readdirSync(codeDirectory); result = _.includes(contents, 'index.js'); assert.equal(result, true); done(); }); }); }); describe('_zip', function () { beforeEach(function (done) { this.timeout(30000); // give it time to build the node modules lambda._rsync(program, codeDirectory, function (err) { if (err) { return done(err); } lambda._npmInstall(program, codeDirectory, function (err) { if (err) { return done(err); } done(); }); }); }); it('zips the file and has an index.js file', function (done) { this.timeout(30000); // give it time to zip lambda._zip(program, codeDirectory, function (err, data) { var archive = new zip(data); var contents = _.map(archive.files, function (f) { return f.name.toString(); }); var result = _.includes(contents, 'index.js'); assert.equal(result, true); done(); }); }); }); describe('environment variable injection', function () { beforeEach(function () { // Prep... fs.writeFileSync('tmp.env', 'FOO=bar\nBAZ=bing\n'); fs.writeFileSync('test.js', ''); }); afterEach(function () { fs.unlinkSync('tmp.env'); fs.unlinkSync('test.js'); }); it('should inject environment variables at the top of the entry point file', function () { // Run it... lambda._setEnvironmentVars({ configFile: 'tmp.env', handler: 'test.handler', }, process.cwd()); assert.equal(fs.readFileSync('test.js').toString(), '////////////////////////////////////\n' + '// "Environment Variables"\nprocess.env["FOO"]="bar";\n' + 'process.env["BAZ"]="bing";\n////////////////////////////////////\n\n'); }); }); });