diff --git a/src/main/java/cms/gov/madie/measure/repositories/MeasureRepository.java b/src/main/java/cms/gov/madie/measure/repositories/MeasureRepository.java index 86a21880f..539da3363 100644 --- a/src/main/java/cms/gov/madie/measure/repositories/MeasureRepository.java +++ b/src/main/java/cms/gov/madie/measure/repositories/MeasureRepository.java @@ -19,6 +19,8 @@ public interface MeasureRepository @Query("{cqlLibraryName : ?0, active : true}") Optional findByCqlLibraryName(String cqlLibraryName); + List findAllByCqlLibraryName(String cqlLibraryName); + Optional findByIdAndActive(String id, Boolean active); Page findAllByActive(Boolean active, Pageable page); diff --git a/src/main/java/cms/gov/madie/measure/services/MeasureService.java b/src/main/java/cms/gov/madie/measure/services/MeasureService.java index 6dc127fb7..2ae214924 100644 --- a/src/main/java/cms/gov/madie/measure/services/MeasureService.java +++ b/src/main/java/cms/gov/madie/measure/services/MeasureService.java @@ -315,18 +315,24 @@ public Page getMeasures( } public void checkDuplicateCqlLibraryName(String cqlLibraryName) { + log.info("cqlLibraryName: [{}]", cqlLibraryName); + log.info("findBy: [{}]", measureRepository.findAllByCqlLibraryName(cqlLibraryName)); + log.info("isNotEmpty [{}]", StringUtils.isNotEmpty(cqlLibraryName)); + if (StringUtils.isNotEmpty(cqlLibraryName) - && measureRepository.findByCqlLibraryName(cqlLibraryName).isPresent()) { + && !measureRepository.findAllByCqlLibraryName(cqlLibraryName).isEmpty()) { throw new DuplicateKeyException( "cqlLibraryName", "CQL library with given name already exists."); } } public void checkDuplicateCqlLibraryName(String cqlLibraryName, String measureSetId) { + // This overload of the function is never used anywhere? if (StringUtils.isNotEmpty(cqlLibraryName)) { Optional anyMatchingMeasure = measureRepository.findByCqlLibraryName(cqlLibraryName); Optional matchingMeasureInMeasureSet = anyMatchingMeasure.filter(measure -> measure.getMeasureSetId().equals((measureSetId))); + System.out.println("AAAA"); if (anyMatchingMeasure.isPresent() && matchingMeasureInMeasureSet.isEmpty()) { throw new DuplicateKeyException( "cqlLibraryName", "CQL library with given name already exists."); diff --git a/src/test/java/cms/gov/madie/measure/services/MeasureServiceTest.java b/src/test/java/cms/gov/madie/measure/services/MeasureServiceTest.java index 4250e27a5..c883cdf2a 100644 --- a/src/test/java/cms/gov/madie/measure/services/MeasureServiceTest.java +++ b/src/test/java/cms/gov/madie/measure/services/MeasureServiceTest.java @@ -430,7 +430,7 @@ public void testCreateMeasureSuccessfullyWithDefaultCqlQDM() throws Exception { doNothing() .when(measureSetService) .createMeasureSet(anyString(), anyString(), anyString(), any()); - when(measureRepository.findByCqlLibraryName(anyString())).thenReturn(Optional.empty()); + when(measureRepository.findAllByCqlLibraryName(anyString())).thenReturn(new ArrayList<>()); when(elmTranslatorClient.getElmJson(anyString(), anyString(), anyString())) .thenReturn(ElmJson.builder().json("{\"library\": {}}").xml("").build()); when(elmTranslatorClient.hasErrors(any(ElmJson.class))).thenReturn(false); @@ -466,7 +466,7 @@ public void testCreateMeasureSuccessfullyWithNoCqlQDM() throws Exception { doNothing() .when(measureSetService) .createMeasureSet(anyString(), anyString(), anyString(), any()); - when(measureRepository.findByCqlLibraryName(anyString())).thenReturn(Optional.empty()); + when(measureRepository.findAllByCqlLibraryName(anyString())).thenReturn(new ArrayList<>()); when(measureRepository.save(any(Measure.class))).thenReturn(measureToSave); when(actionLogService.logAction(any(), any(), any(), any())).thenReturn(true); @@ -503,7 +503,7 @@ public void testCreateMeasureSuccessfullyWithDefaultCqlQICore() throws Exception doNothing() .when(measureSetService) .createMeasureSet(anyString(), anyString(), anyString(), any()); - when(measureRepository.findByCqlLibraryName(anyString())).thenReturn(Optional.empty()); + when(measureRepository.findAllByCqlLibraryName(anyString())).thenReturn(new ArrayList<>()); when(elmTranslatorClient.getElmJson(anyString(), anyString(), anyString())) .thenReturn(ElmJson.builder().json("{\"library\": {}}").xml("").build()); when(elmTranslatorClient.hasErrors(any(ElmJson.class))).thenReturn(false); @@ -539,7 +539,7 @@ public void testCreateMeasureSuccessfullyWithNoCqlQICore() throws Exception { doNothing() .when(measureSetService) .createMeasureSet(anyString(), anyString(), anyString(), any()); - when(measureRepository.findByCqlLibraryName(anyString())).thenReturn(Optional.empty()); + when(measureRepository.findAllByCqlLibraryName(anyString())).thenReturn(new ArrayList<>()); when(measureRepository.save(any(Measure.class))).thenReturn(measureToSave); when(actionLogService.logAction(any(), any(), any(), any())).thenReturn(true); @@ -564,7 +564,7 @@ public void testCreateMeasureSuccessfullyWithValidCql() { .cqlLibraryName("VTE") .build(); - when(measureRepository.findByCqlLibraryName(anyString())).thenReturn(Optional.empty()); + when(measureRepository.findAllByCqlLibraryName(anyString())).thenReturn(new ArrayList<>()); when(elmTranslatorClient.getElmJson(anyString(), anyString(), anyString())) .thenReturn(ElmJson.builder().json(elmJson).build()); when(elmTranslatorClient.hasErrors(any(ElmJson.class))).thenReturn(false); @@ -598,7 +598,7 @@ public void testCreateMeasureSuccessfullyWithInvalidCqlAndTerminology() { .createdBy(usr) .build(); - when(measureRepository.findByCqlLibraryName(anyString())).thenReturn(Optional.empty()); + when(measureRepository.findAllByCqlLibraryName(anyString())).thenReturn(new ArrayList<>()); when(elmTranslatorClient.getElmJson(anyString(), anyString(), anyString())) .thenReturn(ElmJson.builder().json(elmJson).build()); when(elmTranslatorClient.hasErrors(any(ElmJson.class))).thenReturn(true); @@ -631,7 +631,8 @@ public void testCreateMeasureWhenLibraryNameDuplicate() { .cql("") .elmJson(null) .build(); - when(measureRepository.findByCqlLibraryName(anyString())).thenReturn(Optional.of(measure1)); + List measureList = Collections.singletonList(measure1); + when(measureRepository.findAllByCqlLibraryName(anyString())).thenReturn(measureList); assertThrows( DuplicateKeyException.class, @@ -650,7 +651,7 @@ public void testCreateMeasureToHaveUpdatedMeasurementPeriods() { .cqlLibraryName("VTE") .build(); - when(measureRepository.findByCqlLibraryName(anyString())).thenReturn(Optional.empty()); + when(measureRepository.findAllByCqlLibraryName(anyString())).thenReturn(new ArrayList<>()); when(elmTranslatorClient.getElmJson(anyString(), anyString(), anyString())) .thenReturn(ElmJson.builder().json(elmJson).build()); when(elmTranslatorClient.hasErrors(any(ElmJson.class))).thenReturn(false); @@ -680,10 +681,11 @@ public void testUpdateMeasureThrowsExceptionForDuplicateLibraryName() { Measure updated = original.toBuilder().cqlLibraryName("Changed_Name").build(); + List measureList = Collections.singletonList(Measure.builder().build()); + when(measureUtil.isCqlLibraryNameChanged(any(Measure.class), any(Measure.class))) .thenReturn(true); - when(measureRepository.findByCqlLibraryName(anyString())) - .thenReturn(Optional.of(Measure.builder().build())); + when(measureRepository.findAllByCqlLibraryName(anyString())).thenReturn(measureList); assertThrows( DuplicateKeyException.class, @@ -752,7 +754,7 @@ public void testUpdateMeasureSavesMeasure() { .build(); when(measureUtil.isCqlLibraryNameChanged(any(Measure.class), any(Measure.class))) .thenReturn(true); - when(measureRepository.findByCqlLibraryName(anyString())).thenReturn(Optional.empty()); + when(measureRepository.findAllByCqlLibraryName(anyString())).thenReturn(new ArrayList<>()); when(measureUtil.isMeasurementPeriodChanged(any(Measure.class), any(Measure.class))) .thenReturn(true); when(measureUtil.isMeasureCqlChanged(any(Measure.class), any(Measure.class))).thenReturn(false); @@ -1158,17 +1160,18 @@ public void testValidateMeasureMeasurementPeriod() { @Test public void testCheckDuplicateCqlLibraryNameDoesNotThrowException() { - Optional measureOpt = Optional.empty(); - when(measureRepository.findByCqlLibraryName(anyString())).thenReturn(measureOpt); + List measureOpt = new ArrayList<>(); + when(measureRepository.findAllByCqlLibraryName(anyString())).thenReturn(measureOpt); measureService.checkDuplicateCqlLibraryName("testCQLLibraryName"); - verify(measureRepository, times(1)).findByCqlLibraryName(eq("testCQLLibraryName")); + verify(measureRepository, times(2)).findAllByCqlLibraryName(eq("testCQLLibraryName")); } @Test public void testCheckDuplicateCqlLibraryNameThrowsExceptionForExistingName() { final Measure measure = Measure.builder().cqlLibraryName("testCQLLibraryName").build(); - Optional measureOpt = Optional.of(measure); - when(measureRepository.findByCqlLibraryName(anyString())).thenReturn(measureOpt); + final List measureOpt = Collections.singletonList(measure); + // Optional measureOpt = Optional.of(measure); + when(measureRepository.findAllByCqlLibraryName(anyString())).thenReturn(measureOpt); assertThrows( DuplicateKeyException.class, () -> measureService.checkDuplicateCqlLibraryName("testCQLLibraryName"));