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
This commit is contained in:
Ekta Mishra 2020-06-29 19:30:37 +05:30 committed by GitHub
parent 46c510b5e2
commit bc672047f6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 62 additions and 8 deletions

View File

@ -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<PropertyIdValue, Map<Value, EntityIdValue>> _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<Statement> statementList = _fetcher.getConstraintsByType(pid, DISTINCT_VALUES_CONSTRAINT_QID);
if (!statementList.isEmpty()) {
Value mainSnakValue = statement.getClaim().getMainSnak().getValue();
Map<Value, EntityIdValue> seen = _seenValues.get(pid);
if (seen == null) {

View File

@ -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<SnakGroup> snakGroupList = new ArrayList<>();
List<Statement> 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<SnakGroup> snakGroupList = new ArrayList<>();
List<Statement> statementList = constraintParameterStatementList(entityIdValue, snakGroupList);
ConstraintFetcher fetcher = mock(ConstraintFetcher.class);
when(fetcher.getConstraintsByType(propertyIdValue, "Q21502410")).thenReturn(statementList);
setFetcher(fetcher);
scrutinize(update);
assertNoWarningRaised();
}
}