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:
parent
a48c602f71
commit
de9a747666
|
@ -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."
|
|
@ -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
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue