From 6d7b80a60d87b509e8fd96530d2404208f420005 Mon Sep 17 00:00:00 2001 From: Niv Lipetz Date: Tue, 15 Oct 2019 23:37:00 +0300 Subject: [PATCH] test(processors): add tests for POST /processors (#217) * test(processors): add tests for POST /processors --- src/app.js | 2 + .../controllers/processorController.js | 2 +- .../database/sequelize/sequelizeConnector.js | 2 +- src/processors/models/processorsManager.js | 3 +- .../processors/helpers/requestCreator.js | 25 ++++ .../processors/processors-test.js | 108 ++++++++++++++++++ 6 files changed, 139 insertions(+), 3 deletions(-) create mode 100644 tests/integration-tests/processors/helpers/requestCreator.js create mode 100644 tests/integration-tests/processors/processors-test.js diff --git a/src/app.js b/src/app.js index 02efb6164..17db4fe54 100644 --- a/src/app.js +++ b/src/app.js @@ -8,6 +8,7 @@ let reportsRouter = require('./reports/routes/reportsRoute.js'); let configRouter = require('./configManager/routes/configRoute.js'); let dslRouter = require('./tests/routes/dslRoute.js'); let testsRouter = require('./tests/routes/testsRoute.js'); +let processorssRouter = require('./processors/routes/processorsRoute.js'); let swaggerValidator = require('express-ajv-swagger-validation'); let audit = require('express-requests-logger'); @@ -56,6 +57,7 @@ module.exports = () => { app.use('/v1/dsl', dslRouter); app.use('/v1/tests', reportsRouter); app.use('/v1/tests', testsRouter); + app.use('/v1/processors', processorssRouter); app.use('/', function (req, res, next) { res.redirect('/ui'); diff --git a/src/processors/controllers/processorController.js b/src/processors/controllers/processorController.js index c6d72aeb4..78a598241 100644 --- a/src/processors/controllers/processorController.js +++ b/src/processors/controllers/processorController.js @@ -1,5 +1,5 @@ 'use strict'; -let processorManager = require('../models/processorManager'); +let processorManager = require('../models/processorsManager'); module.exports.createProcessor = function (req, res, next) { return processorManager.createProcessor(req.body) diff --git a/src/processors/models/database/sequelize/sequelizeConnector.js b/src/processors/models/database/sequelize/sequelizeConnector.js index 49beec10a..ca0621559 100644 --- a/src/processors/models/database/sequelize/sequelizeConnector.js +++ b/src/processors/models/database/sequelize/sequelizeConnector.js @@ -27,7 +27,7 @@ async function insertProcessor(processorId, processorInfo) { } async function initSchemas() { - const processorsFiles = client.define('processors', { + const processorsFiles = client.define('processor', { processor_id: { type: Sequelize.DataTypes.UUID, primaryKey: true diff --git a/src/processors/models/processorsManager.js b/src/processors/models/processorsManager.js index a9072cd5e..9d3b10fdd 100644 --- a/src/processors/models/processorsManager.js +++ b/src/processors/models/processorsManager.js @@ -12,10 +12,11 @@ module.exports.createProcessor = async function (processor) { try { if (processor.type === common.PROCESSOR_TYPE_FILE_DOWNLOAD) { const file = await fileManager.downloadFile(processor.file_url); - processor.javascript = file.body; // TODO check dis + processor.javascript = file; } await databaseConnector.insertProcessor(processorId, processor); logger.info('Processor saved successfully to database'); + return processor; } catch (error) { logger.error(error, 'Error occurred trying to create new processor'); return Promise.reject(error); diff --git a/tests/integration-tests/processors/helpers/requestCreator.js b/tests/integration-tests/processors/helpers/requestCreator.js new file mode 100644 index 000000000..ae9de1011 --- /dev/null +++ b/tests/integration-tests/processors/helpers/requestCreator.js @@ -0,0 +1,25 @@ + +const request = require('supertest'), + expressApp = require('../../../../src/app'); +let app; +module.exports = { + init, + createProcessor +}; +async function init() { + try { + app = await expressApp(); + } catch (err){ + console.log(err); + process.exit(1); + } +} + +function createProcessor(body, headers) { + return request(app).post('/v1/processors') + .send(body) + .set(headers) + .expect(function(res){ + return res; + }); +} \ No newline at end of file diff --git a/tests/integration-tests/processors/processors-test.js b/tests/integration-tests/processors/processors-test.js new file mode 100644 index 000000000..bd538c9be --- /dev/null +++ b/tests/integration-tests/processors/processors-test.js @@ -0,0 +1,108 @@ +const should = require('should'), + nock = require('nock'); + +let validHeaders = { 'Content-Type': 'application/json' }; +const requestSender = require('./helpers/requestCreator'); +describe('Processors api', function() { + this.timeout(5000000); + before(async function () { + await requestSender.init(); + }); + + describe('Good requests', function() { + it('Create processor with type file_download', async () => { + nock('https://authentication.predator.dev').get('/?dl=1').reply(200, + `{ + const uuid = require('uuid/v4'); + module.exports = { + createAuthToken + }; + + function createAuthToken(userContext, events, done) { + userContext.vars.token = uuid(); + return done(); + } + }` + ); + + const requestBody = { + name: 'authentication', + description: 'Creates authorization token and saves it in the context', + type: 'file_download', + file_url: 'https://authentication.predator.dev/?dl=1' + }; + let createProcessorResponse = await requestSender.createProcessor(requestBody, validHeaders); + createProcessorResponse.statusCode.should.eql(201); + }); + + it('Create processor with type raw_javascript', async () => { + const requestBody = { + name: 'authentication', + description: 'Creates authorization token and saves it in the context', + type: 'raw_javascript', + javascript: + `{ + const uuid = require('uuid/v4'); + module.exports = { + createAuthToken + }; + + function createAuthToken(userContext, events, done) { + userContext.vars.token = uuid(); + return done(); + } + }` + }; + let createProcessorResponse = await requestSender.createProcessor(requestBody, validHeaders); + createProcessorResponse.statusCode.should.eql(201); + }); + }); + + describe('Bad requests', function () { + it('Create processor with unknown type', async () => { + const requestBody = { + name: 'bad-processor', + description: 'Processor with unknown type', + type: 'unknown' + }; + let createProcessorResponse = await requestSender.createProcessor(requestBody, validHeaders); + createProcessorResponse.statusCode.should.eql(400); + }); + + it('Create processor with type file_download and no url', async () => { + const requestBody = { + name: 'download-me', + description: 'Processor with no file url', + type: 'file_download' + }; + let createProcessorResponse = await requestSender.createProcessor(requestBody, validHeaders); + createProcessorResponse.statusCode.should.eql(400); + }); + + it('Create processor with type raw_javascript and no js', async () => { + const requestBody = { + name: 'javascript-me', + description: 'Processor with no js', + type: 'raw_javascript', + file_url: 'bad' + }; + let createProcessorResponse = await requestSender.createProcessor(requestBody, validHeaders); + createProcessorResponse.statusCode.should.eql(400); + }); + }); + + describe('Sad requests', function () { + it('Create processor with type file_download and invalid file_url', async () => { + nock('https://authentication.predator.dev').get('/?dl=1').replyWithError('error downloading file'); + + const requestBody = { + name: 'authentication', + description: 'Creates authorization token and saves it in the context', + type: 'file_download', + file_url: 'https://authentication.predator.dev/?dl=1' + }; + let createProcessorResponse = await requestSender.createProcessor(requestBody, validHeaders); + createProcessorResponse.statusCode.should.eql(422); + }); + }); +}); \ No newline at end of file