Add test for fixed use case

This commit is contained in:
juan.marchionatto 2021-07-30 10:48:10 -04:00
parent 264dfee099
commit 4e8b1719f3

View File

@ -2,6 +2,7 @@ package ca.uhn.fhir.jpa.term;
import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.context.FhirVersionEnum; import ca.uhn.fhir.context.FhirVersionEnum;
import ca.uhn.fhir.jpa.entity.TermCodeSystemVersion;
import ca.uhn.fhir.jpa.entity.TermConcept; import ca.uhn.fhir.jpa.entity.TermConcept;
import ca.uhn.fhir.jpa.entity.TermConceptDesignation; import ca.uhn.fhir.jpa.entity.TermConceptDesignation;
import ca.uhn.fhir.jpa.entity.TermConceptProperty; import ca.uhn.fhir.jpa.entity.TermConceptProperty;
@ -31,7 +32,6 @@ import org.junit.jupiter.api.Test;
import org.mockito.ArgumentCaptor; import org.mockito.ArgumentCaptor;
import org.mockito.Captor; import org.mockito.Captor;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Mockito;
import java.io.IOException; import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
@ -73,6 +73,7 @@ import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.contains; import static org.hamcrest.Matchers.contains;
import static org.hamcrest.Matchers.containsString; import static org.hamcrest.Matchers.containsString;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertTrue; import static org.junit.jupiter.api.Assertions.assertTrue;
import static org.junit.jupiter.api.Assertions.fail; import static org.junit.jupiter.api.Assertions.fail;
@ -113,7 +114,6 @@ public class TerminologyLoaderSvcLoincTest extends BaseLoaderTest {
private ArgumentCaptor<List<ConceptMap>> myConceptMapCaptor_268; private ArgumentCaptor<List<ConceptMap>> myConceptMapCaptor_268;
@Captor @Captor
private ArgumentCaptor<RequestDetails> myRequestDetailsCaptor; private ArgumentCaptor<RequestDetails> myRequestDetailsCaptor;
private ZipCollectionBuilder myFiles; private ZipCollectionBuilder myFiles;
@Mock @Mock
private ITermDeferredStorageSvc myTermDeferredStorageSvc; private ITermDeferredStorageSvc myTermDeferredStorageSvc;
@ -742,8 +742,7 @@ public class TerminologyLoaderSvcLoincTest extends BaseLoaderTest {
// Actually do the load // Actually do the load
mySvc.loadLoinc(myFiles.getFiles(), mySrd); mySvc.loadLoinc(myFiles.getFiles(), mySrd);
verify(myTermCodeSystemStorageSvc, times(1)).storeNewCodeSystemVersion(mySystemCaptor.capture(), verify(myTermCodeSystemStorageSvc, times(1)).storeNewCodeSystemVersion(mySystemCaptor.capture(), myCsvCaptor.capture(), any(RequestDetails.class), myValueSetsCaptor.capture(), myConceptMapCaptor.capture());
myCsvCaptor.capture(), any(RequestDetails.class), myValueSetsCaptor.capture(), myConceptMapCaptor.capture());
Map<String, TermConcept> concepts = extractConcepts(); Map<String, TermConcept> concepts = extractConcepts();
TermConcept code; TermConcept code;
@ -842,65 +841,94 @@ public class TerminologyLoaderSvcLoincTest extends BaseLoaderTest {
@Nested @Nested
public class CurrentVersionParameter { public class LoadLoincCurrentVersion {
private TermLoaderSvcImpl testedSvc; private TermLoaderSvcImpl testedSvc;
private final Properties testProps = new Properties(); private final Properties testProps = new Properties();
@Mock private final LoadedFileDescriptors mockFileDescriptors = mock(LoadedFileDescriptors.class); @Mock private final LoadedFileDescriptors mockFileDescriptors = mock(LoadedFileDescriptors.class);
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
@Mock private final List<ITermLoaderSvc.FileDescriptor> mockFileDescriptorList = mock(List.class); @Mock private final List<ITermLoaderSvc.FileDescriptor> mockFileDescriptorList = mock(List.class);
@Mock private final ITermCodeSystemStorageSvc mockCodeSystemStorageSvc = mock(ITermCodeSystemStorageSvc.class);
private final RequestDetails requestDetails = new ServletRequestDetails();
@BeforeEach @BeforeEach
void beforeEachCurrentVersionParameterTest() { void beforeEach() {
testedSvc = spy(mySvc); testedSvc = spy(mySvc);
doReturn(mockFileDescriptors).when(testedSvc).getLoadedFileDescriptors(mockFileDescriptorList);
doReturn(testProps).when(testedSvc).getProperties(any(), eq(LOINC_UPLOAD_PROPERTIES_FILE.getCode())); doReturn(testProps).when(testedSvc).getProperties(any(), eq(LOINC_UPLOAD_PROPERTIES_FILE.getCode()));
} }
@Test @Test
public void testLoadNoMakeCurrentVersion() { public void testDontMakeCurrentVersion() throws IOException {
addLoincMandatoryFilesToZip(myFiles);
testProps.put(LOINC_CODESYSTEM_MAKE_CURRENT.getCode(), "false"); testProps.put(LOINC_CODESYSTEM_MAKE_CURRENT.getCode(), "false");
testProps.put(LOINC_CODESYSTEM_VERSION.getCode(), "27.0"); testProps.put(LOINC_CODESYSTEM_VERSION.getCode(), "27.0");
doReturn(mock(UploadStatistics.class)).when(testedSvc).processLoincFiles(
mockFileDescriptors, mySrd, testProps, true);
testedSvc.loadLoinc(myFiles.getFiles(), requestDetails);
testedSvc.loadLoinc(mockFileDescriptorList, mySrd); verify(myTermCodeSystemStorageSvc, times(1)).storeNewCodeSystemVersion(
any(CodeSystem.class), any(TermCodeSystemVersion.class), myRequestDetailsCaptor.capture(), any(), any());
myRequestDetailsCaptor.getAllValues().forEach( rd ->
Mockito.verify(testedSvc, times(1)).processLoincFiles(any(), any(), any(), eq(true)); assertFalse(rd.getUserData() == null ||
(boolean) requestDetails.getUserData().getOrDefault(MAKE_LOADING_VERSION_CURRENT, Boolean.TRUE))
);
} }
@Test @Test
public void testNoMakeCurrentParameterDefaultsToTrueAndCallsSetVersion() { public void testMakeCurrentVersionPropertySet() {
ArgumentCaptor<Boolean> closeFilesArgCaptor = ArgumentCaptor.forClass(Boolean.class); testProps.put(LOINC_CODESYSTEM_MAKE_CURRENT.getCode(), "true");
ArgumentCaptor<Boolean> makeCurrentVersionArgCaptor = ArgumentCaptor.forClass(boolean.class);
testProps.put(LOINC_CODESYSTEM_VERSION.getCode(), "27.0"); testProps.put(LOINC_CODESYSTEM_VERSION.getCode(), "27.0");
doReturn(mockFileDescriptors).when(testedSvc).getLoadedFileDescriptors(mockFileDescriptorList);
doReturn(mock(UploadStatistics.class)).when(testedSvc).processLoincFiles( doReturn(mock(UploadStatistics.class)).when(testedSvc).processLoincFiles(
eq(mockFileDescriptors), any(RequestDetails.class), eq(testProps), any()); eq(mockFileDescriptors), eq(requestDetails), eq(testProps), any());
testedSvc.loadLoinc(mockFileDescriptorList, requestDetails);
boolean isMakeCurrent = requestDetails.getUserData() == null ||
(boolean) requestDetails.getUserData().getOrDefault(MAKE_LOADING_VERSION_CURRENT, Boolean.TRUE);
assertTrue(isMakeCurrent);
}
testedSvc.loadLoinc(mockFileDescriptorList, new ServletRequestDetails()); @Test
public void testMakeCurrentVersionByDefaultPropertySet() {
testProps.put(LOINC_CODESYSTEM_VERSION.getCode(), "27.0");
doReturn(mockFileDescriptors).when(testedSvc).getLoadedFileDescriptors(mockFileDescriptorList);
doReturn(mock(UploadStatistics.class)).when(testedSvc).processLoincFiles(
eq(mockFileDescriptors), eq(requestDetails), eq(testProps), any());
testedSvc.loadLoinc(mockFileDescriptorList, requestDetails);
boolean isMakeCurrent = requestDetails.getUserData() == null ||
(boolean) requestDetails.getUserData().getOrDefault(MAKE_LOADING_VERSION_CURRENT, Boolean.TRUE);
assertTrue(isMakeCurrent);
}
Mockito.verify(testedSvc, times(2)).processLoincFiles( @Test
any(), myRequestDetailsCaptor.capture(), any(), any()); public void testDontMakeCurrentVersionPropertySet() {
testProps.put(LOINC_CODESYSTEM_MAKE_CURRENT.getCode(), "false");
testProps.put(LOINC_CODESYSTEM_VERSION.getCode(), "27.0");
doReturn(mockFileDescriptors).when(testedSvc).getLoadedFileDescriptors(mockFileDescriptorList);
doReturn(mock(UploadStatistics.class)).when(testedSvc).processLoincFiles(
eq(mockFileDescriptors), eq(requestDetails), eq(testProps), any());
// ask no closing files in first call and closing in second testedSvc.loadLoinc(mockFileDescriptorList, requestDetails);
assertEquals(true, myRequestDetailsCaptor.getAllValues().get(0)
.getUserData().getOrDefault(MAKE_LOADING_VERSION_CURRENT, Boolean.TRUE)); boolean isMakeCurrent = requestDetails.getUserData() == null ||
assertEquals(true, myRequestDetailsCaptor.getAllValues().get(1) (boolean) requestDetails.getUserData().getOrDefault(MAKE_LOADING_VERSION_CURRENT, Boolean.TRUE);
.getUserData().getOrDefault(MAKE_LOADING_VERSION_CURRENT, Boolean.TRUE)); assertFalse(isMakeCurrent);
} }
@Test @Test
public void testNoVersionAndNoMakeCurrentThrows() { public void testNoVersionAndNoMakeCurrentThrows() {
testProps.put(LOINC_CODESYSTEM_MAKE_CURRENT.getCode(), "false"); testProps.put(LOINC_CODESYSTEM_MAKE_CURRENT.getCode(), "false");
doReturn(mockFileDescriptors).when(testedSvc).getLoadedFileDescriptors(mockFileDescriptorList);
InvalidRequestException thrown = Assertions.assertThrows(InvalidRequestException.class, InvalidRequestException thrown = Assertions.assertThrows(InvalidRequestException.class,
() -> testedSvc.loadLoinc(mockFileDescriptorList, mySrd) ); () -> testedSvc.loadLoinc(mockFileDescriptorList, mySrd) );