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