Skip to content

Commit

Permalink
Fix bug with wrong boolean variable assignment.
Browse files Browse the repository at this point in the history
  • Loading branch information
lukedegruchy committed Jan 20, 2025
1 parent 32bee05 commit abca321
Show file tree
Hide file tree
Showing 4 changed files with 41 additions and 9 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -24,8 +24,6 @@

import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.fail;
import static org.junit.jupiter.api.Assertions.fail;


public class ResourceProviderDstu2ValueSetTest extends BaseResourceProviderDstu2Test {

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -192,7 +192,7 @@ protected OperationMethodBinding(
} else {
myOtherOperationType = RestOperationTypeEnum.EXTENDED_OPERATION_INSTANCE;
myCanOperateAtInstanceLevel = true;
myCanOperateAtServerLevel = myOperationIdParamDetails.setOrReturnPreviousValue(myCanOperateAtServerLevel);
myCanOperateAtTypeLevel = myOperationIdParamDetails.setOrReturnPreviousValue(myCanOperateAtTypeLevel);
}

myReturnParams = new ArrayList<>();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,14 @@
import ca.uhn.fhir.rest.annotation.OperationEmbeddedParam;
import ca.uhn.fhir.rest.annotation.OperationParam;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import jakarta.servlet.http.HttpServletRequest;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.instance.model.api.IIdType;
import org.hl7.fhir.r4.model.BooleanType;
import org.hl7.fhir.r4.model.IdType;
import org.hl7.fhir.r4.model.Measure;
import org.hl7.fhir.r4.model.MeasureReport;
import org.hl7.fhir.r4.model.Patient;

import java.lang.reflect.Method;
import java.util.Arrays;
Expand All @@ -27,6 +30,7 @@ class InnerClassesAndMethods {

static final String SAMPLE_METHOD_EMBEDDED_TYPE_MULTIPLE_REQUEST_DETAILS = "sampleMethodEmbeddedTypeMultipleRequestDetails";
static final String SUPER_SIMPLE = "superSimple";
static final String SIMPLE_OPERATION = "simpleOperation";
static final String INVALID_METHOD_OPERATION_PARAMS_NO_OPERATION = "invalidMethodOperationParamsNoOperationInvalid";
static final String SAMPLE_METHOD_EMBEDDED_TYPE_REQUEST_DETAILS_FIRST_WITH_ID_TYPE = "sampleMethodEmbeddedTypeRequestDetailsFirstWithIdType";
static final String SAMPLE_METHOD_EMBEDDED_TYPE_REQUEST_DETAILS_LAST = "sampleMethodEmbeddedTypeRequestDetailsLast";
Expand All @@ -35,6 +39,7 @@ class InnerClassesAndMethods {
static final String SAMPLE_METHOD_EMBEDDED_TYPE_NO_REQUEST_DETAILS_WITH_ID_TYPE = "sampleMethodEmbeddedTypeNoRequestDetailsWithIdType";
static final String SAMPLE_METHOD_OPERATION_PARAMS = "sampleMethodOperationParams";
static final String SAMPLE_METHOD_PARAM_NO_EMBEDDED_TYPE = "sampleMethodParamNoEmbeddedType";
static final String EXPAND = "expand";

Method getDeclaredMethod(String theMethodName, Class<?>... theParamClasses) {
try {
Expand Down Expand Up @@ -272,4 +277,13 @@ MeasureReport sampleMethodEmbeddedTypeNoRequestDetailsWithIdType(SampleParamsWit
// return something arbitrary
return new MeasureReport(null, null, null, null);
}

@Operation(name = "$expand", idempotent = true, typeName = "ValueSet")
public IBaseResource expand(
HttpServletRequest theServletRequest,
@IdParam(optional = true) IIdType theId,
@OperationParam(name = "valueSet", min = 0, max = 1) IBaseResource theValueSet,
RequestDetails theRequestDetails) {
return new Patient();
}
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,19 @@
package ca.uhn.fhir.rest.server.method;

import static ca.uhn.fhir.rest.server.method.InnerClassesAndMethods.EXPAND;
import static ca.uhn.fhir.rest.server.method.InnerClassesAndMethods.SAMPLE_METHOD_EMBEDDED_TYPE_NO_REQUEST_DETAILS_WITH_ID_TYPE;
import static ca.uhn.fhir.rest.server.method.InnerClassesAndMethods.SAMPLE_METHOD_OPERATION_PARAMS;
import static org.junit.jupiter.api.Assertions.*;

import ca.uhn.fhir.context.ConfigurationException;
import ca.uhn.fhir.context.FhirContext;
import ca.uhn.fhir.rest.annotation.Operation;
import ca.uhn.fhir.rest.api.RequestTypeEnum;
import ca.uhn.fhir.rest.api.server.RequestDetails;
import ca.uhn.fhir.rest.api.server.SystemRequestDetails;
import ca.uhn.fhir.rest.server.exceptions.MethodNotAllowedException;
import ca.uhn.fhir.rest.server.method.InnerClassesAndMethods.SampleParamsWithIdParam;
import jakarta.servlet.http.HttpServletRequest;
import org.hl7.fhir.instance.model.api.IBaseResource;
import org.hl7.fhir.instance.model.api.IIdType;
import org.hl7.fhir.r4.model.BooleanType;
Expand Down Expand Up @@ -49,7 +54,7 @@ void constructor_withInvalidOperationName_shouldThrowConfigurationException() {
}

@Test
void incomingServerRequestMatchesMethod_withMismatchedOperation_shouldReturnNone() throws NoSuchMethodException {
void incomingServerRequestMatchesMethod_withMismatchedOperation_shouldReturnNone() {
init("simpleOperation");

final SystemRequestDetails requestDetails = new SystemRequestDetails();
Expand All @@ -63,7 +68,7 @@ void incomingServerRequestMatchesMethod_withMismatchedOperation_shouldReturnNone
}

@Test
void incomingServerRequestMatchesMethod_withMatchingOperation_shouldReturnExact() throws NoSuchMethodException {
void incomingServerRequestMatchesMethod_withMatchingOperation_shouldReturnExact() {
init("simpleOperation");

final SystemRequestDetails requestDetails = new SystemRequestDetails();
Expand All @@ -77,8 +82,8 @@ void incomingServerRequestMatchesMethod_withMatchingOperation_shouldReturnExact(
}

@Test
void invokeServer_withUnsupportedRequestType_shouldThrowMethodNotAllowedException() throws NoSuchMethodException {
init("simpleOperation");
void invokeServer_withUnsupportedRequestType_shouldThrowMethodNotAllowedException() {
init(InnerClassesAndMethods.SIMPLE_OPERATION);

final SystemRequestDetails requestDetails = new SystemRequestDetails();
requestDetails.setRequestType(RequestTypeEnum.PUT);
Expand All @@ -95,7 +100,7 @@ void invokeServer_withUnsupportedRequestType_shouldThrowMethodNotAllowedExceptio

@Test
void simpleMethodOperationParams() {
init(InnerClassesAndMethods.SAMPLE_METHOD_OPERATION_PARAMS, IIdType.class, String.class, List.class, BooleanType.class);
init(SAMPLE_METHOD_OPERATION_PARAMS, IIdType.class, String.class, List.class, BooleanType.class);

final SystemRequestDetails requestDetails = new SystemRequestDetails();
requestDetails.setRequestType(RequestTypeEnum.GET);
Expand All @@ -111,7 +116,7 @@ void simpleMethodOperationParams() {

@Test
void simpleMethodEmbeddedParams() {
init(InnerClassesAndMethods.SAMPLE_METHOD_EMBEDDED_TYPE_NO_REQUEST_DETAILS_WITH_ID_TYPE, SampleParamsWithIdParam.class);
init(SAMPLE_METHOD_EMBEDDED_TYPE_NO_REQUEST_DETAILS_WITH_ID_TYPE, SampleParamsWithIdParam.class);

final SystemRequestDetails requestDetails = new SystemRequestDetails();
requestDetails.setRequestType(RequestTypeEnum.GET);
Expand All @@ -125,6 +130,21 @@ void simpleMethodEmbeddedParams() {
assertEquals(MethodMatchEnum.EXACT, binding.incomingServerRequestMatchesMethod(requestDetails));
}

@Test
void expandEnsureMethodEnsureCanOperateAtTypeLevel() {
init(EXPAND, HttpServletRequest.class, IIdType.class, IBaseResource.class, RequestDetails.class);

final SystemRequestDetails requestDetails = new SystemRequestDetails();
requestDetails.setRequestType(RequestTypeEnum.POST);
requestDetails.setOperation("$expand");
requestDetails.setResourceName(ResourceType.ValueSet.name());

final OperationMethodBinding binding = new OperationMethodBinding(
IBaseResource.class, null, myMethod, ourFhirContext, provider, myOperation);

assertEquals(MethodMatchEnum.EXACT, binding.incomingServerRequestMatchesMethod(requestDetails));
}

private void init(String theMethodName, Class<?>... theParamClasses) {
myMethod = myInnerClassesAndMethods.getDeclaredMethod(theMethodName, theParamClasses);
myOperation = myMethod.getAnnotation(Operation.class);
Expand Down

0 comments on commit abca321

Please sign in to comment.