diff --git a/src/app.js b/src/app.js index 09789d72b..939d74003 100644 --- a/src/app.js +++ b/src/app.js @@ -76,4 +76,4 @@ module.exports = () => { return app; }); -}; \ No newline at end of file +}; diff --git a/src/processors/controllers/processorController.js b/src/processors/controllers/processorController.js index 136562c40..36e18a9af 100644 --- a/src/processors/controllers/processorController.js +++ b/src/processors/controllers/processorController.js @@ -34,3 +34,13 @@ module.exports.getProcessor = async function (req, res, next) { return next(err); } }; + +module.exports.deleteProcessor = async function (req, res, next) { + let { params: { processor_id: processorId } } = req; + try { + await processorManager.deleteProcessor(processorId); + return res.status(204).json(); + } catch (err) { + return next(err); + } +}; diff --git a/src/processors/models/database/cassandra/cassandraConnector.js b/src/processors/models/database/cassandra/cassandraConnector.js index b47e64d1b..346fcc6b7 100644 --- a/src/processors/models/database/cassandra/cassandraConnector.js +++ b/src/processors/models/database/cassandra/cassandraConnector.js @@ -6,12 +6,14 @@ let client; const INSERT_PROCESSOR = 'INSERT INTO processors(id, name, description, type, file_url, javascript, created_at, updated_at) values(?,?,?,?,?,?,?,?)'; const GET_ALL_PROCESSORS = 'SELECT * FROM processors'; const GET_PROCESSOR = 'SELECT * FROM processors where id=?'; +const DELETE_PROCESSOR = 'DELETE FROM processors WHERE id=?'; module.exports = { init, insertProcessor, getAllProcessors, - getProcessor + getProcessor, + deleteProcessor }; let queryOptions = { @@ -33,6 +35,11 @@ async function getProcessor(processorId) { return processor[0]; } +function deleteProcessor(processorId) { + let params = [processorId]; + return executeQuery(DELETE_PROCESSOR, params, queryOptions); +} + async function insertProcessor(processorId, processorInfo) { let params = [processorId, processorInfo.name, processorInfo.description, processorInfo.type, processorInfo.file_url, processorInfo.javascript, Date.now(), Date.now()]; const processor = await executeQuery(INSERT_PROCESSOR, params, queryOptions); diff --git a/src/processors/models/database/databaseConnector.js b/src/processors/models/database/databaseConnector.js index 7ab097ef9..178c56c97 100644 --- a/src/processors/models/database/databaseConnector.js +++ b/src/processors/models/database/databaseConnector.js @@ -7,6 +7,7 @@ module.exports = { getAllProcessors, insertProcessor, getProcessor, + deleteProcessor, closeConnection }; @@ -29,3 +30,7 @@ async function getAllProcessors(from, limit) { async function getProcessor(processorId) { return databaseConnector.getProcessor(processorId); } + +async function deleteProcessor(processorId) { + return databaseConnector.deleteProcessor(processorId); +} diff --git a/src/processors/models/database/sequelize/sequelizeConnector.js b/src/processors/models/database/sequelize/sequelizeConnector.js index 3d8991361..94312d539 100644 --- a/src/processors/models/database/sequelize/sequelizeConnector.js +++ b/src/processors/models/database/sequelize/sequelizeConnector.js @@ -7,7 +7,8 @@ module.exports = { init, getAllProcessors, insertProcessor, - getProcessor + getProcessor, + deleteProcessor }; async function init(sequelizeClient) { @@ -44,6 +45,15 @@ async function getProcessor(processorId) { return processors[0]; } +async function deleteProcessor(processorId) { + const processorsModel = client.model('processor'); + return processorsModel.destroy({ + where: { + id: processorId + } + }); +} + async function initSchemas() { const processorsFiles = client.define('processor', { id: { diff --git a/src/processors/models/processorsManager.js b/src/processors/models/processorsManager.js index bf357cac5..1e5b87541 100644 --- a/src/processors/models/processorsManager.js +++ b/src/processors/models/processorsManager.js @@ -39,3 +39,7 @@ module.exports.getProcessor = async function(processorId) { throw error; } }; + +module.exports.deleteProcessor = async function (processorId) { + return databaseConnector.deleteProcessor(processorId); +}; diff --git a/src/processors/routes/processorsRoute.js b/src/processors/routes/processorsRoute.js index b7ff1520d..5865076ae 100644 --- a/src/processors/routes/processorsRoute.js +++ b/src/processors/routes/processorsRoute.js @@ -9,5 +9,6 @@ let processors = require('../controllers/processorController'); router.get('/', swaggerValidator.validate, processors.getAllProcessors); router.post('/', swaggerValidator.validate, processors.createProcessor); router.get('/:processor_id', swaggerValidator.validate, processors.getProcessor); +router.delete('/:processor_id', swaggerValidator.validate, processors.deleteProcessor); -module.exports = router; \ No newline at end of file +module.exports = router; diff --git a/tests/integration-tests/processors/helpers/requestCreator.js b/tests/integration-tests/processors/helpers/requestCreator.js index 18b3b49c8..073c16296 100644 --- a/tests/integration-tests/processors/helpers/requestCreator.js +++ b/tests/integration-tests/processors/helpers/requestCreator.js @@ -8,7 +8,8 @@ module.exports = { init, createProcessor, getProcessors, - getProcessor + getProcessor, + deleteProcessor }; async function init() { @@ -37,6 +38,13 @@ function getProcessors(from, limit) { return res; }); } +function deleteProcessor(processorId) { + return request(app).delete(`/v1/processors/${processorId}`) + .set({ 'Content-Type': 'application/json' }) + .expect(function (res) { + return res; + }); +} function getProcessor(processorId) { return request(app).get(`/v1/processors/${processorId}`) diff --git a/tests/integration-tests/processors/processors-test.js b/tests/integration-tests/processors/processors-test.js index d17a9d7ac..03a2ce509 100644 --- a/tests/integration-tests/processors/processors-test.js +++ b/tests/integration-tests/processors/processors-test.js @@ -65,7 +65,33 @@ describe('Processors api', function() { should(processors.length).greaterThanOrEqual(101); }); after(async function() { - // TODO: when DELETE /processors is implemented, use processorsInserted to empty the table. + const processorIds = processorsInserted.map(processor => processor.body.id); + processorIds.forEach(async (processorId) => { + await requestSender.deleteProcessor(processorId); + }); + }); + }); + describe('DELETE /v1/processors/{processor_id}', () => { + it('insert a processor and then delete it', async () => { + const processor = generateRawJSProcessor('some_id'); + const insertResponse = await requestSender.createProcessor(processor, validHeaders); + + should(insertResponse.statusCode).equal(201); + const processorId = insertResponse.body.id; + + const deleteResponse = await requestSender.deleteProcessor(processorId); + should(deleteResponse.statusCode).equal(204); + + const getProcessorResponse = await requestSender.getProcessor(processorId); + should(getProcessorResponse.statusCode).equal(404); + }); + + it('delete a processor that doesn\'t exist - expect status code 204', async () => { + const processorId = uuid(); + // making sure that there is no processor with the generated uuid (not taking any chances :) ) + await requestSender.deleteProcessor(processorId); + const deleteResponse = await requestSender.deleteProcessor(processorId); + should(deleteResponse.statusCode).equal(204); }); }); describe('GET /v1/processors/{processor_id}', function () { diff --git a/tests/unit-tests/processors/models/sequelize/sequelizeConnector-test.js b/tests/unit-tests/processors/models/sequelize/sequelizeConnector-test.js index 6fc9b1a90..81215a2d7 100644 --- a/tests/unit-tests/processors/models/sequelize/sequelizeConnector-test.js +++ b/tests/unit-tests/processors/models/sequelize/sequelizeConnector-test.js @@ -86,7 +86,7 @@ describe('Sequelize client tests', function () { const processorId = processor.id; await sequelizeConnector.getProcessor(processorId); should(sequelizeGetStub.calledOnce).eql(true); - should(sequelizeGetStub.args[0][0]).containDeep({ where: { id: processorId }}); + should(sequelizeGetStub.args[0][0]).containDeep({ where: { id: processorId } }); }); }); @@ -99,4 +99,12 @@ describe('Sequelize client tests', function () { should(paramsArg).has.properties(['created_at', 'updated_at']); }); }); + + describe('Delete processor', () => { + it('validate query', async () => { + const processorId = 'A-B-C'; + await sequelizeConnector.deleteProcessor(processorId); + should(sequelizeDeleteStub.args[0][0]).deepEqual({ where: { id: processorId } }); + }); + }); });