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);