From bc672047f6274d6455a7af6346a03c772620587f Mon Sep 17 00:00:00 2001 From: Ekta Mishra Date: Mon, 29 Jun 2020 19:30:37 +0530 Subject: [PATCH] Implemented DistinctValueScrutinizer tests using mockito (#2833) * Implemented DistinctValueScrutinizer tests using mcokito Added inner class to the scrutinizer and updated the tests using mocks. * Tests updated-testNoIssue added * all tests updated & working fine --- .../DistinctValuesScrutinizer.java | 11 ++-- .../DistinctValuesScrutinizerTest.java | 59 +++++++++++++++++-- 2 files changed, 62 insertions(+), 8 deletions(-) diff --git a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/DistinctValuesScrutinizer.java b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/DistinctValuesScrutinizer.java index 03a5761d1..1e0e2c344 100644 --- a/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/DistinctValuesScrutinizer.java +++ b/extensions/wikidata/src/org/openrefine/wikidata/qa/scrutinizers/DistinctValuesScrutinizer.java @@ -23,15 +23,16 @@ ******************************************************************************/ package org.openrefine.wikidata.qa.scrutinizers; -import java.util.HashMap; -import java.util.Map; - import org.openrefine.wikidata.qa.QAWarning; import org.wikidata.wdtk.datamodel.interfaces.EntityIdValue; import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue; import org.wikidata.wdtk.datamodel.interfaces.Statement; import org.wikidata.wdtk.datamodel.interfaces.Value; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * A scrutinizer that checks for properties using the same value on different * items. @@ -42,6 +43,7 @@ import org.wikidata.wdtk.datamodel.interfaces.Value; public class DistinctValuesScrutinizer extends StatementScrutinizer { public final static String type = "identical-values-for-distinct-valued-property"; + public static String DISTINCT_VALUES_CONSTRAINT_QID = "Q21502410"; private Map> _seenValues; @@ -52,7 +54,8 @@ public class DistinctValuesScrutinizer extends StatementScrutinizer { @Override public void scrutinize(Statement statement, EntityIdValue entityId, boolean added) { PropertyIdValue pid = statement.getClaim().getMainSnak().getPropertyId(); - if (_fetcher.hasDistinctValues(pid)) { + List statementList = _fetcher.getConstraintsByType(pid, DISTINCT_VALUES_CONSTRAINT_QID); + if (!statementList.isEmpty()) { Value mainSnakValue = statement.getClaim().getMainSnak().getValue(); Map seen = _seenValues.get(pid); if (seen == null) { diff --git a/extensions/wikidata/tests/src/org/openrefine/wikidata/qa/scrutinizers/DistinctValuesScrutinizerTest.java b/extensions/wikidata/tests/src/org/openrefine/wikidata/qa/scrutinizers/DistinctValuesScrutinizerTest.java index a7a70a8d1..473ea70a1 100644 --- a/extensions/wikidata/tests/src/org/openrefine/wikidata/qa/scrutinizers/DistinctValuesScrutinizerTest.java +++ b/extensions/wikidata/tests/src/org/openrefine/wikidata/qa/scrutinizers/DistinctValuesScrutinizerTest.java @@ -23,14 +23,34 @@ ******************************************************************************/ package org.openrefine.wikidata.qa.scrutinizers; +import org.openrefine.wikidata.qa.ConstraintFetcher; import org.openrefine.wikidata.testing.TestingData; import org.openrefine.wikidata.updates.ItemUpdate; import org.openrefine.wikidata.updates.ItemUpdateBuilder; import org.testng.annotations.Test; +import org.wikidata.wdtk.datamodel.helpers.Datamodel; +import org.wikidata.wdtk.datamodel.implementation.StatementImpl; import org.wikidata.wdtk.datamodel.interfaces.ItemIdValue; +import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue; +import org.wikidata.wdtk.datamodel.interfaces.Snak; +import org.wikidata.wdtk.datamodel.interfaces.SnakGroup; +import org.wikidata.wdtk.datamodel.interfaces.Statement; +import org.wikidata.wdtk.datamodel.interfaces.Value; + +import java.util.ArrayList; +import java.util.List; + +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; public class DistinctValuesScrutinizerTest extends StatementScrutinizerTest { + public static PropertyIdValue propertyIdValue = Datamodel.makeWikidataPropertyIdValue("P163"); + public static Value value1 = Datamodel.makeWikidataItemIdValue("Q41673"); + public static Value value2 = Datamodel.makeWikidataItemIdValue("Q43175"); + + public static ItemIdValue entityIdValue = Datamodel.makeWikidataItemIdValue("Q19474404"); + @Override public EditScrutinizer getScrutinizer() { return new DistinctValuesScrutinizer(); @@ -39,10 +59,41 @@ public class DistinctValuesScrutinizerTest extends StatementScrutinizerTest { @Test public void testTrigger() { ItemIdValue idA = TestingData.existingId; - ItemIdValue idB = TestingData.matchedId; - ItemUpdate updateA = new ItemUpdateBuilder(idA).addStatement(TestingData.generateStatement(idA, idB)).build(); - ItemUpdate updateB = new ItemUpdateBuilder(idB).addStatement(TestingData.generateStatement(idB, idB)).build(); - scrutinize(updateA, updateB); + Snak mainSnak = Datamodel.makeValueSnak(propertyIdValue, value1); + Statement statement1 = new StatementImpl("P163", mainSnak, idA); + Statement statement2 = new StatementImpl("P163", mainSnak, idA); + + ItemUpdate update = new ItemUpdateBuilder(idA).addStatement(statement1).addStatement(statement2).build(); + + List snakGroupList = new ArrayList<>(); + List statementList = constraintParameterStatementList(entityIdValue, snakGroupList); + + ConstraintFetcher fetcher = mock(ConstraintFetcher.class); + when(fetcher.getConstraintsByType(propertyIdValue, "Q21502410")).thenReturn(statementList); + setFetcher(fetcher); + + scrutinize(update); assertWarningsRaised(DistinctValuesScrutinizer.type); } + + @Test + public void testNoIssue() { + ItemIdValue idA = TestingData.existingId; + Snak snak1 = Datamodel.makeValueSnak(propertyIdValue, value1); + Snak snak2 = Datamodel.makeValueSnak(propertyIdValue, value2); + Statement statement1 = new StatementImpl("P163", snak1, idA); + Statement statement2 = new StatementImpl("P163", snak2, idA); + + ItemUpdate update = new ItemUpdateBuilder(idA).addStatement(statement1).addStatement(statement2).build(); + + List snakGroupList = new ArrayList<>(); + List statementList = constraintParameterStatementList(entityIdValue, snakGroupList); + + ConstraintFetcher fetcher = mock(ConstraintFetcher.class); + when(fetcher.getConstraintsByType(propertyIdValue, "Q21502410")).thenReturn(statementList); + setFetcher(fetcher); + + scrutinize(update); + assertNoWarningRaised(); + } }