-
Notifications
You must be signed in to change notification settings - Fork 2
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge branch 'develop' into MAT-7083
- Loading branch information
Showing
4 changed files
with
187 additions
and
14 deletions.
There are no files selected for viewing
65 changes: 65 additions & 0 deletions
65
.../java/cms/gov/madie/measure/config/RemoveQICoreMeasureGroupStratificationsChangeUnit.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
package cms.gov.madie.measure.config; | ||
|
||
import cms.gov.madie.measure.repositories.MeasureRepository; | ||
import gov.cms.madie.models.common.ModelType; | ||
import gov.cms.madie.models.measure.Measure; | ||
import io.mongock.api.annotations.ChangeUnit; | ||
import io.mongock.api.annotations.Execution; | ||
import io.mongock.api.annotations.RollbackExecution; | ||
import lombok.Getter; | ||
import lombok.Setter; | ||
import lombok.extern.slf4j.Slf4j; | ||
import org.apache.commons.collections4.CollectionUtils; | ||
|
||
import java.util.ArrayList; | ||
import java.util.List; | ||
|
||
@Getter | ||
@Slf4j | ||
@ChangeUnit(id = "remove_qicore_measure_group_stratifications", order = "1", author = "madie_dev") | ||
public class RemoveQICoreMeasureGroupStratificationsChangeUnit { | ||
|
||
@Setter private List<Measure> tempMeasures; | ||
|
||
@Execution | ||
public void removeQICoreMeasureGroupStratifications(MeasureRepository measureRepository) | ||
throws Exception { | ||
log.info("Removing legacy QI-Core Stratifications.()"); | ||
|
||
// add all QICore to a list and blank strats | ||
List<Measure> measureList = | ||
new ArrayList<>(measureRepository.findAllByModel(ModelType.QI_CORE.getValue())); | ||
measureList.addAll(measureRepository.findAllByModel(ModelType.QI_CORE_6_0_0.getValue())); | ||
|
||
log.info("Modifying [{}] QI-Core measures", measureList.size()); | ||
|
||
tempMeasures = new ArrayList<>(); | ||
|
||
measureList.forEach( | ||
measure -> { | ||
if (CollectionUtils.isEmpty(measure.getGroups())) { | ||
return; | ||
} | ||
|
||
Measure modifiedMeasure = | ||
measure.toBuilder() | ||
.groups( | ||
measure.getGroups().stream() | ||
.map( | ||
group -> group.toBuilder().stratifications(new ArrayList<>()).build()) | ||
.toList()) | ||
.build(); | ||
|
||
tempMeasures.add(modifiedMeasure); | ||
measureRepository.save(modifiedMeasure); | ||
}); | ||
} | ||
|
||
@RollbackExecution | ||
public void rollbackExecution(MeasureRepository measureRepository) throws Exception { | ||
log.debug("Entering rollbackExecution() "); | ||
if (CollectionUtils.isNotEmpty(tempMeasures)) { | ||
tempMeasures.forEach(measureRepository::save); | ||
} | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
118 changes: 118 additions & 0 deletions
118
...a/cms/gov/madie/measure/config/RemoveQICoreMeasureGroupStratificationsChangeUnitTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,118 @@ | ||
package cms.gov.madie.measure.config; | ||
|
||
import cms.gov.madie.measure.repositories.MeasureRepository; | ||
import gov.cms.madie.models.common.ModelType; | ||
import gov.cms.madie.models.measure.Group; | ||
import gov.cms.madie.models.measure.Measure; | ||
import gov.cms.madie.models.measure.Stratification; | ||
import org.junit.jupiter.api.BeforeEach; | ||
import org.junit.jupiter.api.Test; | ||
import org.mockito.InjectMocks; | ||
import org.mockito.Mock; | ||
import org.mockito.MockitoAnnotations; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Collections; | ||
import java.util.List; | ||
import java.util.UUID; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertEquals; | ||
import static org.mockito.Mockito.*; | ||
|
||
public class RemoveQICoreMeasureGroupStratificationsChangeUnitTest { | ||
|
||
@Mock private MeasureRepository measureRepository; | ||
|
||
@InjectMocks | ||
private RemoveQICoreMeasureGroupStratificationsChangeUnit | ||
removeQICoreMeasureGroupStratificationsChangeUnit; | ||
|
||
private List<Measure> mockMeasures; | ||
|
||
@BeforeEach | ||
public void setUp() { | ||
MockitoAnnotations.openMocks(this); | ||
|
||
// Create mock measures for QI-Core v4.1.1 and v6.0.0 | ||
Stratification stratification = | ||
Stratification.builder().id(UUID.randomUUID().toString()).build(); | ||
|
||
Group groupWithStratifications = | ||
Group.builder().stratifications(List.of(stratification)).build(); | ||
|
||
Measure measureWithStratifications = | ||
Measure.builder() | ||
.id(UUID.randomUUID().toString()) | ||
.model(ModelType.QI_CORE.getValue()) | ||
.groups(List.of(groupWithStratifications)) | ||
.active(true) | ||
.build(); | ||
|
||
Measure measureWithEmptyStratifications = | ||
Measure.builder() | ||
.id(UUID.randomUUID().toString()) | ||
.model(ModelType.QI_CORE_6_0_0.getValue()) | ||
.groups(List.of(groupWithStratifications)) | ||
.active(true) | ||
.build(); | ||
|
||
mockMeasures = new ArrayList<>(); | ||
mockMeasures.add(measureWithStratifications); | ||
mockMeasures.add(measureWithEmptyStratifications); | ||
} | ||
|
||
@Test | ||
public void testRemoveQICoreMeasureGroupStratifications() throws Exception { | ||
when(measureRepository.findAllByModel(ModelType.QI_CORE.getValue())) | ||
.thenReturn(Collections.singletonList(mockMeasures.get(0))); | ||
when(measureRepository.findAllByModel(ModelType.QI_CORE_6_0_0.getValue())) | ||
.thenReturn(Collections.singletonList(mockMeasures.get(1))); | ||
|
||
removeQICoreMeasureGroupStratificationsChangeUnit.removeQICoreMeasureGroupStratifications( | ||
measureRepository); | ||
|
||
verify(measureRepository, times(2)).save(any(Measure.class)); | ||
assertEquals(2, removeQICoreMeasureGroupStratificationsChangeUnit.getTempMeasures().size()); | ||
removeQICoreMeasureGroupStratificationsChangeUnit | ||
.getTempMeasures() | ||
.forEach( | ||
measure -> | ||
measure | ||
.getGroups() | ||
.forEach(group -> assertEquals(0, group.getStratifications().size()))); | ||
} | ||
|
||
@Test | ||
public void testRemoveQICoreMeasureGroupStratificationsNoChange() throws Exception { | ||
Measure measureWithoutGroups = | ||
Measure.builder() | ||
.id(UUID.randomUUID().toString()) | ||
.model(ModelType.QI_CORE.getValue()) | ||
.groups(new ArrayList<>()) | ||
.active(true) | ||
.build(); | ||
|
||
when(measureRepository.findAllByModel(ModelType.QI_CORE.getValue())) | ||
.thenReturn(Collections.singletonList(measureWithoutGroups)); | ||
when(measureRepository.findAllByModel(ModelType.QI_CORE_6_0_0.getValue())) | ||
.thenReturn(Collections.emptyList()); | ||
|
||
removeQICoreMeasureGroupStratificationsChangeUnit.removeQICoreMeasureGroupStratifications( | ||
measureRepository); | ||
|
||
verify(measureRepository, never()).save(any(Measure.class)); | ||
assertEquals(0, removeQICoreMeasureGroupStratificationsChangeUnit.getTempMeasures().size()); | ||
} | ||
|
||
@Test | ||
public void testRollbackExecution() throws Exception { | ||
// Prepare mock measures for rollback | ||
when(measureRepository.findAllByModel(anyString())).thenReturn(mockMeasures); | ||
|
||
removeQICoreMeasureGroupStratificationsChangeUnit.setTempMeasures(mockMeasures); | ||
|
||
removeQICoreMeasureGroupStratificationsChangeUnit.rollbackExecution(measureRepository); | ||
|
||
verify(measureRepository, times(2)).save(any(Measure.class)); | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters