Implemented SingleValue Scrutinizer tests using mocks (#2818)
* Implemented SingleValue Scrutinizer tests using mocks Updated test class & added inner class to the scrutinizer * tests updated * Updated SingleValueConstraint class
This commit is contained in:
parent
2a34c8b5e6
commit
46c510b5e2
@ -26,7 +26,7 @@ public class Constraint {
|
|||||||
ItemIdValue constraintStatus;
|
ItemIdValue constraintStatus;
|
||||||
Set<EntityIdValue> constraintExceptions;
|
Set<EntityIdValue> constraintExceptions;
|
||||||
|
|
||||||
Constraint(Statement statement) {
|
public Constraint(Statement statement) {
|
||||||
constraintExceptions = new HashSet<>();
|
constraintExceptions = new HashSet<>();
|
||||||
List<SnakGroup> snakGroupList = statement.getClaim().getQualifiers();
|
List<SnakGroup> snakGroupList = statement.getClaim().getQualifiers();
|
||||||
for(SnakGroup group : snakGroupList) {
|
for(SnakGroup group : snakGroupList) {
|
||||||
|
@ -23,14 +23,15 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package org.openrefine.wikidata.qa.scrutinizers;
|
package org.openrefine.wikidata.qa.scrutinizers;
|
||||||
|
|
||||||
import java.util.HashSet;
|
|
||||||
import java.util.Set;
|
|
||||||
|
|
||||||
import org.openrefine.wikidata.qa.QAWarning;
|
import org.openrefine.wikidata.qa.QAWarning;
|
||||||
import org.openrefine.wikidata.updates.ItemUpdate;
|
import org.openrefine.wikidata.updates.ItemUpdate;
|
||||||
import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue;
|
import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue;
|
||||||
import org.wikidata.wdtk.datamodel.interfaces.Statement;
|
import org.wikidata.wdtk.datamodel.interfaces.Statement;
|
||||||
|
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* For now this scrutinizer only checks for uniqueness at the item level (it
|
* For now this scrutinizer only checks for uniqueness at the item level (it
|
||||||
* ignores qualifiers and references).
|
* ignores qualifiers and references).
|
||||||
@ -44,6 +45,8 @@ import org.wikidata.wdtk.datamodel.interfaces.Statement;
|
|||||||
public class SingleValueScrutinizer extends EditScrutinizer {
|
public class SingleValueScrutinizer extends EditScrutinizer {
|
||||||
|
|
||||||
public static final String type = "single-valued-property-added-more-than-once";
|
public static final String type = "single-valued-property-added-more-than-once";
|
||||||
|
public static String SINGLE_VALUE_CONSTRAINT_QID = "Q19474404";
|
||||||
|
public static String SINGLE_BEST_VALUE_CONSTRAINT_QID = "Q52060874";
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void scrutinize(ItemUpdate update) {
|
public void scrutinize(ItemUpdate update) {
|
||||||
@ -51,13 +54,14 @@ public class SingleValueScrutinizer extends EditScrutinizer {
|
|||||||
|
|
||||||
for (Statement statement : update.getAddedStatements()) {
|
for (Statement statement : update.getAddedStatements()) {
|
||||||
PropertyIdValue pid = statement.getClaim().getMainSnak().getPropertyId();
|
PropertyIdValue pid = statement.getClaim().getMainSnak().getPropertyId();
|
||||||
|
List<Statement> constraintStatementList1 = _fetcher.getConstraintsByType(pid, SINGLE_VALUE_CONSTRAINT_QID);
|
||||||
|
List<Statement> constraintStatementList2 = _fetcher.getConstraintsByType(pid, SINGLE_BEST_VALUE_CONSTRAINT_QID);
|
||||||
if (seenSingleProperties.contains(pid)) {
|
if (seenSingleProperties.contains(pid)) {
|
||||||
|
|
||||||
QAWarning issue = new QAWarning(type, pid.getId(), QAWarning.Severity.WARNING, 1);
|
QAWarning issue = new QAWarning(type, pid.getId(), QAWarning.Severity.WARNING, 1);
|
||||||
issue.setProperty("property_entity", pid);
|
issue.setProperty("property_entity", pid);
|
||||||
issue.setProperty("example_entity", update.getItemId());
|
issue.setProperty("example_entity", update.getItemId());
|
||||||
addIssue(issue);
|
addIssue(issue);
|
||||||
} else if (_fetcher.hasSingleValue(pid) || _fetcher.hasSingleBestValue(pid)) {
|
} else if (!constraintStatementList1.isEmpty() || !constraintStatementList2.isEmpty()){
|
||||||
seenSingleProperties.add(pid);
|
seenSingleProperties.add(pid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -23,14 +23,36 @@
|
|||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
package org.openrefine.wikidata.qa.scrutinizers;
|
package org.openrefine.wikidata.qa.scrutinizers;
|
||||||
|
|
||||||
|
import org.openrefine.wikidata.qa.ConstraintFetcher;
|
||||||
import org.openrefine.wikidata.testing.TestingData;
|
import org.openrefine.wikidata.testing.TestingData;
|
||||||
import org.openrefine.wikidata.updates.ItemUpdate;
|
import org.openrefine.wikidata.updates.ItemUpdate;
|
||||||
import org.openrefine.wikidata.updates.ItemUpdateBuilder;
|
import org.openrefine.wikidata.updates.ItemUpdateBuilder;
|
||||||
import org.testng.annotations.Test;
|
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.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.Collections;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.mockito.Mockito.mock;
|
||||||
|
import static org.mockito.Mockito.when;
|
||||||
|
|
||||||
public class SingleValueScrutinizerTest extends ScrutinizerTest {
|
public class SingleValueScrutinizerTest extends ScrutinizerTest {
|
||||||
|
|
||||||
|
public static PropertyIdValue propertyIdValue = Datamodel.makeWikidataPropertyIdValue("P21");
|
||||||
|
public static Value value1 = Datamodel.makeWikidataItemIdValue("Q6581072");
|
||||||
|
public static Value value2 = Datamodel.makeWikidataItemIdValue("Q6581097");
|
||||||
|
|
||||||
|
public static ItemIdValue entityIdValue = Datamodel.makeWikidataItemIdValue("Q19474404");
|
||||||
|
public static PropertyIdValue constraintException = Datamodel.makeWikidataPropertyIdValue("P2303");
|
||||||
|
public static Value exceptionValue = Datamodel.makeWikidataItemIdValue("Q7409772");
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public EditScrutinizer getScrutinizer() {
|
public EditScrutinizer getScrutinizer() {
|
||||||
return new SingleValueScrutinizer();
|
return new SingleValueScrutinizer();
|
||||||
@ -39,9 +61,21 @@ public class SingleValueScrutinizerTest extends ScrutinizerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testTrigger() {
|
public void testTrigger() {
|
||||||
ItemIdValue idA = TestingData.existingId;
|
ItemIdValue idA = TestingData.existingId;
|
||||||
ItemIdValue idB = TestingData.matchedId;
|
Snak snak1 = Datamodel.makeValueSnak(propertyIdValue, value1);
|
||||||
ItemUpdate update = new ItemUpdateBuilder(idA).addStatement(TestingData.generateStatement(idA, idB))
|
Snak snak2 = Datamodel.makeValueSnak(propertyIdValue, value2);
|
||||||
.addStatement(TestingData.generateStatement(idA, idB)).build();
|
Statement statement1 = new StatementImpl("P21", snak1, idA);
|
||||||
|
Statement statement2 = new StatementImpl("P21", snak2, idA);
|
||||||
|
ItemUpdate update = new ItemUpdateBuilder(idA).addStatement(statement1).addStatement(statement2).build();
|
||||||
|
|
||||||
|
Snak snak = Datamodel.makeValueSnak(constraintException, exceptionValue);
|
||||||
|
List<Snak> snakList = Collections.singletonList(snak);
|
||||||
|
SnakGroup snakGroup = Datamodel.makeSnakGroup(snakList);
|
||||||
|
List<SnakGroup> snakGroupList = Collections.singletonList(snakGroup);
|
||||||
|
List<Statement> statementList = constraintParameterStatementList(entityIdValue, snakGroupList);
|
||||||
|
|
||||||
|
ConstraintFetcher fetcher = mock(ConstraintFetcher.class);
|
||||||
|
when(fetcher.getConstraintsByType(propertyIdValue, "Q19474404")).thenReturn(statementList);
|
||||||
|
setFetcher(fetcher);
|
||||||
scrutinize(update);
|
scrutinize(update);
|
||||||
assertWarningsRaised(SingleValueScrutinizer.type);
|
assertWarningsRaised(SingleValueScrutinizer.type);
|
||||||
}
|
}
|
||||||
@ -49,10 +83,20 @@ public class SingleValueScrutinizerTest extends ScrutinizerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testNoIssue() {
|
public void testNoIssue() {
|
||||||
ItemIdValue idA = TestingData.existingId;
|
ItemIdValue idA = TestingData.existingId;
|
||||||
ItemIdValue idB = TestingData.matchedId;
|
Snak snak1 = Datamodel.makeValueSnak(propertyIdValue, value1);
|
||||||
ItemUpdate updateA = new ItemUpdateBuilder(idA).addStatement(TestingData.generateStatement(idA, idB)).build();
|
Statement statement1 = new StatementImpl("P21", snak1, idA);
|
||||||
ItemUpdate updateB = new ItemUpdateBuilder(idB).addStatement(TestingData.generateStatement(idB, idB)).build();
|
ItemUpdate updateA = new ItemUpdateBuilder(idA).addStatement(statement1).build();
|
||||||
scrutinize(updateA, updateB);
|
|
||||||
|
Snak snak = Datamodel.makeValueSnak(constraintException, exceptionValue);
|
||||||
|
List<Snak> snakList = Collections.singletonList(snak);
|
||||||
|
SnakGroup snakGroup = Datamodel.makeSnakGroup(snakList);
|
||||||
|
List<SnakGroup> snakGroupList = Collections.singletonList(snakGroup);
|
||||||
|
List<Statement> statementList = constraintParameterStatementList(entityIdValue, snakGroupList);
|
||||||
|
|
||||||
|
ConstraintFetcher fetcher = mock(ConstraintFetcher.class);
|
||||||
|
when(fetcher.getConstraintsByType(propertyIdValue, "Q19474404")).thenReturn(statementList);
|
||||||
|
setFetcher(fetcher);
|
||||||
|
scrutinize(updateA);
|
||||||
assertNoWarningRaised();
|
assertNoWarningRaised();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user