diff --git a/lib/server/controllers/apiController.js b/lib/server/controllers/apiController.js index 6ff9345..161fb0e 100644 --- a/lib/server/controllers/apiController.js +++ b/lib/server/controllers/apiController.js @@ -23,7 +23,8 @@ var ApiController = function(app) { runId: (Date.now()*1000 + Math.round(Math.random()*1000)).toString(36), params: { url: req.body.url, - waitForResponse: req.body.waitForResponse !== false + waitForResponse: req.body.waitForResponse !== false, + partialResult: req.body.partialResult || null } }; @@ -63,7 +64,24 @@ var ApiController = function(app) { // Send result if the user was waiting if (run.params.waitForResponse) { - res.redirect(302, '/api/results/' + run.runId); + + // If the user only wants a portion of the result (partialResult option) + switch(run.params.partialResult) { + case 'generalScores': + res.redirect(302, '/api/results/' + run.runId + '/generalScores'); + break; + case 'rules': + res.redirect(302, '/api/results/' + run.runId + '/rules'); + break; + case 'javascriptExecutionTree': + res.redirect(302, '/api/results/' + run.runId + '/javascriptExecutionTree'); + break; + case 'phantomas': + res.redirect(302, '/api/results/' + run.runId + '/toolsResults/phantomas'); + break; + default: + res.redirect(302, '/api/results/' + run.runId); + } } }) diff --git a/test/api/apiTest.js b/test/api/apiTest.js index d4695e6..f44db3a 100644 --- a/test/api/apiTest.js +++ b/test/api/apiTest.js @@ -69,6 +69,35 @@ describe('api', function() { }); }); + it('should return the rules only', function(done) { + this.timeout(15000); + + request({ + method: 'POST', + url: serverUrl + '/api/runs', + body: { + url: wwwUrl + '/simple-page.html', + waitForResponse: true, + partialResult: 'rules' + }, + json: true, + headers: { + 'X-Api-Key': Object.keys(config.authorizedKeys)[0] + } + }, function(error, response, body) { + if (!error && response.statusCode === 302) { + + console.log(response.headers.location); + response.headers.should.have.a.property('location').that.is.a('string'); + response.headers.location.should.contain('/rules'); + + done(); + } else { + done(error || response.statusCode); + } + }); + }); + it('should retrieve the results for the synchronous run', function(done) { this.timeout(15000);