Implemented EntityTypeScrutinizer tests usings mocks (#2839)
Updates all the testcases in EntityTypeScrutinizerTest
This commit is contained in:
parent
54291ef441
commit
cef2e84e7f
@ -26,6 +26,7 @@ package org.openrefine.wikidata.qa;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.ItemIdValue;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.PropertyIdValue;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.QuantityValue;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.SnakGroup;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.Statement;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.Value;
|
||||
|
||||
@ -154,6 +155,17 @@ public interface ConstraintFetcher {
|
||||
*/
|
||||
List<Statement> getConstraintsByType(PropertyIdValue pid, String qid);
|
||||
|
||||
/**
|
||||
* Returns the values of a given property in qualifiers
|
||||
*
|
||||
* @param groups
|
||||
* the qualifiers
|
||||
* @param pid
|
||||
* the property to filter on
|
||||
* @return
|
||||
*/
|
||||
List<Value> findValues(List<SnakGroup> groups, String pid);
|
||||
|
||||
/**
|
||||
* Retrieves the lower bound of the range
|
||||
* required in difference-within-range constraint
|
||||
|
@ -293,7 +293,7 @@ public class WikidataConstraintFetcher implements ConstraintFetcher {
|
||||
|
||||
/**
|
||||
* Gets the list of constraints of a particular type for a property
|
||||
*
|
||||
*
|
||||
* @param pid
|
||||
* the property to retrieve the constraints for
|
||||
* @param qid
|
||||
@ -336,7 +336,8 @@ public class WikidataConstraintFetcher implements ConstraintFetcher {
|
||||
* the property to filter on
|
||||
* @return
|
||||
*/
|
||||
protected List<Value> findValues(List<SnakGroup> groups, String pid) {
|
||||
@Override
|
||||
public List<Value> findValues(List<SnakGroup> groups, String pid) {
|
||||
List<Value> results = new ArrayList<>();
|
||||
for (SnakGroup group : groups) {
|
||||
if (group.getProperty().getId().equals(pid)) {
|
||||
|
@ -1,23 +1,40 @@
|
||||
package org.openrefine.wikidata.qa.scrutinizers;
|
||||
|
||||
import org.openrefine.wikidata.qa.QAWarning;
|
||||
import org.wikidata.wdtk.datamodel.helpers.Datamodel;
|
||||
import org.wikidata.wdtk.datamodel.interfaces.EntityIdValue;
|
||||
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 java.util.List;
|
||||
|
||||
|
||||
public class EntityTypeScrutinizer extends SnakScrutinizer {
|
||||
|
||||
public final static String type = "invalid-entity-type";
|
||||
public static String ALLOWED_ENTITY_TYPES_QID = "Q52004125";
|
||||
public static String ALLOWED_ITEM_TYPE_QID = "Q29934200";
|
||||
public static String ALLOWED_ENTITY_TYPES_PID = "P2305";
|
||||
|
||||
@Override
|
||||
public void scrutinize(Snak snak, EntityIdValue entityId, boolean added) {
|
||||
PropertyIdValue pid = snak.getPropertyId();
|
||||
if(!_fetcher.usableOnItems(pid)) {
|
||||
QAWarning issue = new QAWarning(type, null, QAWarning.Severity.WARNING, 1);
|
||||
issue.setProperty("property_entity", pid);
|
||||
issue.setProperty("example_entity", entityId);
|
||||
addIssue(issue);
|
||||
List<Statement> statementList = _fetcher.getConstraintsByType(pid, ALLOWED_ENTITY_TYPES_QID);
|
||||
if(!statementList.isEmpty()) {
|
||||
List<SnakGroup> constraint = statementList.get(0).getClaim().getQualifiers();
|
||||
boolean isUsable = true;
|
||||
if (constraint != null) {
|
||||
isUsable = _fetcher.findValues(constraint, ALLOWED_ENTITY_TYPES_PID).contains(
|
||||
Datamodel.makeWikidataItemIdValue(ALLOWED_ITEM_TYPE_QID));
|
||||
}
|
||||
if (!isUsable) {
|
||||
QAWarning issue = new QAWarning(type, null, QAWarning.Severity.WARNING, 1);
|
||||
issue.setProperty("property_entity", pid);
|
||||
issue.setProperty("example_entity", entityId);
|
||||
addIssue(issue);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -248,4 +248,9 @@ public class MockConstraintFetcher implements ConstraintFetcher {
|
||||
|
||||
return statements;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<Value> findValues(List<SnakGroup> groups, String pid) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
@ -1,14 +1,38 @@
|
||||
package org.openrefine.wikidata.qa.scrutinizers;
|
||||
|
||||
import org.openrefine.wikidata.qa.ConstraintFetcher;
|
||||
import org.openrefine.wikidata.qa.MockConstraintFetcher;
|
||||
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 org.wikidata.wdtk.datamodel.interfaces.ValueSnak;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
public class EntityTypeScrutinizerTest extends StatementScrutinizerTest {
|
||||
|
||||
private static ItemIdValue qid = Datamodel.makeWikidataItemIdValue("Q343");
|
||||
|
||||
public static PropertyIdValue propertyIdValue = Datamodel.makeWikidataPropertyIdValue("P2302");
|
||||
public static Value propertyValue = MockConstraintFetcher.conflictsWithStatementValue;
|
||||
|
||||
public static ItemIdValue entityIdValue = Datamodel.makeWikidataItemIdValue("Q52004125");
|
||||
public static PropertyIdValue itemParameterPID = Datamodel.makeWikidataPropertyIdValue("P2305");
|
||||
public static Value itemValue = Datamodel.makeWikidataItemIdValue("Q29934218");
|
||||
public static Value allowedValue = Datamodel.makeWikidataItemIdValue("Q29934200");
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public EditScrutinizer getScrutinizer() {
|
||||
@ -17,13 +41,49 @@ public class EntityTypeScrutinizerTest extends StatementScrutinizerTest {
|
||||
|
||||
@Test
|
||||
public void testAllowed() {
|
||||
scrutinize(TestingData.generateStatement(qid, qid));
|
||||
ItemIdValue idA = TestingData.existingId;
|
||||
|
||||
ValueSnak mainValueSnak = Datamodel.makeValueSnak(propertyIdValue, propertyValue);
|
||||
Statement statement = new StatementImpl("P2302", mainValueSnak, idA);
|
||||
|
||||
ItemUpdate update = new ItemUpdateBuilder(idA).addStatement(statement).build();
|
||||
|
||||
Snak qualifierSnak = Datamodel.makeValueSnak(itemParameterPID, itemValue);
|
||||
List<Snak> qualifierSnakList = Collections.singletonList(qualifierSnak);
|
||||
SnakGroup qualifierSnakGroup = Datamodel.makeSnakGroup(qualifierSnakList);
|
||||
List<SnakGroup> snakGroupList = Collections.singletonList(qualifierSnakGroup);
|
||||
List<Statement> statementList = constraintParameterStatementList(entityIdValue, snakGroupList);
|
||||
|
||||
ConstraintFetcher fetcher = mock(ConstraintFetcher.class);
|
||||
when(fetcher.getConstraintsByType(propertyIdValue,"Q52004125")).thenReturn(statementList);
|
||||
when(fetcher.findValues(snakGroupList, "P2305")).thenReturn(Collections.singletonList(allowedValue));
|
||||
setFetcher(fetcher);
|
||||
|
||||
scrutinize(update);
|
||||
assertNoWarningRaised();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDisallowed() {
|
||||
scrutinize(TestingData.generateStatement(qid, MockConstraintFetcher.propertyOnlyPid, qid));
|
||||
ItemIdValue idA = TestingData.existingId;
|
||||
|
||||
ValueSnak mainValueSnak = Datamodel.makeValueSnak(propertyIdValue, propertyValue);
|
||||
Statement statement = new StatementImpl("P2302", mainValueSnak, idA);
|
||||
|
||||
ItemUpdate update = new ItemUpdateBuilder(idA).addStatement(statement).build();
|
||||
|
||||
Snak qualifierSnak = Datamodel.makeValueSnak(itemParameterPID, itemValue);
|
||||
List<Snak> qualifierSnakList = Collections.singletonList(qualifierSnak);
|
||||
SnakGroup qualifierSnakGroup = Datamodel.makeSnakGroup(qualifierSnakList);
|
||||
List<SnakGroup> snakGroupList = Collections.singletonList(qualifierSnakGroup);
|
||||
List<Statement> statementList = constraintParameterStatementList(entityIdValue, snakGroupList);
|
||||
|
||||
ConstraintFetcher fetcher = mock(ConstraintFetcher.class);
|
||||
when(fetcher.getConstraintsByType(propertyIdValue,"Q52004125")).thenReturn(statementList);
|
||||
when(fetcher.findValues(snakGroupList, "P2305")).thenReturn(Collections.singletonList(itemValue));
|
||||
setFetcher(fetcher);
|
||||
|
||||
scrutinize(update);
|
||||
assertWarningsRaised(EntityTypeScrutinizer.type);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user