diff --git a/src/ConstraintCheck/Checker/RangeChecker.php b/src/ConstraintCheck/Checker/RangeChecker.php index e9a7dd48..7d500249 100644 --- a/src/ConstraintCheck/Checker/RangeChecker.php +++ b/src/ConstraintCheck/Checker/RangeChecker.php @@ -3,10 +3,13 @@ namespace WikibaseQuality\ConstraintReport\ConstraintCheck\Checker; use DataValues\DataValue; +use DataValues\TimeValue; use Wikibase\DataModel\Entity\PropertyId; use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookup; use Wikibase\DataModel\Snak\PropertyValueSnak; use WikibaseQuality\ConstraintReport\Constraint; +use WikibaseQuality\ConstraintReport\ConstraintCheck\Cache\DependencyMetadata; +use WikibaseQuality\ConstraintReport\ConstraintCheck\Cache\Metadata; use WikibaseQuality\ConstraintReport\ConstraintCheck\ConstraintChecker; use WikibaseQuality\ConstraintReport\ConstraintCheck\Context\Context; use WikibaseQuality\ConstraintReport\ConstraintCheck\Helper\ConstraintParameterException; @@ -133,7 +136,18 @@ public function checkConstraint( Context $context, Constraint $constraint ) { $status = CheckResult::STATUS_COMPLIANCE; } - return new CheckResult( $context, $constraint, $parameters, $status, $message ); + if ( + $dataValue instanceof TimeValue && + ( $min instanceof NowValue || $max instanceof NowValue ) && + $this->rangeCheckerHelper->isFutureTime( $dataValue ) + ) { + $dependencyMetadata = DependencyMetadata::ofFutureTime( $dataValue ); + } else { + $dependencyMetadata = DependencyMetadata::blank(); + } + + return ( new CheckResult( $context, $constraint, $parameters, $status, $message ) ) + ->withMetadata( Metadata::ofDependencyMetadata( $dependencyMetadata ) ); } /** diff --git a/tests/phpunit/Checker/RangeChecker/RangeCheckerTest.php b/tests/phpunit/Checker/RangeChecker/RangeCheckerTest.php index b116e8d2..2edf5ec0 100644 --- a/tests/phpunit/Checker/RangeChecker/RangeCheckerTest.php +++ b/tests/phpunit/Checker/RangeChecker/RangeCheckerTest.php @@ -128,6 +128,7 @@ public function testRangeConstraintTimeWithinRange() { $checkResult = $this->checker->checkConstraint( new FakeSnakContext( $snak ), $constraint ); $this->assertCompliance( $checkResult ); + $this->assertNull( $checkResult->getMetadata()->getDependencyMetadata()->getFutureTime() ); } public function testRangeConstraintTimeWithinRangeToNow() { @@ -137,6 +138,7 @@ public function testRangeConstraintTimeWithinRangeToNow() { $checkResult = $this->checker->checkConstraint( new FakeSnakContext( $snak ), $constraint ); $this->assertCompliance( $checkResult ); + $this->assertNull( $checkResult->getMetadata()->getDependencyMetadata()->getFutureTime() ); } public function testRangeConstraintTimeWithinYearRange() { @@ -311,6 +313,9 @@ public function testRangeConstraintOutsideClosedRangeToNow() { $checkResult = $this->checker->checkConstraint( new FakeSnakContext( $snak ), $constraint ); $this->assertViolation( $checkResult, 'wbqc-violation-message-range-time-closed-rightnow' ); + $futureTime = $checkResult->getMetadata()->getDependencyMetadata()->getFutureTime(); + $this->assertNotNull( $futureTime ); + $this->assertSame( $misspelledNineteenEightyFour->getTime(), $futureTime->getTime() ); } public function testRangeConstraintOutsideOpenRangeToNow() { @@ -328,6 +333,9 @@ public function testRangeConstraintOutsideOpenRangeToNow() { $checkResult = $this->checker->checkConstraint( new FakeSnakContext( $snak ), $constraint ); $this->assertViolation( $checkResult, 'wbqc-violation-message-range-time-leftopen-rightnow' ); + $futureTime = $checkResult->getMetadata()->getDependencyMetadata()->getFutureTime(); + $this->assertNotNull( $futureTime ); + $this->assertSame( $misspelledNineteenEightyFour->getTime(), $futureTime->getTime() ); } public function testRangeConstraintOutsideClosedRangeFromNow() { @@ -351,6 +359,7 @@ public function testRangeConstraintOutsideClosedRangeFromNow() { $checkResult = $this->checker->checkConstraint( new FakeSnakContext( $snak ), $constraint ); $this->assertViolation( $checkResult, 'wbqc-violation-message-range-time-closed-leftnow' ); + $this->assertNull( $checkResult->getMetadata()->getDependencyMetadata()->getFutureTime() ); } public function testRangeConstraintOutsideOpenRangeFromNow() { @@ -368,6 +377,7 @@ public function testRangeConstraintOutsideOpenRangeFromNow() { $checkResult = $this->checker->checkConstraint( new FakeSnakContext( $snak ), $constraint ); $this->assertViolation( $checkResult, 'wbqc-violation-message-range-time-rightopen-leftnow' ); + $this->assertNull( $checkResult->getMetadata()->getDependencyMetadata()->getFutureTime() ); } public function testRangeConstraintDeprecatedStatement() {