Add path value to _id search parameter and other missing search param… (#6128)
* Add path value to _id search parameter and other missing search parameters to IAnyResource. * Adjust tests and remove now unnecessary addition of meta parameters which are now provided by IAnyResource * Revert unneeded change * _security param is not token but uri * Add tests for new defined resource-level standard parameters * Adjust test --------- Co-authored-by: juan.marchionatto <juan.marchionatto@smilecdr.com>
This commit is contained in:
parent
2c6b3e8305
commit
2275eba1a0
|
@ -20,29 +20,115 @@
|
|||
package org.hl7.fhir.instance.model.api;
|
||||
|
||||
import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
|
||||
import ca.uhn.fhir.rest.gclient.DateClientParam;
|
||||
import ca.uhn.fhir.rest.gclient.TokenClientParam;
|
||||
import ca.uhn.fhir.rest.gclient.UriClientParam;
|
||||
|
||||
/**
|
||||
* An IBaseResource that has a FHIR version of DSTU3 or higher
|
||||
*/
|
||||
public interface IAnyResource extends IBaseResource {
|
||||
|
||||
String SP_RES_ID = "_id";
|
||||
/**
|
||||
* Search parameter constant for <b>_id</b>
|
||||
*/
|
||||
@SearchParamDefinition(name = "_id", path = "", description = "The ID of the resource", type = "token")
|
||||
String SP_RES_ID = "_id";
|
||||
@SearchParamDefinition(
|
||||
name = SP_RES_ID,
|
||||
path = "Resource.id",
|
||||
description = "The ID of the resource",
|
||||
type = "token")
|
||||
|
||||
/**
|
||||
* <b>Fluent Client</b> search parameter constant for <b>_id</b>
|
||||
* <p>
|
||||
* Description: <b>the _id of a resource</b><br>
|
||||
* Type: <b>string</b><br>
|
||||
* Path: <b>Resource._id</b><br>
|
||||
* Path: <b>Resource.id</b><br>
|
||||
* </p>
|
||||
*/
|
||||
TokenClientParam RES_ID = new TokenClientParam(IAnyResource.SP_RES_ID);
|
||||
|
||||
String SP_RES_LAST_UPDATED = "_lastUpdated";
|
||||
/**
|
||||
* Search parameter constant for <b>_lastUpdated</b>
|
||||
*/
|
||||
@SearchParamDefinition(
|
||||
name = SP_RES_LAST_UPDATED,
|
||||
path = "Resource.meta.lastUpdated",
|
||||
description = "The last updated date of the resource",
|
||||
type = "date")
|
||||
|
||||
/**
|
||||
* <b>Fluent Client</b> search parameter constant for <b>_lastUpdated</b>
|
||||
* <p>
|
||||
* Description: <b>The last updated date of a resource</b><br>
|
||||
* Type: <b>date</b><br>
|
||||
* Path: <b>Resource.meta.lastUpdated</b><br>
|
||||
* </p>
|
||||
*/
|
||||
DateClientParam RES_LAST_UPDATED = new DateClientParam(IAnyResource.SP_RES_LAST_UPDATED);
|
||||
|
||||
String SP_RES_TAG = "_tag";
|
||||
/**
|
||||
* Search parameter constant for <b>_tag</b>
|
||||
*/
|
||||
@SearchParamDefinition(
|
||||
name = SP_RES_TAG,
|
||||
path = "Resource.meta.tag",
|
||||
description = "The tag of the resource",
|
||||
type = "token")
|
||||
|
||||
/**
|
||||
* <b>Fluent Client</b> search parameter constant for <b>_tag</b>
|
||||
* <p>
|
||||
* Description: <b>The tag of a resource</b><br>
|
||||
* Type: <b>token</b><br>
|
||||
* Path: <b>Resource.meta.tag</b><br>
|
||||
* </p>
|
||||
*/
|
||||
TokenClientParam RES_TAG = new TokenClientParam(IAnyResource.SP_RES_TAG);
|
||||
|
||||
String SP_RES_PROFILE = "_profile";
|
||||
/**
|
||||
* Search parameter constant for <b>_profile</b>
|
||||
*/
|
||||
@SearchParamDefinition(
|
||||
name = SP_RES_PROFILE,
|
||||
path = "Resource.meta.profile",
|
||||
description = "The profile of the resource",
|
||||
type = "uri")
|
||||
|
||||
/**
|
||||
* <b>Fluent Client</b> search parameter constant for <b>_profile</b>
|
||||
* <p>
|
||||
* Description: <b>The profile of a resource</b><br>
|
||||
* Type: <b>uri</b><br>
|
||||
* Path: <b>Resource.meta.profile</b><br>
|
||||
* </p>
|
||||
*/
|
||||
UriClientParam RES_PROFILE = new UriClientParam(IAnyResource.SP_RES_PROFILE);
|
||||
|
||||
String SP_RES_SECURITY = "_security";
|
||||
/**
|
||||
* Search parameter constant for <b>_security</b>
|
||||
*/
|
||||
@SearchParamDefinition(
|
||||
name = SP_RES_SECURITY,
|
||||
path = "Resource.meta.security",
|
||||
description = "The security of the resource",
|
||||
type = "token")
|
||||
|
||||
/**
|
||||
* <b>Fluent Client</b> search parameter constant for <b>_security</b>
|
||||
* <p>
|
||||
* Description: <b>The security of a resource</b><br>
|
||||
* Type: <b>token</b><br>
|
||||
* Path: <b>Resource.meta.security</b><br>
|
||||
* </p>
|
||||
*/
|
||||
TokenClientParam RES_SECURITY = new TokenClientParam(IAnyResource.SP_RES_SECURITY);
|
||||
|
||||
String getId();
|
||||
|
||||
IIdType getIdElement();
|
||||
|
|
|
@ -0,0 +1,6 @@
|
|||
---
|
||||
type: fix
|
||||
issue: 6123
|
||||
title: "`IAnyResource` `_id` search parameter was missing `path` property value, which resulted in extractor not
|
||||
working when standard search parameters were instantiated from defined context. This has been fixed, and also
|
||||
`_LastUpdated`, `_tag`, `_profile`, and `_security` parameter definitions were added to the class."
|
|
@ -0,0 +1,38 @@
|
|||
package ca.uhn.fhir.jpa.searchparam.registry;
|
||||
|
||||
import ca.uhn.fhir.context.FhirContext;
|
||||
import ca.uhn.fhir.context.RuntimeSearchParam;
|
||||
import ca.uhn.fhir.rest.server.util.FhirContextSearchParamRegistry;
|
||||
import org.junit.jupiter.params.ParameterizedTest;
|
||||
import org.junit.jupiter.params.provider.CsvSource;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
import static org.hl7.fhir.instance.model.api.IAnyResource.SP_RES_ID;
|
||||
import static org.hl7.fhir.instance.model.api.IAnyResource.SP_RES_LAST_UPDATED;
|
||||
import static org.hl7.fhir.instance.model.api.IAnyResource.SP_RES_PROFILE;
|
||||
import static org.hl7.fhir.instance.model.api.IAnyResource.SP_RES_SECURITY;
|
||||
import static org.hl7.fhir.instance.model.api.IAnyResource.SP_RES_TAG;
|
||||
|
||||
class FhirContextSearchParamRegistryTest {
|
||||
|
||||
private static final FhirContext ourFhirContext = FhirContext.forR4();
|
||||
|
||||
FhirContextSearchParamRegistry mySearchParamRegistry = new FhirContextSearchParamRegistry(ourFhirContext);
|
||||
|
||||
@ParameterizedTest
|
||||
@CsvSource({
|
||||
SP_RES_ID + ", Resource.id",
|
||||
SP_RES_LAST_UPDATED + ", Resource.meta.lastUpdated",
|
||||
SP_RES_TAG + ", Resource.meta.tag",
|
||||
SP_RES_PROFILE + ", Resource.meta.profile",
|
||||
SP_RES_SECURITY + ", Resource.meta.security"
|
||||
})
|
||||
void testResourceLevelSearchParamsAreRegistered(String theSearchParamName, String theSearchParamPath) {
|
||||
RuntimeSearchParam sp = mySearchParamRegistry.getActiveSearchParam("Patient", theSearchParamName);
|
||||
|
||||
assertThat(sp)
|
||||
.as("path is null for search parameter: '%s'", theSearchParamName)
|
||||
.isNotNull().extracting("path").isEqualTo(theSearchParamPath);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,5 +1,6 @@
|
|||
package ca.uhn.fhir.jpa.dao.dstu3;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import ca.uhn.fhir.i18n.Msg;
|
||||
import ca.uhn.fhir.jpa.api.config.JpaStorageSettings;
|
||||
|
@ -9,6 +10,7 @@ import ca.uhn.fhir.jpa.searchparam.SearchParameterMap;
|
|||
import ca.uhn.fhir.jpa.test.BaseJpaDstu3Test;
|
||||
import ca.uhn.fhir.model.api.Include;
|
||||
import ca.uhn.fhir.rest.api.server.IBundleProvider;
|
||||
import ca.uhn.fhir.rest.api.server.SystemRequestDetails;
|
||||
import ca.uhn.fhir.rest.param.DateParam;
|
||||
import ca.uhn.fhir.rest.param.NumberParam;
|
||||
import ca.uhn.fhir.rest.param.ReferenceParam;
|
||||
|
@ -17,6 +19,7 @@ import ca.uhn.fhir.rest.param.TokenParam;
|
|||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||
import ca.uhn.fhir.rest.server.exceptions.UnprocessableEntityException;
|
||||
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
|
||||
import ca.uhn.fhir.util.ClasspathUtil;
|
||||
import org.hl7.fhir.dstu3.model.Appointment;
|
||||
import org.hl7.fhir.dstu3.model.Appointment.AppointmentStatus;
|
||||
|
@ -192,7 +195,7 @@ public class FhirResourceDaoDstu3SearchCustomSearchParamTest extends BaseJpaDstu
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testCustomReferenceParameter() throws Exception {
|
||||
public void testCustomReferenceParameter() {
|
||||
SearchParameter sp = new SearchParameter();
|
||||
sp.addBase("Patient");
|
||||
sp.setCode("myDoctor");
|
||||
|
@ -238,7 +241,7 @@ public class FhirResourceDaoDstu3SearchCustomSearchParamTest extends BaseJpaDstu
|
|||
Patient p1 = new Patient();
|
||||
p1.setActive(true);
|
||||
p1.addExtension().setUrl("http://acme.org/eyecolour").addExtension().setUrl("http://foo").setValue(new StringType("VAL"));
|
||||
IIdType p1id = myPatientDao.create(p1).getId().toUnqualifiedVersionless();
|
||||
myPatientDao.create(p1).getId().toUnqualifiedVersionless();
|
||||
|
||||
}
|
||||
|
||||
|
@ -253,7 +256,7 @@ public class FhirResourceDaoDstu3SearchCustomSearchParamTest extends BaseJpaDstu
|
|||
attendingSp.setXpathUsage(org.hl7.fhir.dstu3.model.SearchParameter.XPathUsageType.NORMAL);
|
||||
attendingSp.setStatus(org.hl7.fhir.dstu3.model.Enumerations.PublicationStatus.ACTIVE);
|
||||
attendingSp.getTarget().add(new CodeType("Practitioner"));
|
||||
IIdType spId = mySearchParameterDao.create(attendingSp, mySrd).getId().toUnqualifiedVersionless();
|
||||
mySearchParameterDao.create(attendingSp, mySrd).getId().toUnqualifiedVersionless();
|
||||
|
||||
mySearchParamRegistry.forceRefresh();
|
||||
|
||||
|
@ -417,7 +420,7 @@ public class FhirResourceDaoDstu3SearchCustomSearchParamTest extends BaseJpaDstu
|
|||
Patient p2 = new Patient();
|
||||
p2.addName().setFamily("P2");
|
||||
p2.addExtension().setUrl("http://acme.org/sibling").setValue(new Reference(p1id));
|
||||
IIdType p2id = myPatientDao.create(p2).getId().toUnqualifiedVersionless();
|
||||
myPatientDao.create(p2).getId().toUnqualifiedVersionless();
|
||||
|
||||
SearchParameterMap map;
|
||||
IBundleProvider results;
|
||||
|
@ -571,7 +574,7 @@ public class FhirResourceDaoDstu3SearchCustomSearchParamTest extends BaseJpaDstu
|
|||
Patient p2 = new Patient();
|
||||
p2.setActive(true);
|
||||
p2.addExtension().setUrl("http://acme.org/eyecolour").setValue(new CodeType("green"));
|
||||
IIdType p2id = myPatientDao.create(p2).getId().toUnqualifiedVersionless();
|
||||
myPatientDao.create(p2).getId().toUnqualifiedVersionless();
|
||||
|
||||
// Try with custom gender SP
|
||||
SearchParameterMap map = new SearchParameterMap();
|
||||
|
@ -889,7 +892,7 @@ public class FhirResourceDaoDstu3SearchCustomSearchParamTest extends BaseJpaDstu
|
|||
.setUrl("http://acme.org/bar")
|
||||
.setValue(new Reference(aptId.getValue()));
|
||||
|
||||
IIdType p2id = myPatientDao.create(patient).getId().toUnqualifiedVersionless();
|
||||
myPatientDao.create(patient).getId().toUnqualifiedVersionless();
|
||||
|
||||
SearchParameterMap map;
|
||||
IBundleProvider results;
|
||||
|
@ -1035,7 +1038,7 @@ public class FhirResourceDaoDstu3SearchCustomSearchParamTest extends BaseJpaDstu
|
|||
|
||||
Patient pat2 = new Patient();
|
||||
pat.setGender(AdministrativeGender.FEMALE);
|
||||
IIdType patId2 = myPatientDao.create(pat2, mySrd).getId().toUnqualifiedVersionless();
|
||||
myPatientDao.create(pat2, mySrd).getId().toUnqualifiedVersionless();
|
||||
|
||||
SearchParameterMap map;
|
||||
IBundleProvider results;
|
||||
|
@ -1069,7 +1072,7 @@ public class FhirResourceDaoDstu3SearchCustomSearchParamTest extends BaseJpaDstu
|
|||
myPatientDao.search(map).size();
|
||||
fail("");
|
||||
} catch (InvalidRequestException e) {
|
||||
assertEquals(Msg.code(1223) + "Unknown search parameter \"foo\" for resource type \"Patient\". Valid search parameters for this search are: [_id, _lastUpdated, active, address, address-city, address-country, address-postalcode, address-state, address-use, animal-breed, animal-species, birthdate, death-date, deceased, email, family, gender, general-practitioner, given, identifier, language, link, name, organization, phone, phonetic, telecom]", e.getMessage());
|
||||
assertEquals(Msg.code(1223) + "Unknown search parameter \"foo\" for resource type \"Patient\". Valid search parameters for this search are: [_id, _lastUpdated, _profile, _security, _tag, active, address, address-city, address-country, address-postalcode, address-state, address-use, animal-breed, animal-species, birthdate, death-date, deceased, email, family, gender, general-practitioner, given, identifier, language, link, name, organization, phone, phonetic, telecom]", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1094,7 +1097,7 @@ public class FhirResourceDaoDstu3SearchCustomSearchParamTest extends BaseJpaDstu
|
|||
|
||||
Patient pat2 = new Patient();
|
||||
pat.setGender(AdministrativeGender.FEMALE);
|
||||
IIdType patId2 = myPatientDao.create(pat2, mySrd).getId().toUnqualifiedVersionless();
|
||||
myPatientDao.create(pat2, mySrd).getId().toUnqualifiedVersionless();
|
||||
|
||||
SearchParameterMap map;
|
||||
IBundleProvider results;
|
||||
|
@ -1107,7 +1110,7 @@ public class FhirResourceDaoDstu3SearchCustomSearchParamTest extends BaseJpaDstu
|
|||
myPatientDao.search(map).size();
|
||||
fail("");
|
||||
} catch (InvalidRequestException e) {
|
||||
assertEquals(Msg.code(1223) + "Unknown search parameter \"foo\" for resource type \"Patient\". Valid search parameters for this search are: [_id, _lastUpdated, active, address, address-city, address-country, address-postalcode, address-state, address-use, animal-breed, animal-species, birthdate, death-date, deceased, email, family, gender, general-practitioner, given, identifier, language, link, name, organization, phone, phonetic, telecom]", e.getMessage());
|
||||
assertEquals(Msg.code(1223) + "Unknown search parameter \"foo\" for resource type \"Patient\". Valid search parameters for this search are: [_id, _lastUpdated, _profile, _security, _tag, active, address, address-city, address-country, address-postalcode, address-state, address-use, animal-breed, animal-species, birthdate, death-date, deceased, email, family, gender, general-practitioner, given, identifier, language, link, name, organization, phone, phonetic, telecom]", e.getMessage());
|
||||
}
|
||||
|
||||
// Try with normal gender SP
|
||||
|
@ -1148,10 +1151,10 @@ public class FhirResourceDaoDstu3SearchCustomSearchParamTest extends BaseJpaDstu
|
|||
.findAll()
|
||||
.stream()
|
||||
.filter(t -> t.getParamName().equals("medicationadministration-ingredient-medication"))
|
||||
.collect(Collectors.toList());
|
||||
ourLog.info("Tokens:\n * {}", tokens.stream().map(t -> t.toString()).collect(Collectors.joining("\n * ")));
|
||||
.toList();
|
||||
ourLog.info("Tokens:\n * {}", tokens.stream().map(ResourceIndexedSearchParamToken::toString).collect(Collectors.joining("\n * ")));
|
||||
assertEquals(1, tokens.size(), tokens.toString());
|
||||
assertEquals(false, tokens.get(0).isMissing());
|
||||
assertFalse(tokens.get(0).isMissing());
|
||||
|
||||
});
|
||||
|
||||
|
|
|
@ -1,5 +1,8 @@
|
|||
package ca.uhn.fhir.jpa.dao.dstu3;
|
||||
|
||||
import static org.hl7.fhir.instance.model.api.IAnyResource.SP_RES_PROFILE;
|
||||
import static org.hl7.fhir.instance.model.api.IAnyResource.SP_RES_SECURITY;
|
||||
import static org.hl7.fhir.instance.model.api.IAnyResource.SP_RES_TAG;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
@ -33,6 +36,7 @@ import ca.uhn.fhir.rest.api.MethodOutcome;
|
|||
import ca.uhn.fhir.rest.api.SortOrderEnum;
|
||||
import ca.uhn.fhir.rest.api.SortSpec;
|
||||
import ca.uhn.fhir.rest.api.server.IBundleProvider;
|
||||
import ca.uhn.fhir.rest.api.server.SystemRequestDetails;
|
||||
import ca.uhn.fhir.rest.api.server.storage.IResourcePersistentId;
|
||||
import ca.uhn.fhir.rest.param.DateParam;
|
||||
import ca.uhn.fhir.rest.param.DateRangeParam;
|
||||
|
@ -42,6 +46,7 @@ import ca.uhn.fhir.rest.param.ReferenceParam;
|
|||
import ca.uhn.fhir.rest.param.StringParam;
|
||||
import ca.uhn.fhir.rest.param.TokenOrListParam;
|
||||
import ca.uhn.fhir.rest.param.TokenParam;
|
||||
import ca.uhn.fhir.rest.param.UriParam;
|
||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||
import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
|
||||
import ca.uhn.fhir.rest.server.exceptions.ResourceNotFoundException;
|
||||
|
@ -2082,7 +2087,102 @@ public class FhirResourceDaoDstu3Test extends BaseJpaDstu3Test {
|
|||
found = toList(myPatientDao.search(new SearchParameterMap(Patient.SP_BIRTHDATE + "AAAA", new DateParam(ParamPrefixEnum.GREATERTHAN, "2000-01-01")).setLoadSynchronous(true)));
|
||||
assertThat(found).isEmpty();
|
||||
} catch (InvalidRequestException e) {
|
||||
assertEquals(Msg.code(1223) + "Unknown search parameter \"birthdateAAAA\" for resource type \"Patient\". Valid search parameters for this search are: [_id, _lastUpdated, active, address, address-city, address-country, address-postalcode, address-state, address-use, animal-breed, animal-species, birthdate, death-date, deceased, email, family, gender, general-practitioner, given, identifier, language, link, name, organization, phone, phonetic, telecom]", e.getMessage());
|
||||
assertEquals(Msg.code(1223) + "Unknown search parameter \"birthdateAAAA\" for resource type \"Patient\". Valid search parameters for this search are: [_id, _lastUpdated, _profile, _security, _tag, active, address, address-city, address-country, address-postalcode, address-state, address-use, animal-breed, animal-species, birthdate, death-date, deceased, email, family, gender, general-practitioner, given, identifier, language, link, name, organization, phone, phonetic, telecom]", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPersistSearchParamTag() {
|
||||
Coding TEST_PARAM_VALUE_CODING_1 = new Coding("test-system", "test-code-1", null);
|
||||
Coding TEST_PARAM_VALUE_CODING_2 = new Coding("test-system", "test-code-2", null);
|
||||
|
||||
List<Patient> found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_TAG, new TokenParam(TEST_PARAM_VALUE_CODING_1)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
int initialSizeCoding1 = found.size();
|
||||
|
||||
found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_TAG, new TokenParam(TEST_PARAM_VALUE_CODING_2)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
int initialSizeCoding2 = found.size();
|
||||
|
||||
Patient patient = new Patient();
|
||||
patient.addIdentifier().setSystem("urn:system").setValue("001");
|
||||
patient.getMeta().addTag(TEST_PARAM_VALUE_CODING_1);
|
||||
|
||||
myPatientDao.create(patient, mySrd);
|
||||
|
||||
found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_TAG, new TokenParam(TEST_PARAM_VALUE_CODING_1)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
assertThat(found).hasSize(1 + initialSizeCoding1);
|
||||
|
||||
found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_TAG, new TokenParam(TEST_PARAM_VALUE_CODING_2)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
assertThat(found).hasSize(initialSizeCoding2);
|
||||
|
||||
// If this throws an exception, that would be an acceptable outcome as well..
|
||||
try {
|
||||
found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_TAG + "AAAA", new TokenParam(TEST_PARAM_VALUE_CODING_1)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
assertThat(found).isEmpty();
|
||||
} catch (InvalidRequestException e) {
|
||||
assertEquals(Msg.code(1223) + "Unknown search parameter \"" + SP_RES_TAG+"AAAA" + "\" for resource type \"Patient\". Valid search parameters for this search are: [_id, _lastUpdated, _profile, _security, _tag, active, address, address-city, address-country, address-postalcode, address-state, address-use, animal-breed, animal-species, birthdate, death-date, deceased, email, family, gender, general-practitioner, given, identifier, language, link, name, organization, phone, phonetic, telecom]", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPersistSearchParamProfile() {
|
||||
String profileA = "profile-AAA";
|
||||
String profileB = "profile-BBB";
|
||||
List<Patient> found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_PROFILE, new UriParam(profileA)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
int initialSizeProfileA = found.size();
|
||||
|
||||
found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_PROFILE, new UriParam(profileB)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
int initialSizeProfileB = found.size();
|
||||
|
||||
Patient patient = new Patient();
|
||||
patient.addIdentifier().setSystem("urn:system").setValue("001");
|
||||
patient.getMeta().addProfile(profileA);
|
||||
|
||||
myPatientDao.create(patient, mySrd);
|
||||
|
||||
found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_PROFILE, new UriParam(profileA)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
assertThat(found).hasSize(1 + initialSizeProfileA);
|
||||
|
||||
found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_PROFILE, new UriParam(profileB)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
assertThat(found).hasSize(initialSizeProfileB);
|
||||
|
||||
// If this throws an exception, that would be an acceptable outcome as well..
|
||||
try {
|
||||
found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_PROFILE + "AAAA", new UriParam(profileA)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
assertThat(found).isEmpty();
|
||||
} catch (InvalidRequestException e) {
|
||||
assertEquals(Msg.code(1223) + "Unknown search parameter \"" + SP_RES_PROFILE+"AAAA" + "\" for resource type \"Patient\". Valid search parameters for this search are: [_id, _lastUpdated, _profile, _security, _tag, active, address, address-city, address-country, address-postalcode, address-state, address-use, animal-breed, animal-species, birthdate, death-date, deceased, email, family, gender, general-practitioner, given, identifier, language, link, name, organization, phone, phonetic, telecom]", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testPersistSearchParamSecurity() {
|
||||
Coding TEST_PARAM_VALUE_CODING_1 = new Coding("test-system", "test-code-1", null);
|
||||
Coding TEST_PARAM_VALUE_CODING_2 = new Coding("test-system", "test-code-2", null);
|
||||
|
||||
List<Patient> found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_SECURITY, new TokenParam(TEST_PARAM_VALUE_CODING_1)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
int initialSizeSecurityA = found.size();
|
||||
|
||||
found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_SECURITY, new TokenParam(TEST_PARAM_VALUE_CODING_2)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
int initialSizeSecurityB = found.size();
|
||||
|
||||
Patient patient = new Patient();
|
||||
patient.addIdentifier().setSystem("urn:system").setValue("001");
|
||||
patient.getMeta().addSecurity(TEST_PARAM_VALUE_CODING_1);
|
||||
|
||||
myPatientDao.create(patient, mySrd);
|
||||
|
||||
found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_SECURITY, new TokenParam(TEST_PARAM_VALUE_CODING_1)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
assertThat(found).hasSize(1 + initialSizeSecurityA);
|
||||
|
||||
found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_SECURITY, new TokenParam(TEST_PARAM_VALUE_CODING_2)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
assertThat(found).hasSize(initialSizeSecurityB);
|
||||
|
||||
// If this throws an exception, that would be an acceptable outcome as well..
|
||||
try {
|
||||
found = toList(myPatientDao.search(new SearchParameterMap(SP_RES_SECURITY + "AAAA", new TokenParam(TEST_PARAM_VALUE_CODING_1)).setLoadSynchronous(true), new SystemRequestDetails()));
|
||||
assertThat(found).isEmpty();
|
||||
} catch (InvalidRequestException e) {
|
||||
assertEquals(Msg.code(1223) + "Unknown search parameter \"" + SP_RES_SECURITY+"AAAA" + "\" for resource type \"Patient\". Valid search parameters for this search are: [_id, _lastUpdated, _profile, _security, _tag, active, address, address-city, address-country, address-postalcode, address-state, address-use, animal-breed, animal-species, birthdate, death-date, deceased, email, family, gender, general-practitioner, given, identifier, language, link, name, organization, phone, phonetic, telecom]", e.getMessage());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -71,7 +71,7 @@ public class InstanceReindexServiceImplR5Test extends BaseJpaR5Test {
|
|||
.map(t -> t.getName() + " " + getPartValue("Action", t) + " " + getPartValue("Type", t) + " " + getPartValue("Missing", t))
|
||||
.sorted()
|
||||
.toList();
|
||||
assertThat(indexInstances).as(indexInstances.toString()).containsExactly("_id NO_CHANGE Token true", "active NO_CHANGE Token true", "address NO_CHANGE String true", "address-city NO_CHANGE String true", "address-country NO_CHANGE String true", "address-postalcode NO_CHANGE String true", "address-state NO_CHANGE String true", "address-use NO_CHANGE Token true", "birthdate NO_CHANGE Date true", "death-date NO_CHANGE Date true", "email NO_CHANGE Token true", "gender NO_CHANGE Token true", "general-practitioner NO_CHANGE Reference true", "identifier NO_CHANGE Token true", "language NO_CHANGE Token true", "link NO_CHANGE Reference true", "organization NO_CHANGE Reference true", "part-agree NO_CHANGE Reference true", "phone NO_CHANGE Token true", "telecom NO_CHANGE Token true");
|
||||
assertThat(indexInstances).as(indexInstances.toString()).containsExactly("active NO_CHANGE Token true", "address NO_CHANGE String true", "address-city NO_CHANGE String true", "address-country NO_CHANGE String true", "address-postalcode NO_CHANGE String true", "address-state NO_CHANGE String true", "address-use NO_CHANGE Token true", "birthdate NO_CHANGE Date true", "death-date NO_CHANGE Date true", "email NO_CHANGE Token true", "gender NO_CHANGE Token true", "general-practitioner NO_CHANGE Reference true", "identifier NO_CHANGE Token true", "language NO_CHANGE Token true", "link NO_CHANGE Reference true", "organization NO_CHANGE Reference true", "part-agree NO_CHANGE Reference true", "phone NO_CHANGE Token true", "telecom NO_CHANGE Token true");
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue