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) <lucas.werkmeis...@wikimedia.de>
Gerrit-Reviewer: Thiemo Kreuz (WMDE) <thiemo.kr...@wikimedia.de>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to