Add test for #751

This commit is contained in:
James Agnew 2017-11-05 18:52:28 -05:00
parent 75bfb6af1b
commit 37c8e6c645
4 changed files with 2302 additions and 36 deletions

View File

@ -9,6 +9,8 @@ import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import ca.uhn.fhir.rest.server.exceptions.PreconditionFailedException;
import ca.uhn.fhir.rest.server.exceptions.ResourceGoneException;
import org.apache.http.client.methods.*;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
@ -81,7 +83,56 @@ public class AuthorizationInterceptorResourceProviderR4Test extends BaseResource
patient = myClient.read().resource(Patient.class).withId(id.toUnqualifiedVersionless()).execute();
assertEquals(id.getValue(), patient.getId());
}
/**
* See #751
*/
@Test
public void testDeleteInCompartmentIsBlocked() {
Patient patient = new Patient();
patient.setId("Patient/A");
patient.addIdentifier().setSystem("http://uhn.ca/mrns").setValue("100");
patient.addName().setFamily("Tester").addGiven("Raghad");
IIdType id = myClient.update().resource(patient).execute().getId();
Observation obs = new Observation();
obs.setId("Observation/B");
obs.getSubject().setReference("Patient/A");
myClient.update().resource(obs).execute();
obs = new Observation();
obs.setId("Observation/C");
obs.setStatus(ObservationStatus.FINAL);
myClient.update().resource(obs).execute();
ourRestServer.registerInterceptor(new AuthorizationInterceptor(PolicyEnum.DENY) {
@Override
public List<IAuthRule> buildRuleList(RequestDetails theRequestDetails) {
return new RuleBuilder()
.allow().delete().allResources().inCompartment("Patient", new IdType("Patient/A")).andThen()
.allow().read().allResources().withAnyId().andThen()
.denyAll()
.build();
}
});
myClient.delete().resourceById(new IdType("Observation/B")).execute();
try {
myClient.read().resource(Observation.class).withId("Observation/B").execute();
fail();
} catch (ResourceGoneException e) {
// good
}
try {
myClient.delete().resourceById(new IdType("Observation/C")).execute();
fail();
} catch (ForbiddenOperationException e) {
// good
}
}
/**
* See #503

View File

@ -29,64 +29,73 @@ package org.hl7.fhir.dstu3.model.codesystems;
*/
// Generated on Mon, Jan 16, 2017 12:12-0500 for FHIR v1.9.0
// Generated on Sat, Mar 25, 2017 21:03-0400 for FHIR v3.0.0
import org.hl7.fhir.exceptions.FHIRException;
public enum Devicestatus {
public enum DeviceStatus {
/**
* The Device is available for use.
* The Device is available for use. Note: This means for *implanted devices* the device is implanted in the patient.
*/
AVAILABLE,
ACTIVE,
/**
* The Device is no longer available for use (e.g. lost, expired, damaged).
* The Device is no longer available for use (e.g. lost, expired, damaged). Note: This means for *implanted devices* the device has been removed from the patient.
*/
NOTAVAILABLE,
INACTIVE,
/**
* The Device was entered in error and voided.
*/
ENTEREDINERROR,
/**
* The status of the device has not been determined.
*/
UNKNOWN,
/**
* added to help the parsers
*/
NULL;
public static Devicestatus fromCode(String codeString) throws FHIRException {
public static DeviceStatus fromCode(String codeString) throws FHIRException {
if (codeString == null || "".equals(codeString))
return null;
if ("available".equals(codeString))
return AVAILABLE;
if ("not-available".equals(codeString))
return NOTAVAILABLE;
if ("active".equals(codeString))
return ACTIVE;
if ("inactive".equals(codeString))
return INACTIVE;
if ("entered-in-error".equals(codeString))
return ENTEREDINERROR;
throw new FHIRException("Unknown Devicestatus code '"+codeString+"'");
if ("unknown".equals(codeString))
return UNKNOWN;
throw new FHIRException("Unknown DeviceStatus code '"+codeString+"'");
}
public String toCode() {
switch (this) {
case AVAILABLE: return "available";
case NOTAVAILABLE: return "not-available";
case ACTIVE: return "active";
case INACTIVE: return "inactive";
case ENTEREDINERROR: return "entered-in-error";
case UNKNOWN: return "unknown";
default: return "?";
}
}
public String getSystem() {
return "http://hl7.org/fhir/devicestatus";
return "http://hl7.org/fhir/device-status";
}
public String getDefinition() {
switch (this) {
case AVAILABLE: return "The Device is available for use.";
case NOTAVAILABLE: return "The Device is no longer available for use (e.g. lost, expired, damaged).";
case ACTIVE: return "The Device is available for use. Note: This means for *implanted devices* the device is implanted in the patient.";
case INACTIVE: return "The Device is no longer available for use (e.g. lost, expired, damaged). Note: This means for *implanted devices* the device has been removed from the patient.";
case ENTEREDINERROR: return "The Device was entered in error and voided.";
case UNKNOWN: return "The status of the device has not been determined.";
default: return "?";
}
}
public String getDisplay() {
switch (this) {
case AVAILABLE: return "Available";
case NOTAVAILABLE: return "Not Available";
case ACTIVE: return "Active";
case INACTIVE: return "Inactive";
case ENTEREDINERROR: return "Entered in Error";
case UNKNOWN: return "Unknown";
default: return "?";
}
}

View File

@ -29,36 +29,40 @@ package org.hl7.fhir.dstu3.model.codesystems;
*/
// Generated on Mon, Jan 16, 2017 12:12-0500 for FHIR v1.9.0
// Generated on Sat, Mar 25, 2017 21:03-0400 for FHIR v3.0.0
import org.hl7.fhir.dstu3.model.EnumFactory;
public class DevicestatusEnumFactory implements EnumFactory<Devicestatus> {
public class DeviceStatusEnumFactory implements EnumFactory<DeviceStatus> {
public Devicestatus fromCode(String codeString) throws IllegalArgumentException {
public DeviceStatus fromCode(String codeString) throws IllegalArgumentException {
if (codeString == null || "".equals(codeString))
return null;
if ("available".equals(codeString))
return Devicestatus.AVAILABLE;
if ("not-available".equals(codeString))
return Devicestatus.NOTAVAILABLE;
if ("active".equals(codeString))
return DeviceStatus.ACTIVE;
if ("inactive".equals(codeString))
return DeviceStatus.INACTIVE;
if ("entered-in-error".equals(codeString))
return Devicestatus.ENTEREDINERROR;
throw new IllegalArgumentException("Unknown Devicestatus code '"+codeString+"'");
return DeviceStatus.ENTEREDINERROR;
if ("unknown".equals(codeString))
return DeviceStatus.UNKNOWN;
throw new IllegalArgumentException("Unknown DeviceStatus code '"+codeString+"'");
}
public String toCode(Devicestatus code) {
if (code == Devicestatus.AVAILABLE)
return "available";
if (code == Devicestatus.NOTAVAILABLE)
return "not-available";
if (code == Devicestatus.ENTEREDINERROR)
public String toCode(DeviceStatus code) {
if (code == DeviceStatus.ACTIVE)
return "active";
if (code == DeviceStatus.INACTIVE)
return "inactive";
if (code == DeviceStatus.ENTEREDINERROR)
return "entered-in-error";
if (code == DeviceStatus.UNKNOWN)
return "unknown";
return "?";
}
public String toSystem(Devicestatus code) {
public String toSystem(DeviceStatus code) {
return code.getSystem();
}