diff --git a/grails-app/services/be/cytomine/processing/SoftwareUserRepositoryService.groovy b/grails-app/services/be/cytomine/processing/SoftwareUserRepositoryService.groovy index 07728094d..5bc092513 100644 --- a/grails-app/services/be/cytomine/processing/SoftwareUserRepositoryService.groovy +++ b/grails-app/services/be/cytomine/processing/SoftwareUserRepositoryService.groovy @@ -35,6 +35,7 @@ class SoftwareUserRepositoryService extends ModelService { def transactionService def securityACLService def amqpQueueService + def softwareService @Override def currentDomain() { @@ -94,14 +95,10 @@ class SoftwareUserRepositoryService extends ModelService { return executeCommand(c, domain, null) } -// def deleteDependentSoftware(SoftwareUserRepository domain, Transaction transaction, Task task = null) { -// -// -// log.info("delteDependantSoftware ${Software.findAllBySoftwareRepository(domain).size()}") -// Software.findAllBySoftwareRepository(domain).each { -// softwareService.delete(it, transaction, null, false) -// } -// } + def deleteDependentSoftware(SoftwareUserRepository domain, Transaction transaction, Task task = null) { + log.info("deleteDependantSoftware ${Software.findAllBySoftwareUserRepository(domain).size()}") + Software.executeUpdate("update Software set softwareUserRepository = null where softwareUserRepository.id = ?", [domain.id]) + } @Override def getStringParamsI18n(def domain) { @@ -125,6 +122,20 @@ class SoftwareUserRepositoryService extends ModelService { amqpQueueService.publishMessage(AmqpQueue.findByName("queueCommunication"), jsonBuilder.toString()) } + @Override + def afterDelete(Object domain, Object response) { + SoftwareUserRepository softwareUserRepository = domain as SoftwareUserRepository + def message = [requestType: "removeSoftwareUserRepository", + id: softwareUserRepository.id, + provider: softwareUserRepository.provider, + username: softwareUserRepository.username, + dockerUsername: softwareUserRepository.dockerUsername, + prefix: softwareUserRepository.prefix] + JsonBuilder jsonBuilder = new JsonBuilder() + jsonBuilder(message) + amqpQueueService.publishMessage(AmqpQueue.findByName("queueCommunication"), jsonBuilder.toString()) + } + def refresh(def repo) { def message = [requestType: "refreshRepository", id: repo.id, diff --git a/test/functional/be/cytomine/SoftwareUserRepositoryTests.groovy b/test/functional/be/cytomine/SoftwareUserRepositoryTests.groovy index 5450c1c4f..53fbb6b1d 100644 --- a/test/functional/be/cytomine/SoftwareUserRepositoryTests.groovy +++ b/test/functional/be/cytomine/SoftwareUserRepositoryTests.groovy @@ -2,6 +2,7 @@ package be.cytomine import be.cytomine.test.BasicInstanceBuilder import be.cytomine.test.Infos +import be.cytomine.test.http.SoftwareAPI import be.cytomine.test.http.SoftwareUserRepositoryAPI import be.cytomine.utils.UpdateData import grails.converters.JSON @@ -58,4 +59,29 @@ class SoftwareUserRepositoryTests { def showResult = SoftwareUserRepositoryAPI.show(id, Infos.SUPERADMINLOGIN, Infos.SUPERADMINPASSWORD) assert 404 == showResult.code } + + void testDeleteSoftwareUserRepositoryWithSoftware() { + def repoToDelete = BasicInstanceBuilder.getSoftwareUserRepositoryNotExist(true) + def id = repoToDelete.id + + def software = BasicInstanceBuilder.getSoftwareNotExist(true) + software.setSoftwareUserRepository(repoToDelete) + software = BasicInstanceBuilder.saveDomain(software) + + def softwareResult = SoftwareAPI.show(software.id, Infos.SUPERADMINLOGIN, Infos.SUPERADMINPASSWORD) + assert 200 == softwareResult.code + def json = JSON.parse(softwareResult.data) + assert json.softwareUserRepository == repoToDelete.id + + def result = SoftwareUserRepositoryAPI.delete(id, Infos.SUPERADMINLOGIN, Infos.SUPERADMINPASSWORD) + assert 200 == result.code + + def showResult = SoftwareUserRepositoryAPI.show(id, Infos.SUPERADMINLOGIN, Infos.SUPERADMINPASSWORD) + assert 404 == showResult.code + + softwareResult = SoftwareAPI.show(software.id, Infos.SUPERADMINLOGIN, Infos.SUPERADMINPASSWORD) + assert 200 == softwareResult.code + json = JSON.parse(softwareResult.data) + assert json.softwareUserRepository instanceof JSONObject.Null + } } \ No newline at end of file