+ * * Next, we look at the second field comparator, and see if it matches. If it does, we left-shift 1 by the index * of the comparator, in this case also 1. * `0010` - *
+ *
* Then, we bitwise-or it with the current retval:
* 0001|0010 = 0011
* The binary string is now `0011`, which when you return it as a long becomes `3`.
@@ -149,16 +146,11 @@ public class MdmResourceMatcherSvc {
return retVal;
}
- private boolean isValidResourceType(String theResourceType, String theFieldComparatorType) {
+
+ private boolean isValidResourceType(String theResourceType, String theFieldComparatorType) {
return (
theFieldComparatorType.equalsIgnoreCase(MdmConstants.ALL_RESOURCE_SEARCH_PARAM_TYPE)
- || theFieldComparatorType.equalsIgnoreCase(theResourceType)
+ || theFieldComparatorType.equalsIgnoreCase(theResourceType)
);
}
-
- @VisibleForTesting
- public void setMdmRulesJson(MdmRulesJson theMdmRulesJson) {
- myMdmRulesJson = theMdmRulesJson;
- addFieldMatchers();
- }
}
diff --git a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/BaseR4Test.java b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/BaseR4Test.java
index c4e50665674..494cd93992d 100644
--- a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/BaseR4Test.java
+++ b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/BaseR4Test.java
@@ -1,19 +1,14 @@
package ca.uhn.fhir.mdm;
import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.jpa.nickname.NicknameSvc;
-import ca.uhn.fhir.mdm.api.IMdmSettings;
import ca.uhn.fhir.mdm.api.MdmMatchOutcome;
import ca.uhn.fhir.mdm.api.MdmMatchResultEnum;
import ca.uhn.fhir.mdm.rules.config.MdmRuleValidator;
import ca.uhn.fhir.mdm.rules.config.MdmSettings;
import ca.uhn.fhir.mdm.rules.json.MdmRulesJson;
-import ca.uhn.fhir.mdm.rules.matcher.IMatcherFactory;
-import ca.uhn.fhir.mdm.rules.matcher.MdmMatcherFactory;
import ca.uhn.fhir.mdm.rules.svc.MdmResourceMatcherSvc;
import ca.uhn.fhir.rest.server.util.ISearchParamRegistry;
import org.hl7.fhir.r4.model.Patient;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.mockito.junit.jupiter.MockitoExtension;
@@ -25,20 +20,6 @@ public abstract class BaseR4Test {
protected static final FhirContext ourFhirContext = FhirContext.forR4();
protected ISearchParamRegistry mySearchParamRetriever = mock(ISearchParamRegistry.class);
- protected IMatcherFactory myIMatcherFactory;
-
- protected IMdmSettings myMdmSettings;
-
- @BeforeEach
- public void before() {
- myMdmSettings = mock(IMdmSettings.class);
- myIMatcherFactory = new MdmMatcherFactory(
- ourFhirContext,
- myMdmSettings,
- new NicknameSvc()
- );
- }
-
protected Patient buildJohn() {
Patient patient = new Patient();
patient.addName().addGiven("John");
@@ -54,10 +35,7 @@ public abstract class BaseR4Test {
}
protected MdmResourceMatcherSvc buildMatcher(MdmRulesJson theMdmRulesJson) {
- return new MdmResourceMatcherSvc(ourFhirContext,
- myIMatcherFactory,
- new MdmSettings(new MdmRuleValidator(ourFhirContext, mySearchParamRetriever)).setMdmRules(theMdmRulesJson)
- );
+ return new MdmResourceMatcherSvc(ourFhirContext, new MdmSettings(new MdmRuleValidator(ourFhirContext, mySearchParamRetriever)).setMdmRules(theMdmRulesJson));
}
protected void assertMatch(MdmMatchResultEnum theExpectedMatchEnum, MdmMatchOutcome theMatchResult) {
diff --git a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/json/VectorMatchResultMapTest.java b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/json/VectorMatchResultMapTest.java
index 19d105e6cd4..e129cf2f835 100644
--- a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/json/VectorMatchResultMapTest.java
+++ b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/json/VectorMatchResultMapTest.java
@@ -1,7 +1,7 @@
package ca.uhn.fhir.mdm.rules.json;
import ca.uhn.fhir.mdm.api.MdmMatchResultEnum;
-import ca.uhn.fhir.mdm.rules.matcher.models.MatchTypeEnum;
+import ca.uhn.fhir.mdm.rules.matcher.MdmMatcherEnum;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -27,7 +27,7 @@ public class VectorMatchResultMapTest {
@Test
public void testMatchBeforePossibleMatch() {
MdmRulesJson mdmRulesJson = new MdmRulesJson();
- MdmMatcherJson matcherJson = new MdmMatcherJson().setAlgorithm(MatchTypeEnum.STRING);
+ MdmMatcherJson matcherJson = new MdmMatcherJson().setAlgorithm(MdmMatcherEnum.STRING);
mdmRulesJson.addMatchField(new MdmFieldMatchJson().setName("given").setResourceType("Patient").setResourcePath("name.given").setMatcher(matcherJson));
mdmRulesJson.addMatchField(new MdmFieldMatchJson().setName("family").setResourceType("Patient").setResourcePath("name.family").setMatcher(matcherJson));
mdmRulesJson.addMatchField(new MdmFieldMatchJson().setName("prefix").setResourceType("Patient").setResourcePath("name.prefix").setMatcher(matcherJson));
diff --git a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/BaseMatcherR4Test.java b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/BaseMatcherR4Test.java
index 5a19e8956be..f6243442212 100644
--- a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/BaseMatcherR4Test.java
+++ b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/BaseMatcherR4Test.java
@@ -1,16 +1,7 @@
package ca.uhn.fhir.mdm.rules.matcher;
import ca.uhn.fhir.context.FhirContext;
-import ca.uhn.fhir.mdm.rules.json.MdmMatcherJson;
-import org.junit.jupiter.api.BeforeEach;
public abstract class BaseMatcherR4Test {
protected static final FhirContext ourFhirContext = FhirContext.forR4();
-
- protected MdmMatcherJson myMdmMatcherJson;
-
- @BeforeEach
- public void before() {
- myMdmMatcherJson = new MdmMatcherJson();
- }
}
diff --git a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/DateMatcherR4Test.java b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/DateMatcherR4Test.java
index 9b79f81a578..113c8ba6a84 100644
--- a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/DateMatcherR4Test.java
+++ b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/DateMatcherR4Test.java
@@ -1,10 +1,8 @@
package ca.uhn.fhir.mdm.rules.matcher;
-import ca.uhn.fhir.mdm.rules.matcher.fieldmatchers.HapiDateMatcher;
import ca.uhn.fhir.model.api.TemporalPrecisionEnum;
import org.hl7.fhir.r4.model.DateTimeType;
import org.hl7.fhir.r4.model.DateType;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import java.util.Calendar;
@@ -16,14 +14,6 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
public class DateMatcherR4Test extends BaseMatcherR4Test {
- private HapiDateMatcher myDateMatcher;
-
- @BeforeEach
- public void before() {
- super.before();
- myDateMatcher = new HapiDateMatcher(ourFhirContext);
- }
-
@Test
public void testExactDatePrecision() {
Calendar cal = new GregorianCalendar(2020, 6, 15);
@@ -53,8 +43,7 @@ public class DateMatcherR4Test extends BaseMatcherR4Test {
}
private boolean dateMatch(Date theDate, Date theSameMonth, TemporalPrecisionEnum theTheDay) {
- myMdmMatcherJson.setExact(true);
- return myDateMatcher.matches(new DateType(theDate, theTheDay), new DateType(theSameMonth, theTheDay), myMdmMatcherJson);
+ return MdmMatcherEnum.DATE.match(ourFhirContext, new DateType(theDate, theTheDay), new DateType(theSameMonth, theTheDay), true, null);
}
@Test
@@ -98,11 +87,12 @@ public class DateMatcherR4Test extends BaseMatcherR4Test {
}
private boolean dateTimeMatch(Date theDate, Date theSecondDate, TemporalPrecisionEnum thePrecision, TemporalPrecisionEnum theSecondPrecision) {
- myMdmMatcherJson.setExact(true);
- return myDateMatcher.matches(
+ return MdmMatcherEnum.DATE.match(
+ ourFhirContext,
new DateTimeType(theDate, thePrecision),
new DateTimeType(theSecondDate, theSecondPrecision),
- myMdmMatcherJson
+ true,
+ null
);
}
}
diff --git a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/EmptyFieldMatcherTest.java b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/EmptyFieldMatcherTest.java
index 67ba9232427..f1ef1982b22 100644
--- a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/EmptyFieldMatcherTest.java
+++ b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/EmptyFieldMatcherTest.java
@@ -2,8 +2,6 @@ package ca.uhn.fhir.mdm.rules.matcher;
import ca.uhn.fhir.mdm.rules.json.MdmFieldMatchJson;
import ca.uhn.fhir.mdm.rules.json.MdmMatcherJson;
-import ca.uhn.fhir.mdm.rules.matcher.fieldmatchers.EmptyFieldMatcher;
-import ca.uhn.fhir.mdm.rules.matcher.models.MatchTypeEnum;
import ca.uhn.fhir.model.primitive.StringDt;
import org.junit.jupiter.api.Test;
@@ -18,16 +16,16 @@ public class EmptyFieldMatcherTest extends BaseMatcherR4Test {
StringDt leftEmpty = new StringDt("");
StringDt rightEmpty = new StringDt("");
StringDt right = new StringDt("a value");
+ MdmMatcherJson matcher = new MdmMatcherJson().setAlgorithm(MdmMatcherEnum.EMPTY_FIELD);
+ MdmFieldMatchJson fieldMatch = new MdmFieldMatchJson().setMatcher(matcher);
- EmptyFieldMatcher fieldMatch = new EmptyFieldMatcher();
-
- assertTrue(fieldMatch.matches(null, null, null));
- assertTrue(fieldMatch.matches(null, rightEmpty, null));
- assertTrue(fieldMatch.matches(leftEmpty, null, null));
- assertTrue(fieldMatch.matches(leftEmpty, rightEmpty, null));
- assertFalse(fieldMatch.matches(null, right, null));
- assertFalse(fieldMatch.matches(left, null, null));
- assertFalse(fieldMatch.matches(left, right, null));
+ assertTrue(fieldMatch.match(ourFhirContext, null, null).match);
+ assertTrue(fieldMatch.match(ourFhirContext, null, rightEmpty).match);
+ assertTrue(fieldMatch.match(ourFhirContext, leftEmpty, null).match);
+ assertTrue(fieldMatch.match(ourFhirContext, leftEmpty, rightEmpty).match);
+ assertFalse(fieldMatch.match(ourFhirContext, null, right).match);
+ assertFalse(fieldMatch.match(ourFhirContext, left, null).match);
+ assertFalse(fieldMatch.match(ourFhirContext, left, right).match);
}
diff --git a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/ExtensionMatcherR4Test.java b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/ExtensionMatcherR4Test.java
index 569e1b133fe..c5252b1e016 100644
--- a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/ExtensionMatcherR4Test.java
+++ b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/ExtensionMatcherR4Test.java
@@ -1,28 +1,16 @@
package ca.uhn.fhir.mdm.rules.matcher;
-import ca.uhn.fhir.mdm.rules.matcher.fieldmatchers.ExtensionMatcher;
-import org.hl7.fhir.instance.model.api.IBase;
import org.hl7.fhir.r4.model.IntegerType;
+import org.hl7.fhir.r4.model.Organization;
import org.hl7.fhir.r4.model.Patient;
import org.hl7.fhir.r4.model.StringType;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
public class ExtensionMatcherR4Test extends BaseMatcherR4Test {
-
- private ExtensionMatcher myExtensionMatcher;
-
- @BeforeEach
- public void before() {
- super.before();
-
- myExtensionMatcher = new ExtensionMatcher();
- }
-
@Test
public void testPatientWithMatchingExtension(){
Patient patient1 = new Patient();
@@ -31,7 +19,7 @@ public class ExtensionMatcherR4Test extends BaseMatcherR4Test {
patient1.addExtension("asd",new StringType("Patient1"));
patient2.addExtension("asd",new StringType("Patient1"));
- assertTrue(match(patient1, patient2));
+ assertTrue(MdmMatcherEnum.EXTENSION_ANY_ORDER.match(ourFhirContext, patient1, patient2, false, null));
}
@Test
@@ -42,7 +30,7 @@ public class ExtensionMatcherR4Test extends BaseMatcherR4Test {
patient1.addExtension("asd",new StringType("Patient1"));
patient2.addExtension("asd",new StringType("Patient2"));
- assertFalse(match(patient1, patient2));
+ assertFalse(MdmMatcherEnum.EXTENSION_ANY_ORDER.match(ourFhirContext, patient1, patient2, false, null));
}
@Test
@@ -53,7 +41,7 @@ public class ExtensionMatcherR4Test extends BaseMatcherR4Test {
patient1.addExtension("asd",new StringType("Patient1"));
patient2.addExtension("asd1",new StringType("Patient1"));
- assertFalse(match(patient1, patient2));
+ assertFalse(MdmMatcherEnum.EXTENSION_ANY_ORDER.match(ourFhirContext, patient1, patient2, false, null));
}
@Test
@@ -66,7 +54,7 @@ public class ExtensionMatcherR4Test extends BaseMatcherR4Test {
patient2.addExtension("asd",new StringType("Patient1"));
patient2.addExtension("asdasd", new StringType("some value"));
- assertTrue(match(patient1, patient2));
+ assertTrue(MdmMatcherEnum.EXTENSION_ANY_ORDER.match(ourFhirContext, patient1, patient2, false, null));
}
@Test
@@ -77,7 +65,7 @@ public class ExtensionMatcherR4Test extends BaseMatcherR4Test {
patient1.addExtension("asd", new IntegerType(123));
patient2.addExtension("asd", new IntegerType(123));
- assertTrue(match(patient1, patient2));
+ assertTrue(MdmMatcherEnum.EXTENSION_ANY_ORDER.match(ourFhirContext, patient1, patient2, false, null));
}
@Test
@@ -85,10 +73,7 @@ public class ExtensionMatcherR4Test extends BaseMatcherR4Test {
Patient patient1 = new Patient();
Patient patient2 = new Patient();
- assertFalse(match(patient1, patient2));
+ assertFalse(MdmMatcherEnum.EXTENSION_ANY_ORDER.match(ourFhirContext, patient1, patient2, false, null));
}
- private boolean match(IBase theFirst, IBase theSecond) {
- return myExtensionMatcher.matches(theFirst, theSecond, myMdmMatcherJson);
- }
}
diff --git a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/IdentifierMatcherR4Test.java b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/IdentifierMatcherR4Test.java
index 221eb0d8756..66666446f8a 100644
--- a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/IdentifierMatcherR4Test.java
+++ b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/IdentifierMatcherR4Test.java
@@ -1,9 +1,8 @@
package ca.uhn.fhir.mdm.rules.matcher;
-import ca.uhn.fhir.mdm.rules.matcher.fieldmatchers.IdentifierMatcher;
-import org.hl7.fhir.instance.model.api.IBase;
+import ca.uhn.fhir.mdm.rules.json.MdmFieldMatchJson;
+import ca.uhn.fhir.mdm.rules.json.MdmMatcherJson;
import org.hl7.fhir.r4.model.Identifier;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -15,20 +14,15 @@ public class IdentifierMatcherR4Test extends BaseMatcherR4Test {
private static final String MATCHING_VALUE = "matchme";
private static final String OTHER_VALUE = "strange";
- private IdentifierMatcher myIdentifierMatcher;
-
- @BeforeEach
- public void before() {
- super.before();
- myIdentifierMatcher = new IdentifierMatcher();
- }
-
@Test
public void testIdentifierMatch() {
Identifier left = new Identifier().setSystem(MATCHING_SYSTEM).setValue(MATCHING_VALUE);
Identifier right = new Identifier().setSystem(MATCHING_SYSTEM).setValue(MATCHING_VALUE);
- assertTrue(match(left, right));
+ MdmMatcherJson matcher = new MdmMatcherJson().setAlgorithm(MdmMatcherEnum.IDENTIFIER);
+ MdmFieldMatchJson fieldMatch = new MdmFieldMatchJson().setMatcher(matcher);
+
+ assertTrue(fieldMatch.match(ourFhirContext, left, right).match);
}
@Test
@@ -39,15 +33,17 @@ public class IdentifierMatcherR4Test extends BaseMatcherR4Test {
Identifier rightNoSystem = new Identifier().setValue(MATCHING_VALUE);
Identifier rightNoValue = new Identifier().setSystem(MATCHING_SYSTEM);
+ MdmMatcherJson matcher = new MdmMatcherJson().setAlgorithm(MdmMatcherEnum.IDENTIFIER);
+ MdmFieldMatchJson fieldMatch = new MdmFieldMatchJson().setMatcher(matcher);
- assertFalse(match(left, rightWrongSystem));
- assertFalse(match(left, rightWrongValue));
- assertFalse(match(left, rightNoSystem));
- assertFalse(match(left, rightNoValue));
- assertFalse(match(rightWrongSystem, left));
- assertFalse(match(rightWrongValue, left));
- assertFalse(match(rightNoSystem, left));
- assertFalse(match(rightNoValue, left));
+ assertFalse(fieldMatch.match(ourFhirContext, left, rightWrongSystem).match);
+ assertFalse(fieldMatch.match(ourFhirContext, left, rightWrongValue).match);
+ assertFalse(fieldMatch.match(ourFhirContext, left, rightNoSystem).match);
+ assertFalse(fieldMatch.match(ourFhirContext, left, rightNoValue).match);
+ assertFalse(fieldMatch.match(ourFhirContext, rightWrongSystem, left).match);
+ assertFalse(fieldMatch.match(ourFhirContext, rightWrongValue, left).match);
+ assertFalse(fieldMatch.match(ourFhirContext, rightNoSystem, left).match);
+ assertFalse(fieldMatch.match(ourFhirContext, rightNoValue, left).match);
}
@Test
@@ -55,9 +51,10 @@ public class IdentifierMatcherR4Test extends BaseMatcherR4Test {
Identifier left = new Identifier().setSystem(MATCHING_SYSTEM);
Identifier right = new Identifier().setSystem(MATCHING_SYSTEM);
- myMdmMatcherJson.setIdentifierSystem(MATCHING_SYSTEM);
+ MdmMatcherJson matcher = new MdmMatcherJson().setAlgorithm(MdmMatcherEnum.IDENTIFIER).setIdentifierSystem(MATCHING_SYSTEM);
+ MdmFieldMatchJson fieldMatch = new MdmFieldMatchJson().setMatcher(matcher);
- assertFalse(match(left, right));
+ assertFalse(fieldMatch.match(ourFhirContext, left, right).match);
}
@Test
@@ -65,9 +62,10 @@ public class IdentifierMatcherR4Test extends BaseMatcherR4Test {
Identifier left = new Identifier().setSystem(MATCHING_SYSTEM).setValue(MATCHING_VALUE);
Identifier right = new Identifier().setSystem(MATCHING_SYSTEM).setValue(MATCHING_VALUE);
- myMdmMatcherJson.setIdentifierSystem(MATCHING_SYSTEM);
+ MdmMatcherJson matcher = new MdmMatcherJson().setAlgorithm(MdmMatcherEnum.IDENTIFIER).setIdentifierSystem(MATCHING_SYSTEM);
+ MdmFieldMatchJson fieldMatch = new MdmFieldMatchJson().setMatcher(matcher);
- assertTrue(match(left, right));
+ assertTrue(fieldMatch.match(ourFhirContext, left, right).match);
}
@Test
@@ -75,12 +73,9 @@ public class IdentifierMatcherR4Test extends BaseMatcherR4Test {
Identifier left = new Identifier().setSystem(OTHER_SYSTEM).setValue(MATCHING_VALUE);
Identifier right = new Identifier().setSystem(OTHER_SYSTEM).setValue(MATCHING_VALUE);
- myMdmMatcherJson.setIdentifierSystem(MATCHING_SYSTEM);
+ MdmMatcherJson matcher = new MdmMatcherJson().setAlgorithm(MdmMatcherEnum.IDENTIFIER).setIdentifierSystem(MATCHING_SYSTEM);
+ MdmFieldMatchJson fieldMatch = new MdmFieldMatchJson().setMatcher(matcher);
- assertFalse(match(left, right));
- }
-
- private boolean match(IBase theFirst, IBase theSecond) {
- return myIdentifierMatcher.matches(theFirst, theSecond, myMdmMatcherJson);
+ assertFalse(fieldMatch.match(ourFhirContext, left, right).match);
}
}
diff --git a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/NicknameMatcherTest.java b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/NicknameMatcherTest.java
index d59a76312c2..f1ed249a21f 100644
--- a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/NicknameMatcherTest.java
+++ b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/NicknameMatcherTest.java
@@ -1,48 +1,31 @@
package ca.uhn.fhir.mdm.rules.matcher;
-import ca.uhn.fhir.jpa.nickname.NicknameSvc;
-import ca.uhn.fhir.mdm.rules.json.MdmMatcherJson;
-import ca.uhn.fhir.mdm.rules.matcher.fieldmatchers.NicknameMatcher;
-import ca.uhn.fhir.mdm.rules.matcher.models.IMdmFieldMatcher;
-import org.hl7.fhir.r4.model.StringType;
-import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
class NicknameMatcherTest {
- IMdmFieldMatcher matcher;
-
- NicknameSvc myNicknameSvc = new NicknameSvc();
-
- @BeforeEach
- public void begin() {
- matcher = new NicknameMatcher(myNicknameSvc);
- }
+ IMdmStringMatcher matcher = new NicknameMatcher();
@Test
public void testMatches() {
- Assertions.assertTrue(match("Ken", "ken"));
- Assertions.assertTrue(match("ken", "Ken"));
- Assertions.assertTrue(match("Ken", "Ken"));
- Assertions.assertTrue(match("Kenneth", "Ken"));
- Assertions.assertTrue(match("Kenneth", "Kenny"));
- Assertions.assertTrue(match("Ken", "Kenneth"));
- Assertions.assertTrue(match("Kenny", "Kenneth"));
- Assertions.assertTrue(match("Jim", "Jimmy"));
- Assertions.assertTrue(match("Jimmy", "Jim"));
- Assertions.assertTrue(match("Jim", "James"));
- Assertions.assertTrue(match("Jimmy", "James"));
- Assertions.assertTrue(match("James", "Jimmy"));
- Assertions.assertTrue(match("James", "Jim"));
+ assertTrue(matcher.matches("Ken", "ken"));
+ assertTrue(matcher.matches("ken", "Ken"));
+ assertTrue(matcher.matches("Ken", "Ken"));
+ assertTrue(matcher.matches("Kenneth", "Ken"));
+ assertTrue(matcher.matches("Kenneth", "Kenny"));
+ assertTrue(matcher.matches("Ken", "Kenneth"));
+ assertTrue(matcher.matches("Kenny", "Kenneth"));
+ assertTrue(matcher.matches("Jim", "Jimmy"));
+ assertTrue(matcher.matches("Jimmy", "Jim"));
+ assertTrue(matcher.matches("Jim", "James"));
+ assertTrue(matcher.matches("Jimmy", "James"));
+ assertTrue(matcher.matches("James", "Jimmy"));
+ assertTrue(matcher.matches("James", "Jim"));
- Assertions.assertFalse(match("Ken", "Bob"));
+ assertFalse(matcher.matches("Ken", "Bob"));
// These aren't nickname matches. If you want matches like these use a phonetic matcher
- Assertions.assertFalse(match("Allen", "Allan"));
- }
-
- private boolean match(String theFirst, String theSecond) {
- MdmMatcherJson json = new MdmMatcherJson();
- json.setExact(true);
- return matcher.matches(new StringType(theFirst), new StringType(theSecond), json);
+ assertFalse(matcher.matches("Allen", "Allan"));
}
}
diff --git a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/StringMatcherR4Test.java b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/StringMatcherR4Test.java
index 646641f8966..73aafb7aebe 100644
--- a/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/StringMatcherR4Test.java
+++ b/hapi-fhir-server-mdm/src/test/java/ca/uhn/fhir/mdm/rules/matcher/StringMatcherR4Test.java
@@ -1,140 +1,106 @@
package ca.uhn.fhir.mdm.rules.matcher;
-import ca.uhn.fhir.jpa.nickname.NicknameSvc;
-import ca.uhn.fhir.mdm.api.IMdmSettings;
-import ca.uhn.fhir.mdm.rules.matcher.models.IMdmFieldMatcher;
-import ca.uhn.fhir.mdm.rules.matcher.models.MatchTypeEnum;
import org.hl7.fhir.r4.model.BooleanType;
import org.hl7.fhir.r4.model.DateType;
import org.hl7.fhir.r4.model.Enumeration;
import org.hl7.fhir.r4.model.Enumerations;
import org.hl7.fhir.r4.model.StringType;
-import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
-import javax.annotation.Nonnull;
-
import static org.junit.jupiter.api.Assertions.assertFalse;
import static org.junit.jupiter.api.Assertions.assertTrue;
-import static org.mockito.Mockito.mock;
public class StringMatcherR4Test extends BaseMatcherR4Test {
private static final Logger ourLog = LoggerFactory.getLogger(StringMatcherR4Test.class);
public static final String LEFT_NAME = "namadega";
public static final String RIGHT_NAME = "namaedga";
- private IMatcherFactory myIMatcherFactory;
-
- private IMdmSettings myMdmSettings;
-
- @BeforeEach
- public void before() {
- super.before();
-
- myMdmSettings = mock(IMdmSettings.class);
-
- myIMatcherFactory = new MdmMatcherFactory(
- ourFhirContext,
- myMdmSettings,
- new NicknameSvc()
- );
- }
-
- private @Nonnull IMdmFieldMatcher getFieldMatcher(MatchTypeEnum theMatchTypeEnum) {
- return myIMatcherFactory.getFieldMatcherForMatchType(theMatchTypeEnum);
- }
-
@Test
public void testNamadega() {
String left = LEFT_NAME;
String right = RIGHT_NAME;
- assertTrue(match(MatchTypeEnum.COLOGNE, left, right));
- assertTrue(match(MatchTypeEnum.DOUBLE_METAPHONE, left, right));
- assertTrue(match(MatchTypeEnum.MATCH_RATING_APPROACH, left, right));
- assertTrue(match(MatchTypeEnum.METAPHONE, left, right));
- assertTrue(match(MatchTypeEnum.SOUNDEX, left, right));
+ assertTrue(match(MdmMatcherEnum.COLOGNE, left, right));
+ assertTrue(match(MdmMatcherEnum.DOUBLE_METAPHONE, left, right));
+ assertTrue(match(MdmMatcherEnum.MATCH_RATING_APPROACH, left, right));
+ assertTrue(match(MdmMatcherEnum.METAPHONE, left, right));
+ assertTrue(match(MdmMatcherEnum.SOUNDEX, left, right));
+ assertTrue(match(MdmMatcherEnum.METAPHONE, left, right));
- assertFalse(match(MatchTypeEnum.CAVERPHONE1, left, right));
- assertFalse(match(MatchTypeEnum.CAVERPHONE2, left, right));
- assertFalse(match(MatchTypeEnum.NYSIIS, left, right));
- assertFalse(match(MatchTypeEnum.REFINED_SOUNDEX, left, right));
- assertFalse(match(MatchTypeEnum.STRING, left, right));
- assertFalse(match(MatchTypeEnum.SUBSTRING, left, right));
+ assertFalse(match(MdmMatcherEnum.CAVERPHONE1, left, right));
+ assertFalse(match(MdmMatcherEnum.CAVERPHONE2, left, right));
+ assertFalse(match(MdmMatcherEnum.NYSIIS, left, right));
+ assertFalse(match(MdmMatcherEnum.REFINED_SOUNDEX, left, right));
+ assertFalse(match(MdmMatcherEnum.STRING, left, right));
+ assertFalse(match(MdmMatcherEnum.SUBSTRING, left, right));
}
@Test
public void testNumeric() {
- assertTrue(match(MatchTypeEnum.NUMERIC, "4169671111", "(416) 967-1111"));
- assertFalse(match(MatchTypeEnum.NUMERIC, "5169671111", "(416) 967-1111"));
- assertFalse(match(MatchTypeEnum.NUMERIC, "4169671111", "(416) 967-1111x123"));
+ assertTrue(match(MdmMatcherEnum.NUMERIC, "4169671111", "(416) 967-1111"));
+ assertFalse(match(MdmMatcherEnum.NUMERIC, "5169671111", "(416) 967-1111"));
+ assertFalse(match(MdmMatcherEnum.NUMERIC, "4169671111", "(416) 967-1111x123"));
}
@Test
public void testMetaphone() {
- assertTrue(match(MatchTypeEnum.METAPHONE, "Durie", "dury"));
- assertTrue(match(MatchTypeEnum.METAPHONE, "Balo", "ballo"));
- assertTrue(match(MatchTypeEnum.METAPHONE, "Hans Peter", "Hanspeter"));
- assertTrue(match(MatchTypeEnum.METAPHONE, "Lawson", "Law son"));
+ assertTrue(match(MdmMatcherEnum.METAPHONE, "Durie", "dury"));
+ assertTrue(match(MdmMatcherEnum.METAPHONE, "Balo", "ballo"));
+ assertTrue(match(MdmMatcherEnum.METAPHONE, "Hans Peter", "Hanspeter"));
+ assertTrue(match(MdmMatcherEnum.METAPHONE, "Lawson", "Law son"));
- assertFalse(match(MatchTypeEnum.METAPHONE, "Allsop", "Allsob"));
- assertFalse(match(MatchTypeEnum.METAPHONE, "Gevne", "Geve"));
- assertFalse(match(MatchTypeEnum.METAPHONE, "Bruce", "Bruch"));
- assertFalse(match(MatchTypeEnum.METAPHONE, "Smith", "Schmidt"));
- assertFalse(match(MatchTypeEnum.METAPHONE, "Jyothi", "Jyoti"));
+ assertFalse(match(MdmMatcherEnum.METAPHONE, "Allsop", "Allsob"));
+ assertFalse(match(MdmMatcherEnum.METAPHONE, "Gevne", "Geve"));
+ assertFalse(match(MdmMatcherEnum.METAPHONE, "Bruce", "Bruch"));
+ assertFalse(match(MdmMatcherEnum.METAPHONE, "Smith", "Schmidt"));
+ assertFalse(match(MdmMatcherEnum.METAPHONE, "Jyothi", "Jyoti"));
}
@Test
public void testDoubleMetaphone() {
- assertTrue(match(MatchTypeEnum.DOUBLE_METAPHONE, "Durie", "dury"));
- assertTrue(match(MatchTypeEnum.DOUBLE_METAPHONE, "Balo", "ballo"));
- assertTrue(match(MatchTypeEnum.DOUBLE_METAPHONE, "Hans Peter", "Hanspeter"));
- assertTrue(match(MatchTypeEnum.DOUBLE_METAPHONE, "Lawson", "Law son"));
- assertTrue(match(MatchTypeEnum.DOUBLE_METAPHONE, "Allsop", "Allsob"));
+ assertTrue(match(MdmMatcherEnum.DOUBLE_METAPHONE, "Durie", "dury"));
+ assertTrue(match(MdmMatcherEnum.DOUBLE_METAPHONE, "Balo", "ballo"));
+ assertTrue(match(MdmMatcherEnum.DOUBLE_METAPHONE, "Hans Peter", "Hanspeter"));
+ assertTrue(match(MdmMatcherEnum.DOUBLE_METAPHONE, "Lawson", "Law son"));
+ assertTrue(match(MdmMatcherEnum.DOUBLE_METAPHONE, "Allsop", "Allsob"));
- assertFalse(match(MatchTypeEnum.DOUBLE_METAPHONE, "Gevne", "Geve"));
- assertFalse(match(MatchTypeEnum.DOUBLE_METAPHONE, "Bruce", "Bruch"));
- assertFalse(match(MatchTypeEnum.DOUBLE_METAPHONE, "Smith", "Schmidt"));
- assertFalse(match(MatchTypeEnum.DOUBLE_METAPHONE, "Jyothi", "Jyoti"));
+ assertFalse(match(MdmMatcherEnum.DOUBLE_METAPHONE, "Gevne", "Geve"));
+ assertFalse(match(MdmMatcherEnum.DOUBLE_METAPHONE, "Bruce", "Bruch"));
+ assertFalse(match(MdmMatcherEnum.DOUBLE_METAPHONE, "Smith", "Schmidt"));
+ assertFalse(match(MdmMatcherEnum.DOUBLE_METAPHONE, "Jyothi", "Jyoti"));
}
@Test
public void testNormalizeCase() {
- assertTrue(match(MatchTypeEnum.STRING, "joe", "JoE"));
- assertTrue(match(MatchTypeEnum.STRING, "MCTAVISH", "McTavish"));
+ assertTrue(match(MdmMatcherEnum.STRING, "joe", "JoE"));
+ assertTrue(match(MdmMatcherEnum.STRING, "MCTAVISH", "McTavish"));
- assertFalse(match(MatchTypeEnum.STRING, "joey", "joe"));
- assertFalse(match(MatchTypeEnum.STRING, "joe", "joey"));
+ assertFalse(match(MdmMatcherEnum.STRING, "joey", "joe"));
+ assertFalse(match(MdmMatcherEnum.STRING, "joe", "joey"));
}
@Test
public void testExactString() {
- myMdmMatcherJson.setExact(true);
+ assertTrue(MdmMatcherEnum.STRING.match(ourFhirContext, new StringType("Jilly"), new StringType("Jilly"), true, null));
- assertTrue(getFieldMatcher(MatchTypeEnum.STRING).matches(new StringType("Jilly"), new StringType("Jilly"), myMdmMatcherJson));
-
- assertFalse(getFieldMatcher(MatchTypeEnum.STRING).matches(new StringType("MCTAVISH"), new StringType("McTavish"), myMdmMatcherJson));
- assertFalse(getFieldMatcher(MatchTypeEnum.STRING).matches(new StringType("Durie"), new StringType("dury"), myMdmMatcherJson));
+ assertFalse(MdmMatcherEnum.STRING.match(ourFhirContext, new StringType("MCTAVISH"), new StringType("McTavish"), true, null));
+ assertFalse(MdmMatcherEnum.STRING.match(ourFhirContext, new StringType("Durie"), new StringType("dury"), true, null));
}
@Test
public void testExactBoolean() {
- myMdmMatcherJson.setExact(true);
+ assertTrue(MdmMatcherEnum.STRING.match(ourFhirContext, new BooleanType(true), new BooleanType(true), true, null));
- assertTrue(getFieldMatcher(MatchTypeEnum.STRING).matches(new BooleanType(true), new BooleanType(true), myMdmMatcherJson));
-
- assertFalse(getFieldMatcher(MatchTypeEnum.STRING).matches(new BooleanType(true), new BooleanType(false), myMdmMatcherJson));
- assertFalse(getFieldMatcher(MatchTypeEnum.STRING).matches(new BooleanType(false), new BooleanType(true), myMdmMatcherJson));
+ assertFalse(MdmMatcherEnum.STRING.match(ourFhirContext, new BooleanType(true), new BooleanType(false), true, null));
+ assertFalse(MdmMatcherEnum.STRING.match(ourFhirContext, new BooleanType(false), new BooleanType(true), true, null));
}
@Test
public void testExactDateString() {
- myMdmMatcherJson.setExact(true);
+ assertTrue(MdmMatcherEnum.STRING.match(ourFhirContext, new DateType("1965-08-09"), new DateType("1965-08-09"), true, null));
- assertTrue(getFieldMatcher(MatchTypeEnum.STRING).matches(new DateType("1965-08-09"), new DateType("1965-08-09"), myMdmMatcherJson));
-
- assertFalse(getFieldMatcher(MatchTypeEnum.STRING).matches(new DateType("1965-08-09"), new DateType("1965-09-08"), myMdmMatcherJson));
+ assertFalse(MdmMatcherEnum.STRING.match(ourFhirContext, new DateType("1965-08-09"), new DateType("1965-09-08"), true, null));
}
@@ -146,55 +112,52 @@ public class StringMatcherR4Test extends BaseMatcherR4Test {
Enumeration