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..ab49050da 100644 --- a/src/main/java/cms/gov/madie/measure/repositories/MeasureRepository.java +++ b/src/main/java/cms/gov/madie/measure/repositories/MeasureRepository.java @@ -17,7 +17,7 @@ public interface MeasureRepository MeasureAclRepository, MeasureCmsIdRepository { @Query("{cqlLibraryName : ?0, active : true}") - Optional findByCqlLibraryName(String cqlLibraryName); + List findAllByCqlLibraryName(String cqlLibraryName); Optional findByIdAndActive(String id, Boolean active); 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..f917c6466 100644 --- a/src/main/java/cms/gov/madie/measure/services/MeasureService.java +++ b/src/main/java/cms/gov/madie/measure/services/MeasureService.java @@ -315,19 +315,9 @@ public Page getMeasures( } public void checkDuplicateCqlLibraryName(String cqlLibraryName) { - if (StringUtils.isNotEmpty(cqlLibraryName) - && measureRepository.findByCqlLibraryName(cqlLibraryName).isPresent()) { - throw new DuplicateKeyException( - "cqlLibraryName", "CQL library with given name already exists."); - } - } - - public void checkDuplicateCqlLibraryName(String cqlLibraryName, String measureSetId) { if (StringUtils.isNotEmpty(cqlLibraryName)) { - Optional anyMatchingMeasure = measureRepository.findByCqlLibraryName(cqlLibraryName); - Optional matchingMeasureInMeasureSet = - anyMatchingMeasure.filter(measure -> measure.getMeasureSetId().equals((measureSetId))); - if (anyMatchingMeasure.isPresent() && matchingMeasureInMeasureSet.isEmpty()) { + List measureList = measureRepository.findAllByCqlLibraryName(cqlLibraryName); + if (!measureList.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..56c839d42 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); @@ -627,11 +627,13 @@ public void testCreateMeasureWhenLibraryNameDuplicate() { measure1.toBuilder() .measurementPeriodStart(Date.from(Instant.now().minus(38, ChronoUnit.DAYS))) .measurementPeriodEnd(Date.from(Instant.now().minus(11, ChronoUnit.DAYS))) + .active(true) .cqlLibraryName("VTE") .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 +652,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); @@ -676,14 +678,19 @@ public void testCreateMeasureToHaveUpdatedMeasurementPeriods() { @Test public void testUpdateMeasureThrowsExceptionForDuplicateLibraryName() { Measure original = - Measure.builder().cqlLibraryName("OriginalLibName").measureName("Measure1").build(); + Measure.builder() + .cqlLibraryName("OriginalLibName") + .measureName("Measure1") + .active(true) + .build(); - Measure updated = original.toBuilder().cqlLibraryName("Changed_Name").build(); + Measure updated = original.toBuilder().cqlLibraryName("Changed_Name").active(true).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 +759,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 +1165,19 @@ 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(1)).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 Measure measure = + Measure.builder().cqlLibraryName("testCQLLibraryName").active(true).build(); + final List measureOpt = Collections.singletonList(measure); + // Optional measureOpt = Optional.of(measure); + when(measureRepository.findAllByCqlLibraryName(anyString())).thenReturn(measureOpt); assertThrows( DuplicateKeyException.class, () -> measureService.checkDuplicateCqlLibraryName("testCQLLibraryName"));