mirror of
https://github.com/hapifhir/hapi-fhir.git
synced 2025-02-27 16:56:07 +00:00
Fix up some mocks, fix empty search param maps being generated
This commit is contained in:
parent
126fc212a7
commit
c8ed81d338
@ -30,6 +30,7 @@ import ca.uhn.fhir.jpa.dao.ISearchBuilder;
|
|||||||
import ca.uhn.fhir.jpa.dao.SearchBuilderFactory;
|
import ca.uhn.fhir.jpa.dao.SearchBuilderFactory;
|
||||||
import ca.uhn.fhir.jpa.dao.data.IBulkExportJobDao;
|
import ca.uhn.fhir.jpa.dao.data.IBulkExportJobDao;
|
||||||
import ca.uhn.fhir.jpa.entity.BulkExportJobEntity;
|
import ca.uhn.fhir.jpa.entity.BulkExportJobEntity;
|
||||||
|
import ca.uhn.fhir.jpa.entity.Search;
|
||||||
import ca.uhn.fhir.jpa.model.util.JpaConstants;
|
import ca.uhn.fhir.jpa.model.util.JpaConstants;
|
||||||
import ca.uhn.fhir.jpa.searchparam.MatchUrlService;
|
import ca.uhn.fhir.jpa.searchparam.MatchUrlService;
|
||||||
import ca.uhn.fhir.jpa.searchparam.SearchParameterMap;
|
import ca.uhn.fhir.jpa.searchparam.SearchParameterMap;
|
||||||
@ -107,17 +108,22 @@ public abstract class BaseBulkItemReader implements ItemReader<List<ResourcePers
|
|||||||
RuntimeResourceDefinition theDef = getResourceDefinition();
|
RuntimeResourceDefinition theDef = getResourceDefinition();
|
||||||
Map<String, String[]> requestUrl = UrlUtil.parseQueryStrings(jobEntity.getRequest());
|
Map<String, String[]> requestUrl = UrlUtil.parseQueryStrings(jobEntity.getRequest());
|
||||||
String[] typeFilters = requestUrl.get(JpaConstants.PARAM_EXPORT_TYPE_FILTER);
|
String[] typeFilters = requestUrl.get(JpaConstants.PARAM_EXPORT_TYPE_FILTER);
|
||||||
|
List<SearchParameterMap> spMaps = null;
|
||||||
if (typeFilters != null) {
|
if (typeFilters != null) {
|
||||||
List<SearchParameterMap> maps = Arrays.stream(typeFilters)
|
spMaps = Arrays.stream(typeFilters)
|
||||||
.filter(typeFilter -> typeFilter.startsWith(myResourceType + "?"))
|
.filter(typeFilter -> typeFilter.startsWith(myResourceType + "?"))
|
||||||
.map(filter -> buildSearchParameterMapForTypeFilter(filter, theDef))
|
.map(filter -> buildSearchParameterMapForTypeFilter(filter, theDef))
|
||||||
.collect(Collectors.toList());
|
.collect(Collectors.toList());
|
||||||
return maps;
|
|
||||||
} else {
|
|
||||||
SearchParameterMap map = new SearchParameterMap();
|
|
||||||
enhanceSearchParameterMapWithCommonParameters(map);
|
|
||||||
return Collections.singletonList(map);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//None of the _typeFilters applied to the current resource type, so just make a simple one.
|
||||||
|
if (spMaps == null || spMaps.isEmpty()) {
|
||||||
|
SearchParameterMap defaultMap = new SearchParameterMap();
|
||||||
|
enhanceSearchParameterMapWithCommonParameters(defaultMap);
|
||||||
|
spMaps = Collections.singletonList(defaultMap);
|
||||||
|
}
|
||||||
|
|
||||||
|
return spMaps;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void enhanceSearchParameterMapWithCommonParameters(SearchParameterMap map) {
|
private void enhanceSearchParameterMapWithCommonParameters(SearchParameterMap map) {
|
||||||
|
@ -116,7 +116,7 @@ public class BulkDataExportProviderTest {
|
|||||||
|
|
||||||
IBulkDataExportSvc.JobInfo jobInfo = new IBulkDataExportSvc.JobInfo()
|
IBulkDataExportSvc.JobInfo jobInfo = new IBulkDataExportSvc.JobInfo()
|
||||||
.setJobId(A_JOB_ID);
|
.setJobId(A_JOB_ID);
|
||||||
when(myBulkDataExportSvc.submitJob(any())).thenReturn(jobInfo);
|
when(myBulkDataExportSvc.submitJob(any(), any())).thenReturn(jobInfo);
|
||||||
|
|
||||||
InstantType now = InstantType.now();
|
InstantType now = InstantType.now();
|
||||||
|
|
||||||
@ -140,7 +140,7 @@ public class BulkDataExportProviderTest {
|
|||||||
assertEquals("http://localhost:" + myPort + "/$export-poll-status?_jobId=" + A_JOB_ID, response.getFirstHeader(Constants.HEADER_CONTENT_LOCATION).getValue());
|
assertEquals("http://localhost:" + myPort + "/$export-poll-status?_jobId=" + A_JOB_ID, response.getFirstHeader(Constants.HEADER_CONTENT_LOCATION).getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture());
|
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture(), any());
|
||||||
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
||||||
assertEquals(Constants.CT_FHIR_NDJSON, options.getOutputFormat());
|
assertEquals(Constants.CT_FHIR_NDJSON, options.getOutputFormat());
|
||||||
assertThat(options.getResourceTypes(), containsInAnyOrder("Patient", "Practitioner"));
|
assertThat(options.getResourceTypes(), containsInAnyOrder("Patient", "Practitioner"));
|
||||||
@ -153,7 +153,7 @@ public class BulkDataExportProviderTest {
|
|||||||
|
|
||||||
IBulkDataExportSvc.JobInfo jobInfo = new IBulkDataExportSvc.JobInfo()
|
IBulkDataExportSvc.JobInfo jobInfo = new IBulkDataExportSvc.JobInfo()
|
||||||
.setJobId(A_JOB_ID);
|
.setJobId(A_JOB_ID);
|
||||||
when(myBulkDataExportSvc.submitJob(any())).thenReturn(jobInfo);
|
when(myBulkDataExportSvc.submitJob(any(),any())).thenReturn(jobInfo);
|
||||||
|
|
||||||
InstantType now = InstantType.now();
|
InstantType now = InstantType.now();
|
||||||
|
|
||||||
@ -174,7 +174,7 @@ public class BulkDataExportProviderTest {
|
|||||||
assertEquals("http://localhost:" + myPort + "/$export-poll-status?_jobId=" + A_JOB_ID, response.getFirstHeader(Constants.HEADER_CONTENT_LOCATION).getValue());
|
assertEquals("http://localhost:" + myPort + "/$export-poll-status?_jobId=" + A_JOB_ID, response.getFirstHeader(Constants.HEADER_CONTENT_LOCATION).getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture());
|
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture(), any());
|
||||||
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
||||||
assertEquals(Constants.CT_FHIR_NDJSON, options.getOutputFormat());
|
assertEquals(Constants.CT_FHIR_NDJSON, options.getOutputFormat());
|
||||||
assertThat(options.getResourceTypes(), containsInAnyOrder("Patient", "Practitioner"));
|
assertThat(options.getResourceTypes(), containsInAnyOrder("Patient", "Practitioner"));
|
||||||
@ -303,7 +303,8 @@ public class BulkDataExportProviderTest {
|
|||||||
public void testSuccessfulInitiateGroupBulkRequest_Post() throws IOException {
|
public void testSuccessfulInitiateGroupBulkRequest_Post() throws IOException {
|
||||||
|
|
||||||
IBulkDataExportSvc.JobInfo jobInfo = new IBulkDataExportSvc.JobInfo().setJobId(G_JOB_ID);
|
IBulkDataExportSvc.JobInfo jobInfo = new IBulkDataExportSvc.JobInfo().setJobId(G_JOB_ID);
|
||||||
when(myBulkDataExportSvc.submitJob(any())).thenReturn(jobInfo);
|
when(myBulkDataExportSvc.submitJob(any(),any())).thenReturn(jobInfo);
|
||||||
|
when(myBulkDataExportSvc.getPatientCompartmentResources()).thenReturn(Sets.newHashSet("Observation", "DiagnosticReport"));
|
||||||
|
|
||||||
InstantType now = InstantType.now();
|
InstantType now = InstantType.now();
|
||||||
|
|
||||||
@ -329,7 +330,7 @@ public class BulkDataExportProviderTest {
|
|||||||
assertEquals("http://localhost:" + myPort + "/$export-poll-status?_jobId=" + G_JOB_ID, response.getFirstHeader(Constants.HEADER_CONTENT_LOCATION).getValue());
|
assertEquals("http://localhost:" + myPort + "/$export-poll-status?_jobId=" + G_JOB_ID, response.getFirstHeader(Constants.HEADER_CONTENT_LOCATION).getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture());
|
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture(), any());
|
||||||
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
||||||
assertEquals(Constants.CT_FHIR_NDJSON, options.getOutputFormat());
|
assertEquals(Constants.CT_FHIR_NDJSON, options.getOutputFormat());
|
||||||
assertThat(options.getResourceTypes(), containsInAnyOrder("Observation", "DiagnosticReport"));
|
assertThat(options.getResourceTypes(), containsInAnyOrder("Observation", "DiagnosticReport"));
|
||||||
@ -343,7 +344,7 @@ public class BulkDataExportProviderTest {
|
|||||||
public void testSuccessfulInitiateGroupBulkRequest_Get() throws IOException {
|
public void testSuccessfulInitiateGroupBulkRequest_Get() throws IOException {
|
||||||
|
|
||||||
IBulkDataExportSvc.JobInfo jobInfo = new IBulkDataExportSvc.JobInfo().setJobId(G_JOB_ID);
|
IBulkDataExportSvc.JobInfo jobInfo = new IBulkDataExportSvc.JobInfo().setJobId(G_JOB_ID);
|
||||||
when(myBulkDataExportSvc.submitJob(any())).thenReturn(jobInfo);
|
when(myBulkDataExportSvc.submitJob(any(), any())).thenReturn(jobInfo);
|
||||||
when(myBulkDataExportSvc.getPatientCompartmentResources()).thenReturn(Sets.newHashSet("Patient", "Practitioner"));
|
when(myBulkDataExportSvc.getPatientCompartmentResources()).thenReturn(Sets.newHashSet("Patient", "Practitioner"));
|
||||||
|
|
||||||
InstantType now = InstantType.now();
|
InstantType now = InstantType.now();
|
||||||
@ -366,7 +367,7 @@ public class BulkDataExportProviderTest {
|
|||||||
assertEquals("http://localhost:" + myPort + "/$export-poll-status?_jobId=" + G_JOB_ID, response.getFirstHeader(Constants.HEADER_CONTENT_LOCATION).getValue());
|
assertEquals("http://localhost:" + myPort + "/$export-poll-status?_jobId=" + G_JOB_ID, response.getFirstHeader(Constants.HEADER_CONTENT_LOCATION).getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture());
|
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture(), any());
|
||||||
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
||||||
assertEquals(Constants.CT_FHIR_NDJSON, options.getOutputFormat());
|
assertEquals(Constants.CT_FHIR_NDJSON, options.getOutputFormat());
|
||||||
assertThat(options.getResourceTypes(), containsInAnyOrder("Patient", "Practitioner"));
|
assertThat(options.getResourceTypes(), containsInAnyOrder("Patient", "Practitioner"));
|
||||||
@ -408,7 +409,7 @@ public class BulkDataExportProviderTest {
|
|||||||
get.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RESPOND_ASYNC);
|
get.addHeader(Constants.HEADER_PREFER, Constants.HEADER_PREFER_RESPOND_ASYNC);
|
||||||
myClient.execute(get);
|
myClient.execute(get);
|
||||||
|
|
||||||
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture());
|
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture(), anyBoolean());
|
||||||
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
||||||
|
|
||||||
assertThat(options.getFilters(), containsInAnyOrder(immunizationTypeFilter1, immunizationTypeFilter2, observationFilter1));
|
assertThat(options.getFilters(), containsInAnyOrder(immunizationTypeFilter1, immunizationTypeFilter2, observationFilter1));
|
||||||
@ -436,7 +437,7 @@ public class BulkDataExportProviderTest {
|
|||||||
|
|
||||||
IBulkDataExportSvc.JobInfo jobInfo = new IBulkDataExportSvc.JobInfo()
|
IBulkDataExportSvc.JobInfo jobInfo = new IBulkDataExportSvc.JobInfo()
|
||||||
.setJobId(A_JOB_ID);
|
.setJobId(A_JOB_ID);
|
||||||
when(myBulkDataExportSvc.submitJob(any())).thenReturn(jobInfo);
|
when(myBulkDataExportSvc.submitJob(any(), any())).thenReturn(jobInfo);
|
||||||
|
|
||||||
InstantType now = InstantType.now();
|
InstantType now = InstantType.now();
|
||||||
|
|
||||||
@ -459,7 +460,7 @@ public class BulkDataExportProviderTest {
|
|||||||
assertEquals("http://localhost:" + myPort + "/$export-poll-status?_jobId=" + A_JOB_ID, response.getFirstHeader(Constants.HEADER_CONTENT_LOCATION).getValue());
|
assertEquals("http://localhost:" + myPort + "/$export-poll-status?_jobId=" + A_JOB_ID, response.getFirstHeader(Constants.HEADER_CONTENT_LOCATION).getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture());
|
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture(), myBooleanArgumentCaptor.capture());
|
||||||
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
||||||
assertEquals(Constants.CT_FHIR_NDJSON, options.getOutputFormat());
|
assertEquals(Constants.CT_FHIR_NDJSON, options.getOutputFormat());
|
||||||
assertThat(options.getResourceTypes(), containsInAnyOrder("Patient"));
|
assertThat(options.getResourceTypes(), containsInAnyOrder("Patient"));
|
||||||
@ -470,7 +471,8 @@ public class BulkDataExportProviderTest {
|
|||||||
public void testInitiatePatientExportRequest() throws IOException {
|
public void testInitiatePatientExportRequest() throws IOException {
|
||||||
IBulkDataExportSvc.JobInfo jobInfo = new IBulkDataExportSvc.JobInfo()
|
IBulkDataExportSvc.JobInfo jobInfo = new IBulkDataExportSvc.JobInfo()
|
||||||
.setJobId(A_JOB_ID);
|
.setJobId(A_JOB_ID);
|
||||||
when(myBulkDataExportSvc.submitJob(any())).thenReturn(jobInfo);
|
when(myBulkDataExportSvc.submitJob(any(), any())).thenReturn(jobInfo);
|
||||||
|
when(myBulkDataExportSvc.getPatientCompartmentResources()).thenReturn(Sets.newHashSet("Immunization", "Observation"));
|
||||||
|
|
||||||
InstantType now = InstantType.now();
|
InstantType now = InstantType.now();
|
||||||
|
|
||||||
@ -494,7 +496,7 @@ public class BulkDataExportProviderTest {
|
|||||||
assertEquals("http://localhost:" + myPort + "/$export-poll-status?_jobId=" + A_JOB_ID, response.getFirstHeader(Constants.HEADER_CONTENT_LOCATION).getValue());
|
assertEquals("http://localhost:" + myPort + "/$export-poll-status?_jobId=" + A_JOB_ID, response.getFirstHeader(Constants.HEADER_CONTENT_LOCATION).getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture());
|
verify(myBulkDataExportSvc, times(1)).submitJob(myBulkDataExportOptionsCaptor.capture(), myBooleanArgumentCaptor.capture());
|
||||||
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
BulkDataExportOptions options = myBulkDataExportOptionsCaptor.getValue();
|
||||||
assertEquals(Constants.CT_FHIR_NDJSON, options.getOutputFormat());
|
assertEquals(Constants.CT_FHIR_NDJSON, options.getOutputFormat());
|
||||||
assertThat(options.getResourceTypes(), containsInAnyOrder("Immunization", "Observation"));
|
assertThat(options.getResourceTypes(), containsInAnyOrder("Immunization", "Observation"));
|
||||||
|
@ -203,21 +203,6 @@ public class BulkDataExportSvcImplR4Test extends BaseJpaR4Test {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testSubmit_MultipleTypeFiltersForSameType() {
|
|
||||||
try {
|
|
||||||
BulkDataExportOptions options = new BulkDataExportOptions();
|
|
||||||
options.setOutputFormat(Constants.CT_FHIR_NDJSON);
|
|
||||||
options.setResourceTypes(Sets.newHashSet("Patient"));
|
|
||||||
options.setFilters(Sets.newHashSet("Patient?name=a", "Patient?active=true"));
|
|
||||||
options.setExportStyle(BulkDataExportOptions.ExportStyle.SYSTEM);
|
|
||||||
myBulkDataExportSvc.submitJob(options);
|
|
||||||
fail();
|
|
||||||
} catch (InvalidRequestException e) {
|
|
||||||
assertEquals("Invalid _typeFilter value \"Patient?name=a\". Multiple filters found for type Patient", e.getMessage());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSubmit_TypeFilterForNonSelectedType() {
|
public void testSubmit_TypeFilterForNonSelectedType() {
|
||||||
try {
|
try {
|
||||||
@ -318,6 +303,7 @@ public class BulkDataExportSvcImplR4Test extends BaseJpaR4Test {
|
|||||||
options.setResourceTypes(Sets.newHashSet("Patient", "Observation"));
|
options.setResourceTypes(Sets.newHashSet("Patient", "Observation"));
|
||||||
options.setFilters(Sets.newHashSet(TEST_FILTER));
|
options.setFilters(Sets.newHashSet(TEST_FILTER));
|
||||||
options.setExportStyle(BulkDataExportOptions.ExportStyle.SYSTEM);
|
options.setExportStyle(BulkDataExportOptions.ExportStyle.SYSTEM);
|
||||||
|
|
||||||
IBulkDataExportSvc.JobInfo jobDetails = myBulkDataExportSvc.submitJob(options);
|
IBulkDataExportSvc.JobInfo jobDetails = myBulkDataExportSvc.submitJob(options);
|
||||||
assertNotNull(jobDetails.getJobId());
|
assertNotNull(jobDetails.getJobId());
|
||||||
|
|
||||||
@ -769,7 +755,7 @@ public class BulkDataExportSvcImplR4Test extends BaseJpaR4Test {
|
|||||||
options.setExportStyle(BulkDataExportOptions.ExportStyle.GROUP);
|
options.setExportStyle(BulkDataExportOptions.ExportStyle.GROUP);
|
||||||
options.setGroupId(myPatientGroupId);
|
options.setGroupId(myPatientGroupId);
|
||||||
options.setExpandMdm(false);
|
options.setExpandMdm(false);
|
||||||
options.setFilters(Sets.newHashSet("Observation?identifier=VAL0,VAL2", "Observation?identifer=VAL4"));
|
options.setFilters(Sets.newHashSet("Observation?identifier=VAL0,VAL2", "Observation?identifier=VAL4"));
|
||||||
|
|
||||||
IBulkDataExportSvc.JobInfo jobDetails = myBulkDataExportSvc.submitJob(options);
|
IBulkDataExportSvc.JobInfo jobDetails = myBulkDataExportSvc.submitJob(options);
|
||||||
myBulkDataExportSvc.buildExportFiles();
|
myBulkDataExportSvc.buildExportFiles();
|
||||||
@ -782,16 +768,11 @@ public class BulkDataExportSvcImplR4Test extends BaseJpaR4Test {
|
|||||||
assertThat(jobInfo.getFiles().get(0).getResourceType(), is(equalTo("Observation")));
|
assertThat(jobInfo.getFiles().get(0).getResourceType(), is(equalTo("Observation")));
|
||||||
String nextContents = getBinaryContents(jobInfo, 0);
|
String nextContents = getBinaryContents(jobInfo, 0);
|
||||||
|
|
||||||
assertThat(jobInfo.getFiles().get(0).getResourceType(), is(equalTo("Immunization")));
|
//These are the Observation entries
|
||||||
//These are the COVID-19 entries
|
assertThat(nextContents, is(containsString("OBS0")));
|
||||||
assertThat(nextContents, is(containsString("IMM0")));
|
assertThat(nextContents, is(containsString("OBS2")));
|
||||||
assertThat(nextContents, is(containsString("IMM2")));
|
assertThat(nextContents, is(containsString("OBS4")));
|
||||||
assertThat(nextContents, is(containsString("IMM4")));
|
assertEquals(3, nextContents.split("\n").length);
|
||||||
assertThat(nextContents, is(containsString("IMM6")));
|
|
||||||
assertThat(nextContents, is(containsString("IMM8")));
|
|
||||||
|
|
||||||
//This is the entry for the one referencing patient/1
|
|
||||||
assertThat(nextContents, is(containsString("IMM1")));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public String getBinaryContents(IBulkDataExportSvc.JobInfo theJobInfo, int theIndex) {
|
public String getBinaryContents(IBulkDataExportSvc.JobInfo theJobInfo, int theIndex) {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user