jenkins-bot has submitted this change and it was merged. (
https://gerrit.wikimedia.org/r/405293 )
Change subject: Check “difference within range” on qualifiers and references
......................................................................
Check “difference within range” on qualifiers and references
To implement this, we can simply use Context::getSnakGroup(), since
the semantics of that method are to ignore deprecated statements, just
like DiffWithinRangeChecker also used to do.
Bug: T175565
Change-Id: I21c4b0ec82baf461b38aca0022db3fbf70ebb651
---
M src/ConstraintCheck/Checker/DiffWithinRangeChecker.php
M tests/phpunit/Checker/RangeChecker/DiffWithinRangeCheckerTest.php
2 files changed, 50 insertions(+), 15 deletions(-)
Approvals:
jenkins-bot: Verified
Thiemo Kreuz (WMDE): Looks good to me, approved
diff --git a/src/ConstraintCheck/Checker/DiffWithinRangeChecker.php
b/src/ConstraintCheck/Checker/DiffWithinRangeChecker.php
index 1b25f17..de4e80d 100644
--- a/src/ConstraintCheck/Checker/DiffWithinRangeChecker.php
+++ b/src/ConstraintCheck/Checker/DiffWithinRangeChecker.php
@@ -61,9 +61,8 @@
public function getSupportedContextTypes() {
return [
Context::TYPE_STATEMENT =>
CheckResult::STATUS_COMPLIANCE,
- // TODO T175565
- Context::TYPE_QUALIFIER => CheckResult::STATUS_TODO,
- Context::TYPE_REFERENCE => CheckResult::STATUS_TODO,
+ Context::TYPE_QUALIFIER =>
CheckResult::STATUS_COMPLIANCE,
+ Context::TYPE_REFERENCE =>
CheckResult::STATUS_COMPLIANCE,
];
}
@@ -73,9 +72,8 @@
public function getDefaultContextTypes() {
return [
Context::TYPE_STATEMENT,
- // TODO T175565
- // Context::TYPE_QUALIFIER,
- // Context::TYPE_REFERENCE,
+ Context::TYPE_QUALIFIER,
+ Context::TYPE_REFERENCE,
];
}
@@ -156,19 +154,15 @@
list( $min, $max, $property, $parameters ) =
$this->parseConstraintParameters( $constraint );
// checks only the first occurrence of the referenced property
(this constraint implies a single value constraint on that property)
- /** @var Statement $otherStatement */
- foreach ( $context->getEntity()->getStatements() as
$otherStatement ) {
- $otherMainSnak = $otherStatement->getMainSnak();
-
+ foreach ( $context->getSnakGroup() as $otherSnak ) {
if (
- !$property->equals(
$otherStatement->getPropertyId() ) ||
- $otherStatement->getRank() ===
Statement::RANK_DEPRECATED ||
- !$otherMainSnak instanceof PropertyValueSnak
+ !$property->equals( $otherSnak->getPropertyId()
) ||
+ !$otherSnak instanceof PropertyValueSnak
) {
continue;
}
- $subtrahend = $otherMainSnak->getDataValue();
+ $subtrahend = $otherSnak->getDataValue();
if ( $subtrahend->getType() === $minuend->getType() ) {
$diff = $this->rangeInYears( $min, $max ) ?
$this->rangeCheckerHelper->getDifferenceInYears( $minuend, $subtrahend ) :
@@ -183,7 +177,7 @@
$message->rawParams(
$this->constraintParameterRenderer->formatEntityId(
$context->getSnak()->getPropertyId(), Role::PREDICATE ),
$this->constraintParameterRenderer->formatDataValue( $minuend, Role::OBJECT ),
-
$this->constraintParameterRenderer->formatEntityId(
$otherStatement->getPropertyId(), Role::PREDICATE ),
+
$this->constraintParameterRenderer->formatEntityId(
$otherSnak->getPropertyId(), Role::PREDICATE ),
$this->constraintParameterRenderer->formatDataValue( $subtrahend, Role::OBJECT )
);
if ( $min !== null ) {
diff --git a/tests/phpunit/Checker/RangeChecker/DiffWithinRangeCheckerTest.php
b/tests/phpunit/Checker/RangeChecker/DiffWithinRangeCheckerTest.php
index afe2459..acb6c6a 100644
--- a/tests/phpunit/Checker/RangeChecker/DiffWithinRangeCheckerTest.php
+++ b/tests/phpunit/Checker/RangeChecker/DiffWithinRangeCheckerTest.php
@@ -5,7 +5,11 @@
use DataValues\TimeValue;
use DataValues\UnboundedQuantityValue;
use Wikibase\DataModel\Entity\PropertyId;
+use Wikibase\DataModel\Reference;
+use Wikibase\DataModel\ReferenceList;
+use Wikibase\DataModel\Snak\PropertySomeValueSnak;
use Wikibase\DataModel\Snak\PropertyValueSnak;
+use Wikibase\DataModel\Snak\SnakList;
use Wikibase\DataModel\Statement\Statement;
use Wikibase\Lib\Units\CSVUnitStorage;
use Wikibase\Lib\Units\UnitConverter;
@@ -14,6 +18,8 @@
use WikibaseQuality\ConstraintReport\Constraint;
use
WikibaseQuality\ConstraintReport\ConstraintCheck\Checker\DiffWithinRangeChecker;
use WikibaseQuality\ConstraintReport\ConstraintCheck\Context\MainSnakContext;
+use WikibaseQuality\ConstraintReport\ConstraintCheck\Context\QualifierContext;
+use WikibaseQuality\ConstraintReport\ConstraintCheck\Context\ReferenceContext;
use WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\RangeCheckerHelper;
use WikibaseQuality\ConstraintReport\Tests\ConstraintParameters;
use WikibaseQuality\ConstraintReport\Tests\ResultAssertions;
@@ -508,6 +514,41 @@
$this->assertViolation( $checkResult,
'wbqc-violation-message-diff-within-range-rightopen' );
}
+ public function testDiffWithinRangeConstraint_Qualifier() {
+ $qualifier1 = new PropertyValueSnak( new PropertyId( 'P569' ),
self::$t1900 );
+ $qualifier2 = new PropertyValueSnak( new PropertyId( 'P570' ),
self::$t1970 );
+ $statement = new Statement(
+ new PropertySomeValueSnak( new PropertyId( 'P10' ) ),
+ new SnakList( [ $qualifier1, $qualifier2 ] ),
+ null,
+ 'Q1$c5f1968c-c8f9-4edd-9f2d-f12c93cd8b2b'
+ );
+ $entity = NewItem::withStatement( $statement )->build();
+ $constraint = $this->getConstraintMock(
$this->dob0to150Parameters );
+
+ $checkResult = $this->checker->checkConstraint( new
QualifierContext( $entity, $statement, $qualifier2 ), $constraint );
+
+ $this->assertCompliance( $checkResult );
+ }
+
+ public function testDiffWithinRangeConstraint_Reference() {
+ $snak1 = new PropertyValueSnak( new PropertyId( 'P569' ),
self::$t2000 );
+ $snak2 = new PropertyValueSnak( new PropertyId( 'P570' ),
self::$t1970 );
+ $reference = new Reference( [ $snak1, $snak2 ] );
+ $statement = new Statement(
+ new PropertySomeValueSnak( new PropertyId( 'P10' ) ),
+ null,
+ new ReferenceList( [ $reference ] ),
+ 'Q1$80a5fb6c-8b14-4f18-a60e-2c853d5dfbd1'
+ );
+ $entity = NewItem::withStatement( $statement )->build();
+ $constraint = $this->getConstraintMock(
$this->dob0to150Parameters );
+
+ $checkResult = $this->checker->checkConstraint( new
ReferenceContext( $entity, $statement, $reference, $snak2 ), $constraint );
+
+ $this->assertViolation( $checkResult,
'wbqc-violation-message-diff-within-range' );
+ }
+
public function testDiffWithinRangeConstraintDeprecatedStatement() {
$statement = NewStatement::noValueFor( 'P1' )
->withDeprecatedRank()
--
To view, visit https://gerrit.wikimedia.org/r/405293
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I21c4b0ec82baf461b38aca0022db3fbf70ebb651
Gerrit-PatchSet: 5
Gerrit-Project: mediawiki/extensions/WikibaseQualityConstraints
Gerrit-Branch: master
Gerrit-Owner: Lucas Werkmeister (WMDE) <[email protected]>
Gerrit-Reviewer: Thiemo Kreuz (WMDE) <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits