Add some tests that can be enhanced for #286 - These don't yet validate anything useful but they have chains
This commit is contained in:
parent
1ba03f4a9b
commit
9808ccd309
|
@ -0,0 +1,189 @@
|
||||||
|
|
||||||
|
package ca.uhn.fhir.rest.server;
|
||||||
|
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import ca.uhn.fhir.model.api.Include;
|
||||||
|
import ca.uhn.fhir.model.api.annotation.Description;
|
||||||
|
//
|
||||||
|
import ca.uhn.fhir.model.dstu2.resource.Organization;
|
||||||
|
import ca.uhn.fhir.model.dstu2.resource.Patient;
|
||||||
|
import ca.uhn.fhir.model.dstu2.resource.Practitioner;
|
||||||
|
import ca.uhn.fhir.rest.annotation.IncludeParam;
|
||||||
|
import ca.uhn.fhir.rest.annotation.OptionalParam;
|
||||||
|
import ca.uhn.fhir.rest.annotation.Search;
|
||||||
|
import ca.uhn.fhir.rest.annotation.Sort;
|
||||||
|
import ca.uhn.fhir.rest.api.SortSpec;
|
||||||
|
// import ca.uhn.fhir.model.dstu.resource.Binary;
|
||||||
|
// import ca.uhn.fhir.model.dstu2.resource.Bundle;
|
||||||
|
// import ca.uhn.fhir.model.api.Bundle;
|
||||||
|
import ca.uhn.fhir.rest.param.DateRangeParam;
|
||||||
|
import ca.uhn.fhir.rest.param.ReferenceAndListParam;
|
||||||
|
import ca.uhn.fhir.rest.param.StringAndListParam;
|
||||||
|
import ca.uhn.fhir.rest.param.TokenAndListParam;
|
||||||
|
import ca.uhn.fhir.rest.param.UriAndListParam;
|
||||||
|
|
||||||
|
public class PatientResourceProvider implements IResourceProvider
|
||||||
|
{
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public Class<Patient> getResourceType() {
|
||||||
|
return Patient.class;
|
||||||
|
}
|
||||||
|
|
||||||
|
//@formatter:off
|
||||||
|
@Search()
|
||||||
|
public ca.uhn.fhir.rest.server.IBundleProvider search(
|
||||||
|
javax.servlet.http.HttpServletRequest theServletRequest,
|
||||||
|
|
||||||
|
@Description(shortDefinition="The resource identity")
|
||||||
|
@OptionalParam(name="_id")
|
||||||
|
StringAndListParam theId,
|
||||||
|
|
||||||
|
@Description(shortDefinition="The resource language")
|
||||||
|
@OptionalParam(name="_language")
|
||||||
|
StringAndListParam theResourceLanguage,
|
||||||
|
|
||||||
|
@Description(shortDefinition="Search the contents of the resource's data using a fulltext search")
|
||||||
|
@OptionalParam(name=ca.uhn.fhir.rest.server.Constants.PARAM_CONTENT)
|
||||||
|
StringAndListParam theFtContent,
|
||||||
|
|
||||||
|
@Description(shortDefinition="Search the contents of the resource's narrative using a fulltext search")
|
||||||
|
@OptionalParam(name=ca.uhn.fhir.rest.server.Constants.PARAM_TEXT)
|
||||||
|
StringAndListParam theFtText,
|
||||||
|
|
||||||
|
@Description(shortDefinition="Search for resources which have the given tag")
|
||||||
|
@OptionalParam(name=ca.uhn.fhir.rest.server.Constants.PARAM_TAG)
|
||||||
|
TokenAndListParam theSearchForTag,
|
||||||
|
|
||||||
|
@Description(shortDefinition="Search for resources which have the given security labels")
|
||||||
|
@OptionalParam(name=ca.uhn.fhir.rest.server.Constants.PARAM_SECURITY)
|
||||||
|
TokenAndListParam theSearchForSecurity,
|
||||||
|
|
||||||
|
@Description(shortDefinition="Search for resources which have the given profile")
|
||||||
|
@OptionalParam(name=ca.uhn.fhir.rest.server.Constants.PARAM_PROFILE)
|
||||||
|
UriAndListParam theSearchForProfile,
|
||||||
|
|
||||||
|
|
||||||
|
@Description(shortDefinition="A patient identifier")
|
||||||
|
@OptionalParam(name="identifier")
|
||||||
|
TokenAndListParam theIdentifier,
|
||||||
|
|
||||||
|
@Description(shortDefinition="A portion of either family or given name of the patient")
|
||||||
|
@OptionalParam(name="name")
|
||||||
|
StringAndListParam theName,
|
||||||
|
|
||||||
|
@Description(shortDefinition="A portion of the family name of the patient")
|
||||||
|
@OptionalParam(name="family")
|
||||||
|
StringAndListParam theFamily,
|
||||||
|
|
||||||
|
@Description(shortDefinition="A portion of the given name of the patient")
|
||||||
|
@OptionalParam(name="given")
|
||||||
|
StringAndListParam theGiven,
|
||||||
|
|
||||||
|
@Description(shortDefinition="A portion of either family or given name using some kind of phonetic matching algorithm")
|
||||||
|
@OptionalParam(name="phonetic")
|
||||||
|
StringAndListParam thePhonetic,
|
||||||
|
|
||||||
|
@Description(shortDefinition="The value in any kind of telecom details of the patient")
|
||||||
|
@OptionalParam(name="telecom")
|
||||||
|
TokenAndListParam theTelecom,
|
||||||
|
|
||||||
|
@Description(shortDefinition="A value in a phone contact")
|
||||||
|
@OptionalParam(name="phone")
|
||||||
|
TokenAndListParam thePhone,
|
||||||
|
|
||||||
|
@Description(shortDefinition="A value in an email contact")
|
||||||
|
@OptionalParam(name="email")
|
||||||
|
TokenAndListParam theEmail,
|
||||||
|
|
||||||
|
@Description(shortDefinition="An address in any kind of address/part of the patient")
|
||||||
|
@OptionalParam(name="address")
|
||||||
|
StringAndListParam theAddress,
|
||||||
|
|
||||||
|
@Description(shortDefinition="A city specified in an address")
|
||||||
|
@OptionalParam(name="address-city")
|
||||||
|
StringAndListParam theAddress_city,
|
||||||
|
|
||||||
|
@Description(shortDefinition="A state specified in an address")
|
||||||
|
@OptionalParam(name="address-state")
|
||||||
|
StringAndListParam theAddress_state,
|
||||||
|
|
||||||
|
@Description(shortDefinition="A postalCode specified in an address")
|
||||||
|
@OptionalParam(name="address-postalcode")
|
||||||
|
StringAndListParam theAddress_postalcode,
|
||||||
|
|
||||||
|
@Description(shortDefinition="A country specified in an address")
|
||||||
|
@OptionalParam(name="address-country")
|
||||||
|
StringAndListParam theAddress_country,
|
||||||
|
|
||||||
|
@Description(shortDefinition="A use code specified in an address")
|
||||||
|
@OptionalParam(name="address-use")
|
||||||
|
TokenAndListParam theAddress_use,
|
||||||
|
|
||||||
|
@Description(shortDefinition="Gender of the patient")
|
||||||
|
@OptionalParam(name="gender")
|
||||||
|
TokenAndListParam theGender,
|
||||||
|
|
||||||
|
@Description(shortDefinition="Language code (irrespective of use value)")
|
||||||
|
@OptionalParam(name="language")
|
||||||
|
TokenAndListParam theLanguage,
|
||||||
|
|
||||||
|
@Description(shortDefinition="The patient's date of birth")
|
||||||
|
@OptionalParam(name="birthdate")
|
||||||
|
DateRangeParam theBirthdate,
|
||||||
|
|
||||||
|
@Description(shortDefinition="The organization at which this person is a patient")
|
||||||
|
@OptionalParam(name="organization", targetTypes={ Organization.class } )
|
||||||
|
ReferenceAndListParam theOrganization,
|
||||||
|
|
||||||
|
@Description(shortDefinition="Patient's nominated care provider, could be a care manager, not the organization that manages the record")
|
||||||
|
@OptionalParam(name="careprovider", targetTypes={ Organization.class , Practitioner.class } )
|
||||||
|
ReferenceAndListParam theCareprovider,
|
||||||
|
|
||||||
|
@Description(shortDefinition="Whether the patient record is active")
|
||||||
|
@OptionalParam(name="active")
|
||||||
|
TokenAndListParam theActive,
|
||||||
|
|
||||||
|
@Description(shortDefinition="The species for animal patients")
|
||||||
|
@OptionalParam(name="animal-species")
|
||||||
|
TokenAndListParam theAnimal_species,
|
||||||
|
|
||||||
|
@Description(shortDefinition="The breed for animal patients")
|
||||||
|
@OptionalParam(name="animal-breed")
|
||||||
|
TokenAndListParam theAnimal_breed,
|
||||||
|
|
||||||
|
@Description(shortDefinition="All patients linked to the given patient")
|
||||||
|
@OptionalParam(name="link", targetTypes={ Patient.class } )
|
||||||
|
ReferenceAndListParam theLink,
|
||||||
|
|
||||||
|
@Description(shortDefinition="This patient has been marked as deceased, or as a death date entered")
|
||||||
|
@OptionalParam(name="deceased")
|
||||||
|
TokenAndListParam theDeceased,
|
||||||
|
|
||||||
|
@Description(shortDefinition="The date of death has been provided and satisfies this search value")
|
||||||
|
@OptionalParam(name="deathdate")
|
||||||
|
DateRangeParam theDeathdate,
|
||||||
|
|
||||||
|
@IncludeParam(reverse=true)
|
||||||
|
Set<Include> theRevIncludes,
|
||||||
|
@Description(shortDefinition="Only return resources which were last updated as specified by the given range")
|
||||||
|
@OptionalParam(name="_lastUpdated")
|
||||||
|
DateRangeParam theLastUpdated,
|
||||||
|
|
||||||
|
@IncludeParam(allow= {
|
||||||
|
"Patient:careprovider" , "Patient:link" , "Patient:organization" , "Patient:careprovider" , "Patient:link" , "Patient:organization" , "Patient:careprovider" , "Patient:link" , "Patient:organization" , "*"
|
||||||
|
})
|
||||||
|
Set<Include> theIncludes,
|
||||||
|
|
||||||
|
@Sort
|
||||||
|
SortSpec theSort,
|
||||||
|
|
||||||
|
@ca.uhn.fhir.rest.annotation.Count
|
||||||
|
Integer theCount
|
||||||
|
) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
//@formatter:on
|
||||||
|
|
||||||
|
}
|
|
@ -54,6 +54,7 @@ import ca.uhn.fhir.rest.method.BaseMethodBinding;
|
||||||
import ca.uhn.fhir.rest.method.SearchMethodBinding;
|
import ca.uhn.fhir.rest.method.SearchMethodBinding;
|
||||||
import ca.uhn.fhir.rest.method.SearchParameter;
|
import ca.uhn.fhir.rest.method.SearchParameter;
|
||||||
import ca.uhn.fhir.rest.param.DateRangeParam;
|
import ca.uhn.fhir.rest.param.DateRangeParam;
|
||||||
|
import ca.uhn.fhir.rest.param.ReferenceAndListParam;
|
||||||
import ca.uhn.fhir.rest.param.TokenOrListParam;
|
import ca.uhn.fhir.rest.param.TokenOrListParam;
|
||||||
import ca.uhn.fhir.rest.server.provider.dstu2.ServerConformanceProvider;
|
import ca.uhn.fhir.rest.server.provider.dstu2.ServerConformanceProvider;
|
||||||
import ca.uhn.fhir.validation.ValidationResult;
|
import ca.uhn.fhir.validation.ValidationResult;
|
||||||
|
@ -392,6 +393,36 @@ public class ServerConformanceProviderDstu2Test {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testSearchReferenceParameterDocumentation() throws Exception {
|
||||||
|
|
||||||
|
RestfulServer rs = new RestfulServer(ourCtx);
|
||||||
|
rs.setProviders(new PatientResourceProvider());
|
||||||
|
|
||||||
|
ServerConformanceProvider sc = new ServerConformanceProvider(rs);
|
||||||
|
rs.setServerConformanceProvider(sc);
|
||||||
|
|
||||||
|
rs.init(createServletConfig());
|
||||||
|
|
||||||
|
boolean found = false;
|
||||||
|
Collection<ResourceBinding> resourceBindings = rs.getResourceBindings();
|
||||||
|
for (ResourceBinding resourceBinding : resourceBindings) {
|
||||||
|
if (resourceBinding.getResourceName().equals("Patient")) {
|
||||||
|
List<BaseMethodBinding<?>> methodBindings = resourceBinding.getMethodBindings();
|
||||||
|
SearchMethodBinding binding = (SearchMethodBinding) methodBindings.get(0);
|
||||||
|
SearchParameter param = (SearchParameter) binding.getParameters().get(25);
|
||||||
|
assertEquals("The organization at which this person is a patient", param.getDescription());
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assertTrue(found);
|
||||||
|
Conformance conformance = sc.getServerConformance(createHttpServletRequest());
|
||||||
|
|
||||||
|
String conf = ourCtx.newXmlParser().setPrettyPrint(true).encodeResourceToString(conformance);
|
||||||
|
ourLog.info(conf);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testSystemHistorySupported() throws Exception {
|
public void testSystemHistorySupported() throws Exception {
|
||||||
|
|
||||||
|
@ -582,7 +613,19 @@ public class ServerConformanceProviderDstu2Test {
|
||||||
public static class SearchProvider {
|
public static class SearchProvider {
|
||||||
|
|
||||||
@Search(type = Patient.class)
|
@Search(type = Patient.class)
|
||||||
public Patient findPatient(@Description(shortDefinition = "The patient's identifier (MRN or other card number)") @RequiredParam(name = Patient.SP_IDENTIFIER) IdentifierDt theIdentifier) {
|
public Patient findPatient1(
|
||||||
|
@Description(shortDefinition = "The patient's identifier (MRN or other card number)")
|
||||||
|
@RequiredParam(name = Patient.SP_IDENTIFIER)
|
||||||
|
IdentifierDt theIdentifier) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Search(type = Patient.class)
|
||||||
|
public Patient findPatient2(
|
||||||
|
@Description(shortDefinition="All patients linked to the given patient")
|
||||||
|
@OptionalParam(name="link", targetTypes={ Patient.class } )
|
||||||
|
ReferenceAndListParam theLink
|
||||||
|
) {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue