From 82ba851f86a231818113d039ddd4005316d2936a Mon Sep 17 00:00:00 2001 From: Etienne Poirier <33007955+epeartree@users.noreply.github.com> Date: Wed, 27 Mar 2024 10:12:50 -0400 Subject: [PATCH] MDM expansion doesn't work when using the :mdm qualifier in query string (#5803) * wip * cleaning up test * adding changelog and passing spotless. --------- Co-authored-by: peartree --- .../ca/uhn/fhir/rest/param/TokenParam.java | 9 +++++-- .../uhn/fhir/rest/param/StringParamTest.java | 20 +++++++++++++++- ...nsion-not-returning-expected-resources.yml | 5 ++++ .../uhn/fhir/rest/param/TokenParamTest.java | 24 ++++++++----------- 4 files changed, 41 insertions(+), 17 deletions(-) create mode 100644 hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/7_2_0/5802-fix-mdm-expansion-not-returning-expected-resources.yml diff --git a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/param/TokenParam.java b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/param/TokenParam.java index 2d0c437da39..5f5f59a7819 100644 --- a/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/param/TokenParam.java +++ b/hapi-fhir-base/src/main/java/ca/uhn/fhir/rest/param/TokenParam.java @@ -24,6 +24,7 @@ import ca.uhn.fhir.i18n.Msg; import ca.uhn.fhir.model.base.composite.BaseCodingDt; import ca.uhn.fhir.model.base.composite.BaseIdentifierDt; import ca.uhn.fhir.model.primitive.UriDt; +import ca.uhn.fhir.rest.api.Constants; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.builder.EqualsBuilder; import org.apache.commons.lang3.builder.HashCodeBuilder; @@ -147,18 +148,22 @@ public class TokenParam extends BaseParam /*implements IQueryParameterType*/ { @Override void doSetValueAsQueryToken(FhirContext theContext, String theParamName, String theQualifier, String theParameter) { setModifier(null); + setSystem(null); + if (theQualifier != null) { + if (Constants.PARAMQUALIFIER_MDM.equals(theQualifier)) { + setMdmExpand(true); + } + TokenParamModifier modifier = TokenParamModifier.forValue(theQualifier); setModifier(modifier); if (modifier == TokenParamModifier.TEXT) { - setSystem(null); setValue(ParameterUtil.unescape(theParameter)); return; } } - setSystem(null); if (theParameter == null) { setValue(null); } else { diff --git a/hapi-fhir-base/src/test/java/ca/uhn/fhir/rest/param/StringParamTest.java b/hapi-fhir-base/src/test/java/ca/uhn/fhir/rest/param/StringParamTest.java index 3b6f7609537..62b83fdbaef 100644 --- a/hapi-fhir-base/src/test/java/ca/uhn/fhir/rest/param/StringParamTest.java +++ b/hapi-fhir-base/src/test/java/ca/uhn/fhir/rest/param/StringParamTest.java @@ -2,6 +2,7 @@ package ca.uhn.fhir.rest.param; import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.model.api.IQueryParameterType; +import ca.uhn.fhir.rest.api.Constants; import ch.qos.logback.classic.Level; import ch.qos.logback.classic.Logger; import ch.qos.logback.classic.spi.ILoggingEvent; @@ -132,6 +133,23 @@ public class StringParamTest { assertNicknameWarningLogged(false); } + @Test + public void testNameNickname() { + StringParam param = new StringParam(); + assertFalse(param.isNicknameExpand()); + param.setValueAsQueryToken(myContext, "name", Constants.PARAMQUALIFIER_NICKNAME, "kenny"); + assertTrue(param.isNicknameExpand()); + } + + @Test + public void testGivenNickname() { + StringParam param = new StringParam(); + assertFalse(param.isNicknameExpand()); + param.setValueAsQueryToken(myContext, "given", Constants.PARAMQUALIFIER_NICKNAME, "kenny"); + assertTrue(param.isNicknameExpand()); + } + + private void assertNicknameQualifierSearchParameterIsValid(StringParam theStringParam, String theExpectedValue){ assertTrue(theStringParam.isNicknameExpand()); assertFalse(theStringParam.isExact()); @@ -164,5 +182,5 @@ public class StringParamTest { assertTrue(warningLogs.isEmpty()); } } - + } diff --git a/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/7_2_0/5802-fix-mdm-expansion-not-returning-expected-resources.yml b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/7_2_0/5802-fix-mdm-expansion-not-returning-expected-resources.yml new file mode 100644 index 00000000000..8a0c6463646 --- /dev/null +++ b/hapi-fhir-docs/src/main/resources/ca/uhn/hapi/fhir/changelog/7_2_0/5802-fix-mdm-expansion-not-returning-expected-resources.yml @@ -0,0 +1,5 @@ +--- +type: fix +issue: 5802 +title: "Previously, using the ':mdm' qualifier with the '_id' search parameter would not included expanded resources in +search result. This issue has been fixed." diff --git a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/param/TokenParamTest.java b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/param/TokenParamTest.java index 64fdf393cca..1dead512c7f 100644 --- a/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/param/TokenParamTest.java +++ b/hapi-fhir-structures-r4/src/test/java/ca/uhn/fhir/rest/param/TokenParamTest.java @@ -2,14 +2,13 @@ package ca.uhn.fhir.rest.param; import ca.uhn.fhir.context.FhirContext; import ca.uhn.fhir.rest.api.Constants; -import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertNull; import static org.junit.jupiter.api.Assertions.assertTrue; -import static org.junit.jupiter.api.Assertions.fail; public class TokenParamTest { private static final FhirContext ourCtx = FhirContext.forR4Cached(); @@ -51,19 +50,16 @@ public class TokenParamTest { } @Test - public void testNameNickname() { - StringParam param = new StringParam(); - assertFalse(param.isNicknameExpand()); - param.setValueAsQueryToken(ourCtx, "name", Constants.PARAMQUALIFIER_NICKNAME, "kenny"); - assertTrue(param.isNicknameExpand()); + public void testMdmQualifier() { + final String value = "Patient/PJANE1"; + + TokenParam param = new TokenParam(); + param.setValueAsQueryToken(ourCtx, "_id", Constants.PARAMQUALIFIER_MDM, value); + assertNull(param.getModifier()); + assertNull(param.getSystem()); + assertTrue(param.isMdmExpand()); + assertEquals(value, param.getValue()); } - @Test - public void testGivenNickname() { - StringParam param = new StringParam(); - assertFalse(param.isNicknameExpand()); - param.setValueAsQueryToken(ourCtx, "given", Constants.PARAMQUALIFIER_NICKNAME, "kenny"); - assertTrue(param.isNicknameExpand()); - } }