MDM operation to return total number of Possible Duplicates (#5130)

* addition, test, changelog

* update changelog

* address review comment + add test for coverage

* remove unnecessary space + changes

* mvn spotless

---------

Co-authored-by: justindar <justin.dar@smilecdr.com>
This commit is contained in:
jdar8 2023-08-04 13:24:01 -07:00 committed by GitHub
parent a48c602f71
commit de9a747666
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 44 additions and 4 deletions

View File

@ -0,0 +1,4 @@
---
type: add
issue: 5129
title: "Added a field that shows the total number of `POSSIBLE_DUPLICATE` links has been added to the `$mdm-duplicate-golden-resources` operation response."

View File

@ -76,9 +76,13 @@ public class MdmProviderQueryLinkR4Test extends BaseLinkR4Test {
myGoldenResource2Id = new StringType(sourcePatient2.getIdElement().toVersionless().getValue());
JpaPid sourcePatient2Pid = runInTransaction(()->myIdHelperService.getPidOrNull(RequestPartitionId.allPartitions(), sourcePatient2));
createPossibleDuplicateLinkByPid(sourcePatient2Pid, sourcePatient1Pid);
}
private void createPossibleDuplicateLinkByPid(JpaPid theSourcePid, JpaPid theGoldenPid) {
MdmLink possibleDuplicateMdmLink = (MdmLink) myMdmLinkDaoSvc.newMdmLink();
possibleDuplicateMdmLink.setGoldenResourcePersistenceId(sourcePatient1Pid)
.setSourcePersistenceId(sourcePatient2Pid)
possibleDuplicateMdmLink.setGoldenResourcePersistenceId(theGoldenPid)
.setSourcePersistenceId(theSourcePid)
.setMatchResult(MdmMatchResultEnum.POSSIBLE_DUPLICATE)
.setLinkSource(MdmLinkSourceEnum.AUTO)
.setScore(1.0)
@ -392,6 +396,32 @@ public class MdmProviderQueryLinkR4Test extends BaseLinkR4Test {
assertThat(list, hasSize(1));
List<Parameters.ParametersParameterComponent> part = list.get(0).getPart();
assertMdmLink(2, part, myGoldenResource1Id.getValue(), myGoldenResource2Id.getValue(), MdmMatchResultEnum.POSSIBLE_DUPLICATE, "false", "false", null);
assertResponseDuplicateCount(list.size(), result);
}
@Test
public void testQueryPossibleDuplicates_withCountLessThanTotal_returnsCorrectTotal() {
// Given: create second possible duplicate
JpaPid sourcePatient1Pid = runInTransaction(()->myIdHelperService.getPidOrThrowException(RequestPartitionId.allPartitions(), new IdType(myGoldenResource1Id.toString())));
Patient sourcePatient3 = createGoldenPatient();
JpaPid sourcePatient3Pid = runInTransaction(()->myIdHelperService.getPidOrNull(RequestPartitionId.allPartitions(), sourcePatient3));
createPossibleDuplicateLinkByPid(sourcePatient1Pid, sourcePatient3Pid);
// When
Parameters result = (Parameters) myMdmProvider.getDuplicateGoldenResources(new UnsignedIntType(0), new UnsignedIntType(1), myRequestDetails, null);
ourLog.debug(myFhirContext.newJsonParser().setPrettyPrint(true).encodeResourceToString(result));
// Then: parameters should have 1 link (since count = 1), total should be 2
List<Parameters.ParametersParameterComponent> list = getParametersByName(result, "link");
assertThat(list, hasSize(1));
assertResponseDuplicateCount(2, result);
}
private void assertResponseDuplicateCount(int expectedSize, Parameters result) {
List<Parameters.ParametersParameterComponent> count = getParametersByName(result, "total");
assertThat(count, hasSize(1));
assertEquals(String.valueOf(expectedSize), count.get(0).getValue().primitiveValue());
}
@Test
@ -403,6 +433,7 @@ public class MdmProviderQueryLinkR4Test extends BaseLinkR4Test {
List<Parameters.ParametersParameterComponent> part = list.get(0).getPart();
assertMdmLink(2, part, myGoldenResource1Id.getValue(), myGoldenResource2Id.getValue(), MdmMatchResultEnum.POSSIBLE_DUPLICATE, "false", "false", null);
assertTrue(myGoldenResource1Id.toString().contains("Patient"));
assertResponseDuplicateCount(list.size(), result);
}
@Test
@ -412,6 +443,7 @@ public class MdmProviderQueryLinkR4Test extends BaseLinkR4Test {
List<Parameters.ParametersParameterComponent> list = getParametersByName(result, "link");
assertThat(list, hasSize(0));
assertResponseDuplicateCount(list.size(), result);
}
@Test

View File

@ -175,17 +175,21 @@ public abstract class BaseMdmProvider {
protected IBaseParameters parametersFromMdmLinks(
Page<MdmLinkJson> theMdmLinkStream,
boolean includeResultAndSource,
boolean theIncludeResultAndSource,
ServletRequestDetails theServletRequestDetails,
MdmPageRequest thePageRequest) {
IBaseParameters retval = ParametersUtil.newInstance(myFhirContext);
addPagingParameters(retval, theMdmLinkStream, theServletRequestDetails, thePageRequest);
long numDuplicates = theMdmLinkStream.getTotalElements();
ParametersUtil.addParameterToParametersLong(myFhirContext, retval, "total", numDuplicates);
theMdmLinkStream.getContent().forEach(mdmLink -> {
IBase resultPart = ParametersUtil.addParameterToParameters(myFhirContext, retval, "link");
ParametersUtil.addPartString(myFhirContext, resultPart, "goldenResourceId", mdmLink.getGoldenResourceId());
ParametersUtil.addPartString(myFhirContext, resultPart, "sourceResourceId", mdmLink.getSourceId());
if (includeResultAndSource) {
if (theIncludeResultAndSource) {
ParametersUtil.addPartString(
myFhirContext,
resultPart,