diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java index cbbde7b89..dd0840a15 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/DossierStatusPersistenceService.java @@ -50,10 +50,8 @@ public class DossierStatusPersistenceService { } } - public List getAllDossierStatusForTemplate(String dossierTemplateId) { - var x = dossierStatusRepository.getAllDossierStatusForDossierTemplate(dossierTemplateId); - return x; + return dossierStatusRepository.getAllDossierStatusForDossierTemplate(dossierTemplateId); } public DossierStatusInfo getDossierStatusInfo(String dossierStatusId) { @@ -75,7 +73,7 @@ public class DossierStatusPersistenceService { DossierStatusEntity replaceDossierStatusEntity = null; if (replaceDossierStatusId != null) { - replaceDossierStatusEntity = dossierStatusRepository.findById(replaceDossierStatusId).orElseThrow(() -> new NotFoundException("Dossier Status not found: " + replaceDossierStatusId)); + replaceDossierStatusEntity = dossierStatusRepository.findById(replaceDossierStatusId).orElseThrow(() -> new NotFoundException(String.format(DOSSIER_STATUS_NOT_FOUND_MESSAGE, replaceDossierStatusId))); } if (replaceDossierStatusEntity != null && !replaceDossierStatusEntity.getDossierTemplateId().equals(toDeleteDossierStatus.getDossierTemplateId())) { @@ -89,7 +87,7 @@ public class DossierStatusPersistenceService { dossierStatusRepository.deleteById(dossierStatusId); } - public void validateDossierTemplateNameIsUnique(String dossierStatusName, String dossierTemplateId, String dossierStatusId) { + private void validateDossierTemplateNameIsUnique(String dossierStatusName, String dossierTemplateId, String dossierStatusId) { getAllDossierStatusForTemplate(dossierTemplateId).forEach(existing -> { if (existing.getName().equals(dossierStatusName) && !existing.getId().equals(dossierStatusId)) { throw new ConflictException("DossierStatus name must be unique within the same dossier template"); diff --git a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java index 4f3395b65..dbccc2489 100644 --- a/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java +++ b/persistence-service-v1/persistence-service-processor-v1/src/main/java/com/iqser/red/service/persistence/management/v1/processor/service/persistence/repository/DossierStatusRepository.java @@ -15,6 +15,6 @@ public interface DossierStatusRepository extends JpaRepository getAllDossierStatusForDossierTemplate(String dossierTemplateId); @Query("select new com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.DossierStatusInfo(s.id, s.name," + - "s.description, s.color, s.dossierTemplateId, count(d)) from DossierStatusEntity s left outer join s.dossiers d where s.id = :dossierStatusId") + "s.description, s.color, s.dossierTemplateId, count(d)) from DossierStatusEntity s left outer join s.dossiers d where s.id = :dossierStatusId group by s") Optional findProjectionById(String dossierStatusId); } diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java index 0497026d4..f1e01d24d 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/DossierStatusTest.java @@ -5,8 +5,11 @@ import com.iqser.red.service.peristence.v1.server.integration.client.DossierStat import com.iqser.red.service.peristence.v1.server.integration.service.DossierTemplateTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.DossierTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; +import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.CreateOrUpdateDossierStatusRequest; +import feign.FeignException; import org.junit.Test; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -35,6 +38,7 @@ public class DossierStatusTest extends AbstractPersistenceServerServiceTest { assertThat(allDossierStatus.size()).isZero(); + // Create CreateOrUpdateDossierStatusRequest crudsr = new CreateOrUpdateDossierStatusRequest(); crudsr.setName("name1"); crudsr.setDescription("description1"); @@ -42,34 +46,83 @@ public class DossierStatusTest extends AbstractPersistenceServerServiceTest { var loadedDossierStatus = dossierStatusClient.createOrUpdateDossierStatus(crudsr); assertThat(loadedDossierStatus).isNotNull(); + assertThat(loadedDossierStatus.getDossierCount()).isNull(); + // update crudsr.setDossierStatusId(loadedDossierStatus.getId()); crudsr.setDescription("New Description"); var updatedStatus = dossierStatusClient.createOrUpdateDossierStatus(crudsr); - assertThat(updatedStatus).isNotNull(); + assertThat(updatedStatus.getDescription()).isEqualTo(crudsr.getDescription()); + assertThat(updatedStatus.getDossierCount()).isNull(); + // get all for template id allDossierStatus = dossierStatusClient.getAllDossierStatusForTemplate(dossierTemplate.getId()); assertThat(allDossierStatus.size()).isEqualTo(1); + assertThat(allDossierStatus.get(0).getDossierCount()).isZero(); var testDossier = dossierTesterAndProvider.provideTestDossier(dossierTemplate, "1", allDossierStatus.iterator().next()); assertThat(testDossier.getDossierStatusId()).isEqualTo(allDossierStatus.iterator().next().getId()); - // update - CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); - BeanUtils.copyProperties(testDossier, cru); - cru.setDossierTemplateId(testDossier.getDossierTemplateId()); - cru.setDossierStatusId(null); + updatedStatus = dossierStatusClient.getDossierStatus(loadedDossierStatus.getId()); + assertThat(updatedStatus.getDossierCount()).isEqualTo(1); allDossierStatus = dossierStatusClient.getAllDossierStatusForTemplate(dossierTemplate.getId()); assertThat(allDossierStatus.size()).isEqualTo(1); assertThat(allDossierStatus.iterator().next().getDossierCount()).isEqualTo(1); - + // update dossier with dossier status null + CreateOrUpdateDossierRequest cru = new CreateOrUpdateDossierRequest(); + BeanUtils.copyProperties(testDossier, cru); + cru.setDossierTemplateId(testDossier.getDossierTemplateId()); + cru.setDossierStatusId(null); var updated = dossierClient.updateDossier(cru, testDossier.getId()); assertThat(updated.getDossierStatusId()).isNull(); + updatedStatus = dossierStatusClient.getDossierStatus(loadedDossierStatus.getId()); + assertThat(updatedStatus.getDossierCount()).isZero(); + + // Create + CreateOrUpdateDossierStatusRequest crudsr2 = new CreateOrUpdateDossierStatusRequest(); + crudsr2.setName("name2"); + crudsr2.setDescription("description2"); + crudsr2.setDossierTemplateId(dossierTemplate.getId()); + + // create second dossier status + var loadedDossierStatus2 = dossierStatusClient.createOrUpdateDossierStatus(crudsr2); + assertThat(loadedDossierStatus2).isNotNull(); + allDossierStatus = dossierStatusClient.getAllDossierStatusForTemplate(dossierTemplate.getId()); + assertThat(allDossierStatus.size()).isEqualTo(2); + + //delete first status with itself + try { + dossierStatusClient.deleteDossierStatus(loadedDossierStatus.getId(),loadedDossierStatus.getId()); + } catch (FeignException e) { + assertThat(e.status()).isEqualTo(400); + } + //delete with unknown status + try { + dossierStatusClient.deleteDossierStatus(loadedDossierStatus.getId(), "unknown"); + } catch (FeignException e) { + assertThat(e.status()).isEqualTo(404); + } + + // update dossier with dossier status + CreateOrUpdateDossierRequest cru2 = new CreateOrUpdateDossierRequest(); + BeanUtils.copyProperties(testDossier, cru2); + cru2.setDossierTemplateId(testDossier.getDossierTemplateId()); + cru2.setDossierStatusId(loadedDossierStatus.getId()); + updated = dossierClient.updateDossier(cru2, testDossier.getId()); + assertThat(updated.getDossierStatusId()).isNotNull(); + //delete and replace + dossierStatusClient.deleteDossierStatus(loadedDossierStatus.getId(), loadedDossierStatus2.getId()); + allDossierStatus = dossierStatusClient.getAllDossierStatusForTemplate(dossierTemplate.getId()); + assertThat(allDossierStatus.size()).isEqualTo(1); + assertThat(allDossierStatus.get(0).getDossierCount()).isEqualTo(1); + // check dossier has the new dossier status + updated = dossierClient.getDossierById(updated.getId(), false, false); + assertThat(updated.getDossierStatusId()).isEqualTo(loadedDossierStatus2.getId()); } }