Merge branch 'master' of github.com:jamesagnew/hapi-fhir
This commit is contained in:
commit
9f37646518
|
@ -162,10 +162,13 @@ public class XhtmlDt extends BasePrimitive<List<XMLEvent>> {
|
|||
int firstTagIndex = value.indexOf("<", hasProcessingInstruction ? 1 : 0);
|
||||
if (firstTagIndex != -1) {
|
||||
int firstTagEnd = value.indexOf(">", firstTagIndex);
|
||||
int firstSlash = value.indexOf("/", firstTagIndex);
|
||||
if (firstTagEnd != -1) {
|
||||
String firstTag = value.substring(firstTagIndex, firstTagEnd);
|
||||
if (!firstTag.contains(" xmlns")) {
|
||||
value = value.substring(0, firstTagEnd) + DECL_XMLNS + value.substring(firstTagEnd);
|
||||
if (firstSlash > firstTagEnd) {
|
||||
String firstTag = value.substring(firstTagIndex, firstTagEnd);
|
||||
if (!firstTag.contains(" xmlns")) {
|
||||
value = value.substring(0, firstTagEnd) + DECL_XMLNS + value.substring(firstTagEnd);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -65,10 +65,13 @@ class RuleImplOp extends BaseRule implements IAuthRule {
|
|||
if (theOutputResource == null) {
|
||||
switch (theOperation) {
|
||||
case READ:
|
||||
case VREAD:
|
||||
appliesToResourceId = theInputResourceId;
|
||||
break;
|
||||
case SEARCH_SYSTEM:
|
||||
case SEARCH_TYPE:
|
||||
case HISTORY_INSTANCE:
|
||||
case HISTORY_SYSTEM:
|
||||
return new Verdict(PolicyEnum.ALLOW, this);
|
||||
default:
|
||||
return null;
|
||||
|
@ -80,8 +83,20 @@ class RuleImplOp extends BaseRule implements IAuthRule {
|
|||
if (theInputResource == null && theInputResourceId == null) {
|
||||
return null;
|
||||
}
|
||||
appliesToResource = theInputResource;
|
||||
appliesToResourceId = theInputResourceId;
|
||||
switch (theOperation) {
|
||||
case CREATE:
|
||||
case UPDATE:
|
||||
case ADD_TAGS:
|
||||
case DELETE_TAGS:
|
||||
case META_ADD:
|
||||
case META_DELETE:
|
||||
case PATCH:
|
||||
appliesToResource = theInputResource;
|
||||
appliesToResourceId = theInputResourceId;
|
||||
break;
|
||||
default:
|
||||
return null;
|
||||
}
|
||||
break;
|
||||
case DELETE:
|
||||
if (theOperation == RestOperationTypeEnum.DELETE) {
|
||||
|
|
|
@ -51,6 +51,11 @@ import org.junit.Test;
|
|||
|
||||
import ca.uhn.fhir.model.api.*;
|
||||
import ca.uhn.fhir.model.api.Bundle;
|
||||
import ca.uhn.fhir.model.api.BundleEntry;
|
||||
import ca.uhn.fhir.model.api.ExtensionDt;
|
||||
import ca.uhn.fhir.model.api.IResource;
|
||||
import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
|
||||
import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
|
||||
import ca.uhn.fhir.model.dstu2.composite.CodingDt;
|
||||
import ca.uhn.fhir.model.dstu2.composite.MetaDt;
|
||||
import ca.uhn.fhir.model.dstu2.composite.PeriodDt;
|
||||
|
@ -112,6 +117,23 @@ public class ResourceProviderDstu2Test extends BaseResourceProviderDstu2Test {
|
|||
assertEquals(200, resp.getStatusLine().getStatusCode());
|
||||
}
|
||||
|
||||
/**
|
||||
* See #484
|
||||
*/
|
||||
@Test
|
||||
public void saveAndRetrieveBasicResource() throws IOException {
|
||||
String input = IOUtils.toString(getClass().getResourceAsStream("/basic-stu3.xml"), StandardCharsets.UTF_8);
|
||||
|
||||
String respString = ourClient.transaction().withBundle(input).prettyPrint().execute();
|
||||
ourLog.info(respString);
|
||||
ca.uhn.fhir.model.dstu2.resource.Bundle bundle = myFhirCtx.newXmlParser().parseResource(ca.uhn.fhir.model.dstu2.resource.Bundle.class, respString);
|
||||
IdDt id = new IdDt(bundle.getEntry().get(0).getResponse().getLocation());
|
||||
|
||||
Basic basic = ourClient.read().resource(Basic.class).withId(id).execute();
|
||||
List<ExtensionDt> exts = basic.getUndeclaredExtensionsByUrl("http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/DateID");
|
||||
assertEquals(1, exts.size());
|
||||
}
|
||||
|
||||
/**
|
||||
* See #438
|
||||
*/
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,59 @@
|
|||
<Bundle>
|
||||
<meta>
|
||||
<lastUpdated value="2016-10-28T16:29:43Z" />
|
||||
</meta>
|
||||
<type value="transaction" />
|
||||
<entry>
|
||||
<resource>
|
||||
<Basic>
|
||||
<text>
|
||||
<status value="generated" />
|
||||
<div />
|
||||
</text>
|
||||
<extension url="http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/DateID">
|
||||
<valueDate value="2016-11-01" />
|
||||
</extension>
|
||||
<extension url="http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/SptSolution">
|
||||
<valueCoding value="SptSolution.CatFurSPTSoln" />
|
||||
</extension>
|
||||
<extension url="http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/MethodOfFollowUp">
|
||||
<valueCoding value="FollowUpMethod.ClinicVisit" />
|
||||
</extension>
|
||||
<extension url="http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/SPTDefinition">
|
||||
<valueString value="A positive skin prick test result was defined as a mean wheal diameter of 3mm greater than that of the negative control" />
|
||||
</extension>
|
||||
<extension url="http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/SubjectNo">
|
||||
<valueString value="4320" />
|
||||
</extension>
|
||||
<extension url="http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/AIW">
|
||||
<valueInteger value="58" />
|
||||
</extension>
|
||||
<extension url="http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/FollowUp">
|
||||
<valueCoding value="FollowUp.MSAge1Y" />
|
||||
</extension>
|
||||
<extension url="http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/Subject">
|
||||
<valueCoding value="Person.StudySubject" />
|
||||
</extension>
|
||||
<extension url="http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/VariableLabel">
|
||||
<valueString value="Child sensitised to cat (age 1 spt)" />
|
||||
</extension>
|
||||
<extension url="http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/SPTDataType">
|
||||
<valueCoding value="SkinPrickTestData.SPTResult" />
|
||||
</extension>
|
||||
<extension url="http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/DataSource">
|
||||
<valueCoding value="DataSource.ClinicalMeasurement" />
|
||||
</extension>
|
||||
<extension url="http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/ClinicalType">
|
||||
<valueCoding value="ClinicalMeasurement.SkinPrickTest" />
|
||||
</extension>
|
||||
<extension url="http://localhost:1080/hapi-fhir-jpaserver-example/baseDstu2/StructureDefinition/DataSPTResult">
|
||||
<valueCoding value="TestResult.Negative" />
|
||||
</extension>
|
||||
</Basic>
|
||||
</resource>
|
||||
<request>
|
||||
<method value="POST" />
|
||||
<url value="Basic" />
|
||||
</request>
|
||||
</entry>
|
||||
</Bundle>
|
|
@ -48,6 +48,7 @@ import ca.uhn.fhir.model.dstu2.composite.CodeableConceptDt;
|
|||
import ca.uhn.fhir.model.dstu2.composite.CodingDt;
|
||||
import ca.uhn.fhir.model.dstu2.composite.HumanNameDt;
|
||||
import ca.uhn.fhir.model.dstu2.composite.ResourceReferenceDt;
|
||||
import ca.uhn.fhir.model.dstu2.resource.Basic;
|
||||
import ca.uhn.fhir.model.dstu2.resource.Binary;
|
||||
import ca.uhn.fhir.model.dstu2.resource.Bundle.Entry;
|
||||
import ca.uhn.fhir.model.dstu2.resource.Condition;
|
||||
|
@ -125,7 +126,6 @@ public class JsonParserDstu2Test {
|
|||
assertEquals(true, obs.getReadOnly().getValue().booleanValue());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* See #390
|
||||
*/
|
||||
|
@ -144,6 +144,7 @@ public class JsonParserDstu2Test {
|
|||
assertEquals(0, b.getEntry().size());
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeAndParseExtensions() throws Exception {
|
||||
|
||||
|
@ -301,7 +302,7 @@ public class JsonParserDstu2Test {
|
|||
assertEquals(new Tag("scheme1", "term1", "label1"), tagList.get(0));
|
||||
assertEquals(new Tag("scheme2", "term2", "label2"), tagList.get(1));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* See #336
|
||||
*/
|
||||
|
@ -359,7 +360,6 @@ public class JsonParserDstu2Test {
|
|||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeAndParseSecurityLabels() {
|
||||
Patient p = new Patient();
|
||||
|
@ -424,7 +424,7 @@ public class JsonParserDstu2Test {
|
|||
assertEquals("VERSION2", label.getVersion());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeBundleNewBundleNoText() {
|
||||
|
||||
|
@ -446,7 +446,7 @@ public class JsonParserDstu2Test {
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeBundleOldBundleNoText() {
|
||||
|
||||
|
@ -465,6 +465,7 @@ public class JsonParserDstu2Test {
|
|||
assertEquals(1, b.getEntries().size());
|
||||
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Fixing #89
|
||||
|
@ -494,7 +495,7 @@ public class JsonParserDstu2Test {
|
|||
String actual = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(p);
|
||||
assertThat(actual, not(containsString("78ef6f64c2f2")));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeEmptyBinary() {
|
||||
String output = ourCtx.newJsonParser().encodeResourceToString(new Binary());
|
||||
|
@ -564,7 +565,6 @@ public class JsonParserDstu2Test {
|
|||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeExtensionUndeclaredNonModifier() {
|
||||
Observation obs = new Observation();
|
||||
|
@ -602,7 +602,7 @@ public class JsonParserDstu2Test {
|
|||
assertEquals("ext_url_value", ((StringDt)obs.getUndeclaredExtensions().get(0).getValue()).getValue());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeExtensionUndeclaredNonModifierWithChildExtension() {
|
||||
Observation obs = new Observation();
|
||||
|
@ -647,6 +647,7 @@ public class JsonParserDstu2Test {
|
|||
assertEquals("sub_ext_value", ((StringDt)obs.getUndeclaredExtensions().get(0).getExtension().get(0).getValue()).getValue());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* See #428
|
||||
*/
|
||||
|
@ -1490,6 +1491,16 @@ public class JsonParserDstu2Test {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* See #484
|
||||
*/
|
||||
@Test
|
||||
public void testParseNarrativeWithEmptyDiv() {
|
||||
String input = "{\"resourceType\":\"Basic\",\"id\":\"1\",\"text\":{\"status\":\"generated\",\"div\":\"<div/>\"}}";
|
||||
Basic basic = ourCtx.newJsonParser().parseResource(Basic.class, input);
|
||||
assertEquals("<div/>", basic.getText().getDivAsString());
|
||||
}
|
||||
|
||||
/**
|
||||
* See #359 - This is the base test with no nulls, other testParseNullsFOO have nulls in them
|
||||
*/
|
||||
|
|
|
@ -70,7 +70,6 @@ import ca.uhn.fhir.rest.server.IResourceProvider;
|
|||
import ca.uhn.fhir.rest.server.RestfulServer;
|
||||
import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor;
|
||||
import ca.uhn.fhir.rest.server.interceptor.IServerInterceptor.ActionRequestDetails;
|
||||
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
|
||||
import ca.uhn.fhir.util.PortUtil;
|
||||
import ca.uhn.fhir.util.TestUtil;
|
||||
|
||||
|
@ -87,7 +86,6 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
private static Server ourServer;
|
||||
private static RestfulServer ourServlet;
|
||||
|
||||
|
||||
@Before
|
||||
public void before() {
|
||||
ourCtx.setAddProfileTagWhenEncoding(AddProfileTagEnum.NEVER);
|
||||
|
@ -168,7 +166,7 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
assertThat(response, containsString("Access denied by rule: Rule 1"));
|
||||
assertEquals(403, status.getStatusLine().getStatusCode());
|
||||
assertFalse(ourHitMethod);
|
||||
|
||||
|
||||
ourHitMethod = false;
|
||||
httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient/1/$validate");
|
||||
status = ourClient.execute(httpGet);
|
||||
|
@ -196,16 +194,16 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
Bundle input = new Bundle();
|
||||
input.setType(BundleTypeEnum.BATCH);
|
||||
input.addEntry().setResource(createPatient(1)).getRequest().setUrl("/Patient").setMethod(HTTPVerbEnum.POST);
|
||||
|
||||
|
||||
Bundle output = new Bundle();
|
||||
output.setType(BundleTypeEnum.TRANSACTION_RESPONSE);
|
||||
output.addEntry().getResponse().setLocation("/Patient/1");
|
||||
|
||||
|
||||
HttpPost httpPost;
|
||||
HttpResponse status;
|
||||
String response;
|
||||
|
||||
ourReturn = Arrays.asList((IResource)output);
|
||||
ourReturn = Arrays.asList((IResource) output);
|
||||
ourHitMethod = false;
|
||||
httpPost = new HttpPost("http://localhost:" + ourPort + "/");
|
||||
httpPost.setEntity(createFhirResourceEntity(input));
|
||||
|
@ -232,16 +230,16 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
Bundle input = new Bundle();
|
||||
input.setType(BundleTypeEnum.BATCH);
|
||||
input.addEntry().setResource(createPatient(1)).getRequest().setUrl("/Patient").setMethod(HTTPVerbEnum.POST);
|
||||
|
||||
|
||||
Bundle output = new Bundle();
|
||||
output.setType(BundleTypeEnum.TRANSACTION_RESPONSE);
|
||||
output.addEntry().setResource(createPatient(2));
|
||||
|
||||
|
||||
HttpPost httpPost;
|
||||
HttpResponse status;
|
||||
String response;
|
||||
|
||||
ourReturn = Arrays.asList((IResource)output);
|
||||
ourReturn = Arrays.asList((IResource) output);
|
||||
ourHitMethod = false;
|
||||
httpPost = new HttpPost("http://localhost:" + ourPort + "/");
|
||||
httpPost.setEntity(createFhirResourceEntity(input));
|
||||
|
@ -268,16 +266,16 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
Bundle input = new Bundle();
|
||||
input.setType(BundleTypeEnum.COLLECTION);
|
||||
input.addEntry().setResource(createPatient(1)).getRequest().setUrl("/Patient").setMethod(HTTPVerbEnum.POST);
|
||||
|
||||
|
||||
Bundle output = new Bundle();
|
||||
output.setType(BundleTypeEnum.TRANSACTION_RESPONSE);
|
||||
output.addEntry().setResource(createPatient(1));
|
||||
|
||||
|
||||
HttpPost httpPost;
|
||||
HttpResponse status;
|
||||
String response;
|
||||
|
||||
ourReturn = Arrays.asList((IResource)output);
|
||||
ourReturn = Arrays.asList((IResource) output);
|
||||
ourHitMethod = false;
|
||||
httpPost = new HttpPost("http://localhost:" + ourPort + "/");
|
||||
httpPost.setEntity(createFhirResourceEntity(input));
|
||||
|
@ -298,7 +296,7 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
.denyAll("Default Rule")
|
||||
.build();
|
||||
//@formatter:on
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
HttpGet httpGet;
|
||||
|
@ -331,8 +329,17 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
assertThat(response, containsString("Access denied by rule: Default Rule"));
|
||||
assertEquals(403, status.getStatusLine().getStatusCode());
|
||||
assertFalse(ourHitMethod);
|
||||
|
||||
ourHitMethod = false;
|
||||
httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient/1/$opName");
|
||||
status = ourClient.execute(httpGet);
|
||||
response = extractResponseAndClose(status);
|
||||
ourLog.info(response);
|
||||
assertThat(response, containsString("Access denied by rule: Default Rule"));
|
||||
assertEquals(403, status.getStatusLine().getStatusCode());
|
||||
assertFalse(ourHitMethod);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testMetadataAllow() throws Exception {
|
||||
ourServlet.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
|
||||
|
@ -408,7 +415,7 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
response = extractResponseAndClose(status);
|
||||
assertEquals(200, status.getStatusLine().getStatusCode());
|
||||
assertTrue(ourHitMethod);
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -458,7 +465,7 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
ourLog.info(response);
|
||||
assertEquals(200, status.getStatusLine().getStatusCode());
|
||||
assertTrue(ourHitMethod);
|
||||
|
||||
|
||||
// Wrong instance
|
||||
ourHitMethod = false;
|
||||
ourReturn = Arrays.asList(createPatient(2));
|
||||
|
@ -520,6 +527,66 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
assertEquals(403, status.getStatusLine().getStatusCode());
|
||||
assertFalse(ourHitMethod);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testOperationNotAllowedWithWritePermissiom() throws Exception {
|
||||
ourServlet.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
|
||||
@Override
|
||||
public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
|
||||
//@formatter:off
|
||||
return new RuleBuilder()
|
||||
.allow("RULE 1").write().allResources().withAnyId().andThen()
|
||||
.build();
|
||||
//@formatter:on
|
||||
}
|
||||
});
|
||||
|
||||
HttpGet httpGet;
|
||||
HttpResponse status;
|
||||
String response;
|
||||
|
||||
// Server
|
||||
ourHitMethod = false;
|
||||
ourReturn = Arrays.asList(createObservation(10, "Patient/2"));
|
||||
httpGet = new HttpGet("http://localhost:" + ourPort + "/$opName");
|
||||
status = ourClient.execute(httpGet);
|
||||
response = extractResponseAndClose(status);
|
||||
assertThat(response, containsString("Access denied by default policy"));
|
||||
assertEquals(403, status.getStatusLine().getStatusCode());
|
||||
assertFalse(ourHitMethod);
|
||||
|
||||
// System
|
||||
ourHitMethod = false;
|
||||
ourReturn = Arrays.asList(createPatient(2));
|
||||
httpGet = new HttpGet("http://localhost:" + ourPort + "/$opName");
|
||||
status = ourClient.execute(httpGet);
|
||||
response = extractResponseAndClose(status);
|
||||
ourLog.info(response);
|
||||
assertEquals(403, status.getStatusLine().getStatusCode());
|
||||
assertFalse(ourHitMethod);
|
||||
|
||||
// Type
|
||||
ourHitMethod = false;
|
||||
ourReturn = Arrays.asList(createPatient(2));
|
||||
httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient/$opName");
|
||||
status = ourClient.execute(httpGet);
|
||||
response = extractResponseAndClose(status);
|
||||
ourLog.info(response);
|
||||
assertEquals(403, status.getStatusLine().getStatusCode());
|
||||
assertFalse(ourHitMethod);
|
||||
|
||||
// Instance
|
||||
ourHitMethod = false;
|
||||
ourReturn = Arrays.asList(createPatient(2));
|
||||
httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient/123/$opName");
|
||||
status = ourClient.execute(httpGet);
|
||||
response = extractResponseAndClose(status);
|
||||
ourLog.info(response);
|
||||
assertEquals(403, status.getStatusLine().getStatusCode());
|
||||
assertFalse(ourHitMethod);
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testOperationTypeLevel() throws Exception {
|
||||
|
@ -617,6 +684,14 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
assertEquals(200, status.getStatusLine().getStatusCode());
|
||||
assertTrue(ourHitMethod);
|
||||
|
||||
ourReturn = Arrays.asList(createPatient(2));
|
||||
ourHitMethod = false;
|
||||
httpGet = new HttpGet("http://localhost:" + ourPort + "/Patient/1/_history/222");
|
||||
status = ourClient.execute(httpGet);
|
||||
extractResponseAndClose(status);
|
||||
assertEquals(200, status.getStatusLine().getStatusCode());
|
||||
assertTrue(ourHitMethod);
|
||||
|
||||
ourReturn = Arrays.asList(createObservation(10, "Patient/2"));
|
||||
ourHitMethod = false;
|
||||
httpGet = new HttpGet("http://localhost:" + ourPort + "/Observation/10");
|
||||
|
@ -692,7 +767,6 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testReadByCompartmentWrong() throws Exception {
|
||||
ourServlet.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
|
||||
|
@ -771,16 +845,16 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
Bundle input = new Bundle();
|
||||
input.setType(BundleTypeEnum.TRANSACTION);
|
||||
input.addEntry().setResource(createPatient(1)).getRequest().setUrl("/Patient").setMethod(HTTPVerbEnum.PUT);
|
||||
|
||||
|
||||
Bundle output = new Bundle();
|
||||
output.setType(BundleTypeEnum.TRANSACTION_RESPONSE);
|
||||
output.addEntry().getResponse().setLocation("/Patient/1");
|
||||
|
||||
|
||||
HttpPost httpPost;
|
||||
HttpResponse status;
|
||||
String response;
|
||||
|
||||
ourReturn = Arrays.asList((IResource)output);
|
||||
ourReturn = Arrays.asList((IResource) output);
|
||||
ourHitMethod = false;
|
||||
httpPost = new HttpPost("http://localhost:" + ourPort + "/");
|
||||
httpPost.setEntity(createFhirResourceEntity(input));
|
||||
|
@ -951,8 +1025,6 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
assertEquals(403, status.getStatusLine().getStatusCode());
|
||||
assertFalse(ourHitMethod);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testWriteByCompartmentUpdateConditionalResolvesToInvalid() throws Exception {
|
||||
|
@ -986,7 +1058,6 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testWriteByCompartmentUpdateConditionalResolvesToValid() throws Exception {
|
||||
ourConditionalCreateId = "1";
|
||||
|
@ -1128,7 +1199,7 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
assertTrue(ourHitMethod);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@AfterClass
|
||||
public static void afterClassClearContext() throws Exception {
|
||||
ourServer.stop();
|
||||
|
@ -1186,13 +1257,13 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
return Observation.class;
|
||||
}
|
||||
|
||||
@Operation(name="opName", idempotent=true)
|
||||
@Operation(name = "opName", idempotent = true)
|
||||
public Parameters operation() {
|
||||
ourHitMethod = true;
|
||||
return (Parameters) new Parameters().setId("1");
|
||||
}
|
||||
|
||||
@Operation(name="opName", idempotent=true)
|
||||
@Operation(name = "opName", idempotent = true)
|
||||
public Parameters operation(@IdParam IdDt theId) {
|
||||
ourHitMethod = true;
|
||||
return (Parameters) new Parameters().setId("1");
|
||||
|
@ -1203,15 +1274,17 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
ourHitMethod = true;
|
||||
return (Observation) ourReturn.get(0);
|
||||
}
|
||||
|
||||
@Search()
|
||||
public List<IResource> search() {
|
||||
ourHitMethod = true;
|
||||
return ourReturn;
|
||||
}
|
||||
|
||||
@Update()
|
||||
public MethodOutcome update(@IdParam IdDt theId, @ResourceParam Observation theResource, @ConditionalUrlParam String theConditionalUrl, RequestDetails theRequestDetails) {
|
||||
ourHitMethod = true;
|
||||
|
||||
|
||||
if (isNotBlank(theConditionalUrl)) {
|
||||
IdDt actual = new IdDt("Observation", ourConditionalCreateId);
|
||||
ActionRequestDetails subRequest = new ActionRequestDetails(theRequestDetails, actual);
|
||||
|
@ -1222,22 +1295,20 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
subRequest.notifyIncomingRequestPreHandled(RestOperationTypeEnum.UPDATE);
|
||||
theResource.setId(theId.withVersion("2"));
|
||||
}
|
||||
|
||||
|
||||
MethodOutcome retVal = new MethodOutcome();
|
||||
retVal.setCreated(true);
|
||||
retVal.setResource(theResource);
|
||||
return retVal;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
public static class DummyPatientResourceProvider implements IResourceProvider {
|
||||
|
||||
public static class DummyPatientResourceProvider implements IResourceProvider {
|
||||
|
||||
@Create()
|
||||
public MethodOutcome create(@ResourceParam Patient theResource, @ConditionalUrlParam String theConditionalUrl, RequestDetails theRequestDetails) {
|
||||
|
||||
|
||||
if (isNotBlank(theConditionalUrl)) {
|
||||
IdDt actual = new IdDt("Patient", ourConditionalCreateId);
|
||||
ActionRequestDetails subRequest = new ActionRequestDetails(theRequestDetails, actual);
|
||||
|
@ -1246,7 +1317,7 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
ActionRequestDetails subRequest = new ActionRequestDetails(theRequestDetails, theResource);
|
||||
subRequest.notifyIncomingRequestPreHandled(RestOperationTypeEnum.CREATE);
|
||||
}
|
||||
|
||||
|
||||
ourHitMethod = true;
|
||||
theResource.setId("Patient/1/_history/1");
|
||||
MethodOutcome retVal = new MethodOutcome();
|
||||
|
@ -1255,7 +1326,6 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
return retVal;
|
||||
}
|
||||
|
||||
|
||||
@Delete()
|
||||
public MethodOutcome delete(IRequestOperationCallback theRequestOperationCallback, @IdParam IdDt theId, @ConditionalUrlParam String theConditionalUrl, RequestDetails theRequestDetails) {
|
||||
ourHitMethod = true;
|
||||
|
@ -1270,20 +1340,20 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
public Class<? extends IResource> getResourceType() {
|
||||
return Patient.class;
|
||||
}
|
||||
|
||||
@Operation(name="opName", idempotent=true)
|
||||
|
||||
@Operation(name = "opName", idempotent = true)
|
||||
public Parameters operation() {
|
||||
ourHitMethod = true;
|
||||
return (Parameters) new Parameters().setId("1");
|
||||
}
|
||||
|
||||
@Operation(name="opName", idempotent=true)
|
||||
|
||||
@Operation(name = "opName", idempotent = true)
|
||||
public Parameters operation(@IdParam IdDt theId) {
|
||||
ourHitMethod = true;
|
||||
return (Parameters) new Parameters().setId("1");
|
||||
}
|
||||
|
||||
@Operation(name="opName2", idempotent=true)
|
||||
@Operation(name = "opName2", idempotent = true)
|
||||
public Parameters operation2(@IdParam IdDt theId) {
|
||||
ourHitMethod = true;
|
||||
return (Parameters) new Parameters().setId("1");
|
||||
|
@ -1300,7 +1370,7 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
ourHitMethod = true;
|
||||
return ourReturn;
|
||||
}
|
||||
|
||||
|
||||
@Update()
|
||||
public MethodOutcome update(@IdParam IdDt theId, @ResourceParam Patient theResource, @ConditionalUrlParam String theConditionalUrl, RequestDetails theRequestDetails) {
|
||||
ourHitMethod = true;
|
||||
|
@ -1320,9 +1390,10 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
retVal.setResource(theResource);
|
||||
return retVal;
|
||||
}
|
||||
|
||||
|
||||
@Validate
|
||||
public MethodOutcome validate(@ResourceParam Patient theResource, @IdParam IdDt theId, @ResourceParam String theRawResource, @ResourceParam EncodingEnum theEncoding, @Validate.Mode ValidationModeEnum theMode,
|
||||
public MethodOutcome validate(@ResourceParam Patient theResource, @IdParam IdDt theId, @ResourceParam String theRawResource, @ResourceParam EncodingEnum theEncoding,
|
||||
@Validate.Mode ValidationModeEnum theMode,
|
||||
@Validate.Profile String theProfile, RequestDetails theRequestDetails) {
|
||||
ourHitMethod = true;
|
||||
OperationOutcome oo = new OperationOutcome();
|
||||
|
@ -1340,17 +1411,15 @@ public class AuthorizationInterceptorDstu2Test {
|
|||
}
|
||||
|
||||
}
|
||||
|
||||
public static class PlainProvider
|
||||
{
|
||||
|
||||
@Operation(name="opName", idempotent=true)
|
||||
|
||||
public static class PlainProvider {
|
||||
|
||||
@Operation(name = "opName", idempotent = true)
|
||||
public Parameters operation() {
|
||||
ourHitMethod = true;
|
||||
return (Parameters) new Parameters().setId("1");
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Transaction()
|
||||
public Bundle search(@TransactionParam Bundle theInput) {
|
||||
ourHitMethod = true;
|
||||
|
|
|
@ -16,24 +16,65 @@ import static org.junit.Assert.fail;
|
|||
import java.io.IOException;
|
||||
import java.math.BigDecimal;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.UUID;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.hamcrest.core.StringContains;
|
||||
import org.hl7.fhir.dstu3.model.*;
|
||||
import org.hl7.fhir.dstu3.model.Address.AddressUse;
|
||||
import org.hl7.fhir.dstu3.model.Address.AddressUseEnumFactory;
|
||||
import org.hl7.fhir.dstu3.model.Attachment;
|
||||
import org.hl7.fhir.dstu3.model.AuditEvent;
|
||||
import org.hl7.fhir.dstu3.model.Basic;
|
||||
import org.hl7.fhir.dstu3.model.Binary;
|
||||
import org.hl7.fhir.dstu3.model.Bundle;
|
||||
import org.hl7.fhir.dstu3.model.Bundle.BundleEntryComponent;
|
||||
import org.hl7.fhir.dstu3.model.Bundle.BundleType;
|
||||
import org.hl7.fhir.dstu3.model.Coding;
|
||||
import org.hl7.fhir.dstu3.model.Communication;
|
||||
import org.hl7.fhir.dstu3.model.Condition;
|
||||
import org.hl7.fhir.dstu3.model.Condition.ConditionVerificationStatus;
|
||||
import org.hl7.fhir.dstu3.model.Conformance;
|
||||
import org.hl7.fhir.dstu3.model.Conformance.UnknownContentCode;
|
||||
import org.hl7.fhir.dstu3.model.DateTimeType;
|
||||
import org.hl7.fhir.dstu3.model.DateType;
|
||||
import org.hl7.fhir.dstu3.model.DecimalType;
|
||||
import org.hl7.fhir.dstu3.model.DiagnosticReport;
|
||||
import org.hl7.fhir.dstu3.model.EnumFactory;
|
||||
import org.hl7.fhir.dstu3.model.Enumeration;
|
||||
import org.hl7.fhir.dstu3.model.Enumerations.AdministrativeGender;
|
||||
import org.hl7.fhir.dstu3.model.ExplanationOfBenefit;
|
||||
import org.hl7.fhir.dstu3.model.Extension;
|
||||
import org.hl7.fhir.dstu3.model.HumanName;
|
||||
import org.hl7.fhir.dstu3.model.IdType;
|
||||
import org.hl7.fhir.dstu3.model.Identifier.IdentifierUse;
|
||||
import org.hl7.fhir.dstu3.model.Linkage;
|
||||
import org.hl7.fhir.dstu3.model.Medication;
|
||||
import org.hl7.fhir.dstu3.model.MedicationOrder;
|
||||
import org.hl7.fhir.dstu3.model.Observation;
|
||||
import org.hl7.fhir.dstu3.model.Observation.ObservationStatus;
|
||||
import org.hl7.fhir.dstu3.model.Parameters;
|
||||
import org.hl7.fhir.dstu3.model.Patient;
|
||||
import org.hl7.fhir.dstu3.model.PrimitiveType;
|
||||
import org.hl7.fhir.dstu3.model.Quantity;
|
||||
import org.hl7.fhir.dstu3.model.QuestionnaireResponse;
|
||||
import org.hl7.fhir.dstu3.model.Reference;
|
||||
import org.hl7.fhir.dstu3.model.RelatedPerson;
|
||||
import org.hl7.fhir.dstu3.model.SampledData;
|
||||
import org.hl7.fhir.dstu3.model.SimpleQuantity;
|
||||
import org.hl7.fhir.dstu3.model.StringType;
|
||||
import org.hl7.fhir.dstu3.model.UriType;
|
||||
import org.hl7.fhir.utilities.xhtml.XhtmlNode;
|
||||
import org.junit.*;
|
||||
import org.junit.After;
|
||||
import org.junit.AfterClass;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.google.common.collect.Sets;
|
||||
|
||||
|
@ -58,7 +99,7 @@ public class JsonParserDstu3Test {
|
|||
ourCtx.setNarrativeGenerator(null);
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeAndParseExtensions() throws Exception {
|
||||
|
||||
|
@ -224,7 +265,7 @@ public class JsonParserDstu3Test {
|
|||
assertEquals("sec_label2", tagList.get(1).getDisplay());
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* See #336
|
||||
*/
|
||||
|
@ -278,7 +319,8 @@ public class JsonParserDstu3Test {
|
|||
assertEquals(null, name.getFamily().get(2).getExtension().get(0).getId());
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeAndParseSecurityLabels() {
|
||||
Patient p = new Patient();
|
||||
|
@ -338,8 +380,6 @@ public class JsonParserDstu3Test {
|
|||
assertEquals("DISPLAY2", label.getDisplay());
|
||||
assertEquals("VERSION2", label.getVersion());
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeBundleNewBundleNoText() {
|
||||
|
@ -359,6 +399,8 @@ public class JsonParserDstu3Test {
|
|||
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* See #326
|
||||
*/
|
||||
|
@ -394,7 +436,7 @@ public class JsonParserDstu3Test {
|
|||
));
|
||||
//@formatter:on
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeDoesntIncludeUuidId() {
|
||||
Patient p = new Patient();
|
||||
|
@ -404,14 +446,13 @@ public class JsonParserDstu3Test {
|
|||
String actual = ourCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(p);
|
||||
assertThat(actual, not(containsString("78ef6f64c2f2")));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeEmptyBinary() {
|
||||
String output = ourCtx.newJsonParser().encodeResourceToString(new Binary());
|
||||
assertEquals("{\"resourceType\":\"Binary\"}", output);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* #158
|
||||
*/
|
||||
|
@ -427,7 +468,8 @@ public class JsonParserDstu3Test {
|
|||
String encoded = ourCtx.newJsonParser().encodeResourceToString(p);
|
||||
assertThat(encoded, not(containsString("tag")));
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* #158
|
||||
*/
|
||||
|
@ -917,7 +959,7 @@ public class JsonParserDstu3Test {
|
|||
|
||||
assertThat(encode, containsString("\"value\": \"APPID\""));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeUndeclaredExtensionWithEnumerationContent() {
|
||||
IParser parser = ourCtx.newJsonParser();
|
||||
|
@ -938,7 +980,7 @@ public class JsonParserDstu3Test {
|
|||
assertEquals("home", ref.getValue().toCode());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testEncodeWithDontEncodeElements() throws Exception {
|
||||
Patient patient = new Patient();
|
||||
|
@ -1678,6 +1720,25 @@ public class JsonParserDstu3Test {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* See #484
|
||||
*/
|
||||
@Test
|
||||
public void testParseNarrativeWithEmptyDiv() {
|
||||
String input = "{\"resourceType\":\"Basic\",\"id\":\"1\",\"text\":{\"status\":\"generated\",\"div\":\"<div/>\"}}";
|
||||
Basic basic = ourCtx.newJsonParser().parseResource(Basic.class, input);
|
||||
assertEquals(null, basic.getText().getDivAsString());
|
||||
|
||||
input = "{\"resourceType\":\"Basic\",\"id\":\"1\",\"text\":{\"status\":\"generated\",\"div\":\"<div></div>\"}}";
|
||||
basic = ourCtx.newJsonParser().parseResource(Basic.class, input);
|
||||
assertEquals(null, basic.getText().getDivAsString());
|
||||
|
||||
input = "{\"resourceType\":\"Basic\",\"id\":\"1\",\"text\":{\"status\":\"generated\",\"div\":\"<div> </div>\"}}";
|
||||
basic = ourCtx.newJsonParser().parseResource(Basic.class, input);
|
||||
assertEquals("<div xmlns=\"http://www.w3.org/1999/xhtml\"> </div>", basic.getText().getDivAsString());
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* See #163
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue