diff --git a/bin/node-lambda b/bin/node-lambda index 91c6a937..39d59be2 100755 --- a/bin/node-lambda +++ b/bin/node-lambda @@ -91,8 +91,10 @@ program .version(lambda.version) .command('setup') .description('Sets up the .env file.') - .action(function () { - lambda.setup(); + .option('-j, --eventFile [' + EVENT_FILE + ']', 'Event JSON File', EVENT_FILE) + .option('-x, --contextFile [' + CONTEXT_FILE + ']', 'Context JSON File', CONTEXT_FILE) + .action(function (prg) { + lambda.setup(prg); }); program.parse(process.argv); diff --git a/lib/main.js b/lib/main.js index a7ac5141..cd907c91 100644 --- a/lib/main.js +++ b/lib/main.js @@ -17,9 +17,9 @@ var Lambda = function () { return this; }; -Lambda.prototype._createSampleFile = function (file, newFileName) { - var exampleFile = process.cwd() + '/' + (file || newFileName); - var boilerplateFile = __dirname + '/' + file + '.example'; +Lambda.prototype._createSampleFile = function (file, boilerplateName) { + var exampleFile = process.cwd() + '/' + file; + var boilerplateFile = __dirname + '/' + (boilerplateName || file) + '.example'; if (!fs.existsSync(exampleFile)) { fs.writeFileSync(exampleFile, fs.readFileSync(boilerplateFile)); @@ -27,17 +27,17 @@ Lambda.prototype._createSampleFile = function (file, newFileName) { } }; -Lambda.prototype.setup = function () { +Lambda.prototype.setup = function (program) { console.log('Running setup.'); - this._createSampleFile('.env'); - this._createSampleFile('event.json'); - this._createSampleFile('deploy.env'); - this._createSampleFile('context.json'); - console.log('Setup done. Edit the .env, deploy.env, context.json and event.json files as needed.'); + this._createSampleFile('.env', '.env'); + this._createSampleFile(program.eventFile, 'event.json'); + this._createSampleFile('deploy.env', 'deploy.env'); + this._createSampleFile(program.contextFile, 'context.json'); + console.log('Setup done. Edit the .env, deploy.env, ' + program.contextFile + ' and ' + program.eventFile + ' files as needed.'); }; Lambda.prototype.run = function (program) { - this._createSampleFile('event.json', program.eventFile); + this._createSampleFile(program.eventFile, 'event.json'); var splitHandler = program.handler.split('.'); var filename = splitHandler[0] + '.js'; var handlername = splitHandler[1]; @@ -322,7 +322,7 @@ Lambda.prototype._uploadNew = function(lambda, params, cb) { }; Lambda.prototype._archive = function (program, archive_callback) { - this._createSampleFile('.env'); + this._createSampleFile('.env', '.env'); // Warn if not building on 64-bit linux var arch = process.platform + '.' + process.arch; diff --git a/test/main.js b/test/main.js index 721a2c56..ba34fa1a 100644 --- a/test/main.js +++ b/test/main.js @@ -21,7 +21,9 @@ var originalProgram = { timeout: 3, description: '', runtime: 'nodejs', - region: 'us-east-1,us-west-2,eu-west-1' + region: 'us-east-1,us-west-2,eu-west-1', + eventFile: 'event.json', + contextFile: 'context.json' }; var codeDirectory = lambda._codeDirectory(program); @@ -267,4 +269,59 @@ describe('node-lambda', function () { }); }); + + describe('create sample files', function () { + + afterEach(function () { + fs.unlinkSync('.env'); + fs.unlinkSync('context.json'); + fs.unlinkSync('event.json'); + fs.unlinkSync('deploy.env'); + }); + + it('should create sample files', function () { + lambda.setup(program); + + var envBoilerplateFile = __dirname + '/../lib/.env.example'; + var contextBoilerplateFile = __dirname + '/../lib/context.json.example'; + var eventBoilerplateFile = __dirname + '/../lib/event.json.example'; + var deployBoilerplateFile = __dirname + '/../lib/deploy.env.example'; + + assert.equal(fs.readFileSync('.env').toString(), fs.readFileSync(envBoilerplateFile).toString()); + assert.equal(fs.readFileSync('context.json').toString(), fs.readFileSync(contextBoilerplateFile).toString()); + assert.equal(fs.readFileSync('event.json').toString(), fs.readFileSync(eventBoilerplateFile).toString()); + assert.equal(fs.readFileSync('deploy.env').toString(), fs.readFileSync(deployBoilerplateFile).toString()); + }); + }); + + describe('check env vars before create sample files', function () { + + beforeEach(function () { + fs.writeFileSync('newContext.json', '{"FOO"="bar"\n"BAZ"="bing"\n}'); + fs.writeFileSync('newEvent.json', '{"FOO"="bar"}'); + }); + + afterEach(function () { + fs.unlinkSync('.env'); + fs.unlinkSync('newContext.json'); + fs.unlinkSync('newEvent.json'); + fs.unlinkSync('deploy.env'); + }); + + it('should use existing sample files', function () { + program.eventFile = 'newEvent.json'; + program.contextFile = 'newContext.json'; + + lambda.setup(program); + + var envBoilerplateFile = __dirname + '/../lib/.env.example'; + var deployBoilerplateFile = __dirname + '/../lib/deploy.env.example'; + + assert.equal(fs.readFileSync('.env').toString(), fs.readFileSync(envBoilerplateFile).toString()); + assert.equal(fs.readFileSync('newContext.json').toString(), '{"FOO"="bar"\n"BAZ"="bing"\n}'); + assert.equal(fs.readFileSync('newEvent.json').toString(), '{"FOO"="bar"}'); + assert.equal(fs.readFileSync('deploy.env').toString(), fs.readFileSync(deployBoilerplateFile).toString()); + }); + + }); });