From b7b712194028e1536be1dec531bc8bb0b1dec8c7 Mon Sep 17 00:00:00 2001 From: maksimchepelev Date: Tue, 5 Feb 2019 15:32:30 +0300 Subject: [PATCH] feat(microservices): allow to delete system microservies via cli Closes ENG-534 --- src/helpers/error-messages.js | 3 ++- src/sequelize/managers/microservice-manager.js | 12 +++++++++--- src/services/microservices-service.js | 7 +++++-- test/src/services/microservices-service.test.js | 2 +- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/src/helpers/error-messages.js b/src/helpers/error-messages.js index 9cc2d4d06..ad05bc3c1 100644 --- a/src/helpers/error-messages.js +++ b/src/helpers/error-messages.js @@ -82,5 +82,6 @@ module.exports = { CATALOG_UPDATE_REQUIRES_ID: "Parameter '--item-id' is missing, update requires Catalog id.", SYSTEM_CATALOG_ITEM_UPDATE: 'Catalog item id {} is system and can\'t be updated', SYSTEM_CATALOG_ITEM_DELETE: 'Catalog item id {} is system and can\'t be deleted', - SYSTEM_MICROSERVICE_UPDATE: 'Microservice uuid {} is system and can\'t be updated' + SYSTEM_MICROSERVICE_UPDATE: 'Microservice uuid {} is system and can\'t be updated', + SYSTEM_MICROSERVICE_DELETE: 'Microservice uuid {} is system and can\'t be deleted' }; diff --git a/src/sequelize/managers/microservice-manager.js b/src/sequelize/managers/microservice-manager.js index cd5eee6ad..4a4e78b26 100644 --- a/src/sequelize/managers/microservice-manager.js +++ b/src/sequelize/managers/microservice-manager.js @@ -220,13 +220,19 @@ class MicroserviceManager extends BaseManager { }, {transaction: transaction}) } - findOneWithStatus(where, transaction) { + findOneWithStatusAndCategory(where, transaction) { return Microservice.findOne({ include: [ { model: MicroserviceStatus, as: 'microserviceStatus', - required: true + required: false + }, + { + model: CatalogItem, + as: 'catalogItem', + required: true, + attributes: ['category'] } ], where: where @@ -239,7 +245,7 @@ class MicroserviceManager extends BaseManager { { model: MicroserviceStatus, as: 'microserviceStatus', - required: true + required: false } ], where: where diff --git a/src/services/microservices-service.js b/src/services/microservices-service.js index cb3d07a1f..df3f712fd 100644 --- a/src/services/microservices-service.js +++ b/src/services/microservices-service.js @@ -201,12 +201,15 @@ async function deleteMicroservice(microserviceUuid, microserviceData, user, isCL userId: user.id }; - const microservice = await MicroserviceManager.findOneWithStatus(where, transaction); + const microservice = await MicroserviceManager.findOneWithStatusAndCategory(where, transaction); if (!microservice) { throw new Errors.NotFoundError(AppHelper.formatMessage(ErrorMessages.INVALID_MICROSERVICE_UUID, microserviceUuid)); } + if (!isCLI && microservice.catalogItem.category === "SYSTEM") { + throw new Errors.NotFoundError(AppHelper.formatMessage(ErrorMessages.SYSTEM_MICROSERVICE_DELETE, microserviceUuid)) + } - if (microservice.microserviceStatus.status === MicroserviceStates.NOT_RUNNING) { + if (!microservice.microserviceStatus || microservice.microserviceStatus.status === MicroserviceStates.NOT_RUNNING) { await deleteMicroserviceWithRoutesAndPortMappings(microserviceUuid, transaction); } else { await MicroserviceManager.update({ diff --git a/test/src/services/microservices-service.test.js b/test/src/services/microservices-service.test.js index 97a218f84..0cc587160 100644 --- a/test/src/services/microservices-service.test.js +++ b/test/src/services/microservices-service.test.js @@ -1039,7 +1039,7 @@ describe('Microservices Service', () => { // def('updateChangeTrackingResponse', () => Promise.resolve()); // // beforeEach(() => { -// $sandbox.stub(MicroserviceManager, 'findOneWithStatus').returns($findMicroserviceResponse); +// $sandbox.stub(MicroserviceManager, 'findOneWithStatusAndCategory').returns($findMicroserviceResponse); // $sandbox.stub(MicroservicePortManager, 'findAll').returns($findMicroservicePortResponse); // $sandbox.stub(MicroservicePortManager, 'delete').returns($deleteMicroservicePortResponse); // $sandbox.stub(MicroserviceManager, 'update').returns($updateMicroserviceResponse);