diff --git a/Gruntfile.js b/Gruntfile.js index 8b8d605..9baf38e 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -53,6 +53,21 @@ module.exports = function (grunt) { handler: 'myfunction' } }, + expected_failure_options: { + options: { + file_name: 'test/fixtures/failing_index.js', + event: 'test/fixtures/event.json', + handler: 'myfunction', + expect_fail: true + } + }, + unexpected_success_options: { + options: { + file_name: 'test/fixtures/index.js', + event: 'test/fixtures/event.json', + expect_fail: true + } + }, package_folder_options: { options: { package_folder: 'test/fixtures/package_folder_option', diff --git a/test/expected/custom_options b/test/expected/custom_options index ea6a5f4..b881bc2 100644 --- a/test/expected/custom_options +++ b/test/expected/custom_options @@ -4,8 +4,8 @@ value1 = value4 value2 = value5 value3 = value6 -Success! Message: ------------------- +Expected Success! Message: +----------------------------- Hello World Done, without errors. \ No newline at end of file diff --git a/test/expected/default_options b/test/expected/default_options index dd0ac50..4e38cec 100644 --- a/test/expected/default_options +++ b/test/expected/default_options @@ -4,8 +4,8 @@ value1 = value1 value2 = value2 value3 = value3 -Success! Message: ------------------- +Expected Success! Message: +----------------------------- Hello World Done, without errors. \ No newline at end of file diff --git a/test/expected/expected_failure_options b/test/expected/expected_failure_options new file mode 100644 index 0000000..679f84c --- /dev/null +++ b/test/expected/expected_failure_options @@ -0,0 +1,11 @@ +Running "lambda_invoke:expected_failure_options" (lambda_invoke) task + +value1 = value1 +value2 = value2 +value3 = value3 + +Expected Failure! Message: +----------------------------- +Hello World + +Done, without errors. \ No newline at end of file diff --git a/test/expected/failure_options b/test/expected/failure_options index a432f79..5940e3b 100644 --- a/test/expected/failure_options +++ b/test/expected/failure_options @@ -4,8 +4,8 @@ value1 = value1 value2 = value2 value3 = value3 -Failure! Message: ------------------- +Unexpected Failure! Message: +----------------------------- Hello World Warning: Task "lambda_invoke:failure_options" failed. Use --force to continue. diff --git a/test/expected/unexpected_success_options b/test/expected/unexpected_success_options new file mode 100644 index 0000000..701e635 --- /dev/null +++ b/test/expected/unexpected_success_options @@ -0,0 +1,12 @@ +Running "lambda_invoke:unexpected_success_options" (lambda_invoke) task + +value1 = value1 +value2 = value2 +value3 = value3 + +Unexpected Success! Message: +----------------------------- +Hello World +Warning: Task "lambda_invoke:unexpected_success_options" failed. Use --force to continue. + +Aborted due to warnings. \ No newline at end of file diff --git a/test/integ/lambda_invoke_test.js b/test/integ/lambda_invoke_test.js index 9261d97..0baef22 100644 --- a/test/integ/lambda_invoke_test.js +++ b/test/integ/lambda_invoke_test.js @@ -74,6 +74,34 @@ exports.lambda_invoke = { test.done(); }); }, + expected_failure_options: function (test) { + test.expect(1); + + grunt.util.spawn({ + grunt: true, + args: ['lambda_invoke:expected_failure_options', '--no-color'] + }, function (err, result, code) { + + var expected = getNormalizedFile('test/expected/expected_failure_options'); + var actual = grunt.util.normalizelf(result.stdout); + test.equal(actual, expected); + test.done(); + }); + }, + unexpected_success_options: function (test) { + test.expect(1); + + grunt.util.spawn({ + grunt: true, + args: ['lambda_invoke:unexpected_success_options', '--no-color'] + }, function (err, result, code) { + + var expected = getNormalizedFile('test/expected/unexpected_success_options'); + var actual = grunt.util.normalizelf(result.stdout); + test.equal(actual, expected); + test.done(); + }); + }, package_folder_options: function (test) { test.expect(2); @@ -85,9 +113,9 @@ exports.lambda_invoke = { var cwd = process.cwd(); // test cwd inside the function - var expected_cwd = 'Running "lambda_invoke:package_folder_options" (lambda_invoke) task\n\n\nSuccess! Message:\n------------------\n' + + var expected_cwd = grunt.util.normalizelf('Running "lambda_invoke:package_folder_options" (lambda_invoke) task\n\n\nExpected Success! Message:\n-----------------------------\n' + path.join(cwd, 'test/fixtures/package_folder_option') + - '\n\nDone, without errors.'; + '\n\nDone, without errors.'); var actual_cwd = grunt.util.normalizelf(result.stdout); test.equal(actual_cwd, expected_cwd); diff --git a/test/unit/invoke_task_test.js b/test/unit/invoke_task_test.js index e116477..a45d84a 100644 --- a/test/unit/invoke_task_test.js +++ b/test/unit/invoke_task_test.js @@ -88,7 +88,7 @@ invokeTaskTests.testLambdaEnvironment = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -110,7 +110,7 @@ invokeTaskTests.testDoneSucceed = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -132,8 +132,8 @@ invokeTaskTests.testDoneWithObjectStatus = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); - test.equal(harness.output[4], '{"some":"object"}'); + test.equal(harness.output[2], 'Expected Success! Message:'); + test.equal(harness.output[4], '{\n "some": "object"\n}'); test.done(); } }; @@ -155,7 +155,7 @@ invokeTaskTests.testDoneUndefined = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -178,8 +178,8 @@ invokeTaskTests.testDoneError = function(test) { callback: function(harness) { test.equal(harness.status, false); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Failure! Message:'); - test.equal(harness.output[4], '{"message":"Some Error"}'); + test.equal(harness.output[2], 'Unexpected Failure! Message:'); + test.equal(harness.output[4], '{\n "message": "Some Error"\n}'); test.done(); } }; @@ -201,8 +201,8 @@ invokeTaskTests.testFail = function(test) { callback: function(harness) { test.equal(harness.status, false); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Failure! Message:'); - test.equal(harness.output[4], '{"message":"Some Error"}'); + test.equal(harness.output[2], 'Unexpected Failure! Message:'); + test.equal(harness.output[4], '{\n "message": "Some Error"\n}'); test.done(); } }; @@ -225,7 +225,7 @@ invokeTaskTests.testFileName = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -249,7 +249,7 @@ invokeTaskTests.testHandler = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -273,7 +273,7 @@ invokeTaskTests.testFileName = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -302,7 +302,7 @@ invokeTaskTests.testEvent = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -331,7 +331,7 @@ invokeTaskTests.testClientContext = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -360,7 +360,7 @@ invokeTaskTests.testIdentity = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -389,7 +389,7 @@ invokeTaskTests.testPackageFolder = function(test) { test.equal(process.cwd(), original); test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -414,7 +414,7 @@ invokeTaskTests.testNoClientContext = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -439,7 +439,7 @@ invokeTaskTests.testNoIdentity = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -460,7 +460,7 @@ invokeTaskTests.testCallbackSucceed = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -482,8 +482,8 @@ invokeTaskTests.testCallbackWithObjectStatus = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); - test.equal(harness.output[4], '{"some":"object"}'); + test.equal(harness.output[2], 'Expected Success! Message:'); + test.equal(harness.output[4], '{\n "some": "object"\n}'); test.done(); } }; @@ -505,7 +505,7 @@ invokeTaskTests.testCallbackUndefined = function(test) { callback: function(harness) { test.equal(harness.status, true); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Success! Message:'); + test.equal(harness.output[2], 'Expected Success! Message:'); test.equal(harness.output[4], 'My Message'); test.done(); } @@ -528,13 +528,56 @@ invokeTaskTests.testCallbackError = function(test) { callback: function(harness) { test.equal(harness.status, false); test.equal(harness.output.length, 5); - test.equal(harness.output[2], 'Failure! Message:'); - test.equal(harness.output[4], '{"message":"Some Error"}'); + test.equal(harness.output[2], 'Unexpected Failure! Message:'); + test.equal(harness.output[4], '{\n "message": "Some Error"\n}'); test.done(); } }; gruntMock.execute(invokeTask.getHandler, harnessParams); }; +invokeTaskTests.testUnexpectedSuccess = function(test) { + test.expect(4); + + setLambdaFunction(function(event, context, callback) { + callback(null, 'My message'); + }); + + var invokeTask = require('../../utils/invoke_task'); + + var harnessParams = { + options: {expect_fail: true}, + callback: function(harness) { + test.equal(harness.status, false); + test.equal(harness.output.length, 5); + test.equal(harness.output[2], 'Unexpected Success! Message:'); + test.equal(harness.output[4], 'My message'); + test.done(); + } + }; + gruntMock.execute(invokeTask.getHandler, harnessParams); +}; + +invokeTaskTests.testExpectedFailure = function(test) { + test.expect(4); + + setLambdaFunction(function(event, context, callback) { + callback({message: 'Some Error'}, 'My message'); + }); + + var invokeTask = require('../../utils/invoke_task'); + + var harnessParams = { + options: {expect_fail: true}, + callback: function(harness) { + test.equal(harness.status, true); + test.equal(harness.output.length, 5); + test.equal(harness.output[2], 'Expected Failure! Message:'); + test.equal(harness.output[4], '{\n "message": "Some Error"\n}'); + test.done(); + } + }; + gruntMock.execute(invokeTask.getHandler, harnessParams); +}; module.exports = invokeTaskTests; \ No newline at end of file diff --git a/utils/invoke_task.js b/utils/invoke_task.js index a9db0b9..2e8ea15 100644 --- a/utils/invoke_task.js +++ b/utils/invoke_task.js @@ -27,7 +27,8 @@ invokeTask.getHandler = function (grunt) { 'file_name': 'index.js', 'event': 'event.json', 'client_context': 'client_context.json', - 'identity': 'identity.json' + 'identity': 'identity.json', + 'expect_fail': false }); grunt.log.writeln(""); @@ -74,22 +75,22 @@ invokeTask.getHandler = function (grunt) { process.chdir(cwd); } grunt.log.writeln(""); - grunt.log.writeln("Success! Message:"); - grunt.log.writeln("------------------"); - var msg = (typeof(result) === 'object') ? JSON.stringify(result) : result; + grunt.log.writeln((options.expect_fail ? "Unexpected" : "Expected") + " Success! Message:"); + grunt.log.writeln("-----------------------------"); + var msg = (typeof(result) === 'object') ? JSON.stringify(result, null, 2) : result; grunt.log.writeln((typeof(result) !== 'undefined') ? msg : "Successful!"); - done(true); + done(true && !options.expect_fail); }, fail: function (error) { if (cwd) { process.chdir(cwd); } grunt.log.writeln(""); - grunt.log.writeln("Failure! Message:"); - grunt.log.writeln("------------------"); - var msg = (typeof(error) === 'object') ? JSON.stringify(error) : error; + grunt.log.writeln((options.expect_fail ? "Expected" : "Unexpected") + " Failure! Message:"); + grunt.log.writeln("-----------------------------"); + var msg = (typeof(error) === 'object') ? JSON.stringify(error, null, 2) : error; grunt.log.writeln((typeof(error) !== 'undefined') ? msg : "Error not provided."); - done(false); + done(false || options.expect_fail); }, awsRequestId: 'LAMBDA_INVOKE', logStreamName: 'LAMBDA_INVOKE',