Jonaskeutel has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/212537

Change subject: save parameters in violation
......................................................................

save parameters in violation

enabling us to display nice messages and distinguish bad bad and very bad
violations for the UI

Change-Id: Ib07d4f38acdc92c68671c746a28eb71810f22f64
---
M includes/ConstraintCheck/Checker/CommonsLinkChecker.php
M includes/ConstraintCheck/Checker/ConflictsWithChecker.php
M includes/ConstraintCheck/Checker/DiffWithinRangeChecker.php
M includes/ConstraintCheck/Checker/FormatChecker.php
M includes/ConstraintCheck/Checker/InverseChecker.php
M includes/ConstraintCheck/Checker/ItemChecker.php
M includes/ConstraintCheck/Checker/MandatoryQualifiersChecker.php
M includes/ConstraintCheck/Checker/MultiValueChecker.php
M includes/ConstraintCheck/Checker/OneOfChecker.php
M includes/ConstraintCheck/Checker/QualifierChecker.php
M includes/ConstraintCheck/Checker/QualifiersChecker.php
M includes/ConstraintCheck/Checker/RangeChecker.php
M includes/ConstraintCheck/Checker/SingleValueChecker.php
M includes/ConstraintCheck/Checker/SymmetricChecker.php
M includes/ConstraintCheck/Checker/TargetRequiredClaimChecker.php
M includes/ConstraintCheck/Checker/TypeChecker.php
M includes/ConstraintCheck/Checker/UniqueValueChecker.php
M includes/ConstraintCheck/Checker/ValueTypeChecker.php
M includes/ConstraintCheck/Result/CheckResultToViolationTranslator.php
M tests/phpunit/Result/CheckResultToViolationTranslatorTest.php
20 files changed, 103 insertions(+), 7 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikidataQualityConstraints
 refs/changes/37/212537/1

diff --git a/includes/ConstraintCheck/Checker/CommonsLinkChecker.php 
b/includes/ConstraintCheck/Checker/CommonsLinkChecker.php
index 33a57fb..3ca6d8e 100755
--- a/includes/ConstraintCheck/Checker/CommonsLinkChecker.php
+++ b/includes/ConstraintCheck/Checker/CommonsLinkChecker.php
@@ -47,7 +47,13 @@
        public function checkConstraint( Statement $statement, Constraint 
$constraint, Entity $entity = null ) {
                $parameters = array ();
                $constraintParameters = $constraint->getConstraintParameters();
-               $parameters[ 'namespace' ] = 
$this->helper->parseSingleParameter( $constraintParameters['namespace'], true );
+               if ( array_key_exists( 'namespace', $constraintParameters ) ) {
+                       $parameters[ 'namespace' ] = 
$this->helper->parseSingleParameter( $constraintParameters['namespace'], true );
+               }
+
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
 
                $mainSnak = $statement->getClaim()->getMainSnak();
 
diff --git a/includes/ConstraintCheck/Checker/ConflictsWithChecker.php 
b/includes/ConstraintCheck/Checker/ConflictsWithChecker.php
index a39027d..883a2cc 100755
--- a/includes/ConstraintCheck/Checker/ConflictsWithChecker.php
+++ b/includes/ConstraintCheck/Checker/ConflictsWithChecker.php
@@ -77,6 +77,10 @@
                        $parameters[ 'item' ] = 
$this->constraintReportHelper->parseParameterArray( explode( ',', 
$constraintParameters[ 'item' ] ) );
                };
 
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                /*
                 * 'Conflicts with' can be defined with
                 *   a) a property only
diff --git a/includes/ConstraintCheck/Checker/DiffWithinRangeChecker.php 
b/includes/ConstraintCheck/Checker/DiffWithinRangeChecker.php
index 50c8083..23417a7 100755
--- a/includes/ConstraintCheck/Checker/DiffWithinRangeChecker.php
+++ b/includes/ConstraintCheck/Checker/DiffWithinRangeChecker.php
@@ -59,6 +59,10 @@
                        $parameters['property'] = 
$this->constraintReportHelper->parseSingleParameter( 
$constraintParameters['property'], 'PropertyId' );
                }
 
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $mainSnak = $statement->getClaim()->getMainSnak();
 
                /*
diff --git a/includes/ConstraintCheck/Checker/FormatChecker.php 
b/includes/ConstraintCheck/Checker/FormatChecker.php
index 279cb6d..78e3d40 100755
--- a/includes/ConstraintCheck/Checker/FormatChecker.php
+++ b/includes/ConstraintCheck/Checker/FormatChecker.php
@@ -55,6 +55,10 @@
                        return new CheckResult( $statement, 
$constraint->getConstraintTypeQid(), $parameters, 
CheckResult::STATUS_VIOLATION, $message );
                }
 
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $mainSnak = $statement->getClaim()->getMainSnak();
 
                /*
diff --git a/includes/ConstraintCheck/Checker/InverseChecker.php 
b/includes/ConstraintCheck/Checker/InverseChecker.php
index 820e931..3adaa49 100755
--- a/includes/ConstraintCheck/Checker/InverseChecker.php
+++ b/includes/ConstraintCheck/Checker/InverseChecker.php
@@ -70,6 +70,10 @@
                        $parameters['property'] = 
$this->constraintReportHelper->parseSingleParameter( 
$constraintParameters['property'] );
                };
 
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $mainSnak = $statement->getClaim()->getMainSnak();
 
                /*
diff --git a/includes/ConstraintCheck/Checker/ItemChecker.php 
b/includes/ConstraintCheck/Checker/ItemChecker.php
index c1caa7d..9103d2c 100755
--- a/includes/ConstraintCheck/Checker/ItemChecker.php
+++ b/includes/ConstraintCheck/Checker/ItemChecker.php
@@ -76,6 +76,10 @@
                        $parameters['item'] = 
$this->constraintReportHelper->parseParameterArray( $items );
                }
 
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                /*
                 * error handling:
                 *   parameter $property must not be null
diff --git a/includes/ConstraintCheck/Checker/MandatoryQualifiersChecker.php 
b/includes/ConstraintCheck/Checker/MandatoryQualifiersChecker.php
index 350a7dc..c55a8f7 100755
--- a/includes/ConstraintCheck/Checker/MandatoryQualifiersChecker.php
+++ b/includes/ConstraintCheck/Checker/MandatoryQualifiersChecker.php
@@ -50,6 +50,11 @@
                if ( array_key_exists( 'property', $constraintParameters ) ) {
                        $properties = explode( ',', 
$constraintParameters['property'] );
                }
+
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $parameters[ 'property' ] = $this->helper->parseParameterArray( 
$properties );
                $qualifiersList = $statement->getQualifiers();
                $qualifiers = array ();
diff --git a/includes/ConstraintCheck/Checker/MultiValueChecker.php 
b/includes/ConstraintCheck/Checker/MultiValueChecker.php
index adb753e..fe351ac 100755
--- a/includes/ConstraintCheck/Checker/MultiValueChecker.php
+++ b/includes/ConstraintCheck/Checker/MultiValueChecker.php
@@ -42,6 +42,11 @@
 
                $parameters = array ();
 
+               $constraintParameters = $constraint->getConstraintParameters();
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $propertyCountArray = 
$this->valueCountCheckerHelper->getPropertyCount( $entity->getStatements() );
 
                if ( $propertyCountArray[ $propertyId->getNumericId() ] <= 1 ) {
diff --git a/includes/ConstraintCheck/Checker/OneOfChecker.php 
b/includes/ConstraintCheck/Checker/OneOfChecker.php
index 395a7b8..1100400 100755
--- a/includes/ConstraintCheck/Checker/OneOfChecker.php
+++ b/includes/ConstraintCheck/Checker/OneOfChecker.php
@@ -51,6 +51,10 @@
                        $parameters['item'] = 
$this->helper->parseParameterArray( $items );
                }
 
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $mainSnak = $statement->getClaim()->getMainSnak();
 
                /*
diff --git a/includes/ConstraintCheck/Checker/QualifierChecker.php 
b/includes/ConstraintCheck/Checker/QualifierChecker.php
index 936de80..cb5abd5 100755
--- a/includes/ConstraintCheck/Checker/QualifierChecker.php
+++ b/includes/ConstraintCheck/Checker/QualifierChecker.php
@@ -44,6 +44,12 @@
         * @return CheckResult
         */
        public function checkConstraint( Statement $statement, Constraint 
$constraint, Entity $entity = null ) {
+
+               $constraintParameters = $constraint->getConstraintParameters();
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $message = 'The property must only be used as a qualifier.';
                return new CheckResult( $statement, 
$constraint->getConstraintTypeQid(), array (), CheckResult::STATUS_VIOLATION, 
$message );
        }
diff --git a/includes/ConstraintCheck/Checker/QualifiersChecker.php 
b/includes/ConstraintCheck/Checker/QualifiersChecker.php
index a226d6a..664d059 100755
--- a/includes/ConstraintCheck/Checker/QualifiersChecker.php
+++ b/includes/ConstraintCheck/Checker/QualifiersChecker.php
@@ -46,6 +46,11 @@
                $parameters = array ();
                $constraintParameters = $constraint->getConstraintParameters();
 
+
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $parameters[ 'property' ] = $this->helper->parseParameterArray( 
explode( ',', $constraintParameters['property'] ) );
 
                /*
diff --git a/includes/ConstraintCheck/Checker/RangeChecker.php 
b/includes/ConstraintCheck/Checker/RangeChecker.php
index ca2301c..229804c 100755
--- a/includes/ConstraintCheck/Checker/RangeChecker.php
+++ b/includes/ConstraintCheck/Checker/RangeChecker.php
@@ -56,6 +56,10 @@
                $parameters = array ();
                $constraintParameters = $constraint->getConstraintParameters();
 
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $mainSnak = $statement->getClaim()->getMainSnak();
 
                /*
diff --git a/includes/ConstraintCheck/Checker/SingleValueChecker.php 
b/includes/ConstraintCheck/Checker/SingleValueChecker.php
index 8718772..1c1ae3a 100755
--- a/includes/ConstraintCheck/Checker/SingleValueChecker.php
+++ b/includes/ConstraintCheck/Checker/SingleValueChecker.php
@@ -42,6 +42,11 @@
 
                $parameters = array ();
 
+               $constraintParameters = $constraint->getConstraintParameters();
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $propertyCountArray = 
$this->valueCountCheckerHelper->getPropertyCount( $entity->getStatements() );
 
                if ( $propertyCountArray[ $propertyId->getNumericId() ] > 1 ) {
diff --git a/includes/ConstraintCheck/Checker/SymmetricChecker.php 
b/includes/ConstraintCheck/Checker/SymmetricChecker.php
index 704179d..49925f5 100755
--- a/includes/ConstraintCheck/Checker/SymmetricChecker.php
+++ b/includes/ConstraintCheck/Checker/SymmetricChecker.php
@@ -64,6 +64,11 @@
        public function checkConstraint( Statement $statement, Constraint 
$constraint, Entity $entity = null ) {
                $parameters = array ();
 
+               $constraintParameters = $constraint->getConstraintParameters();
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $mainSnak = $statement->getClaim()->getMainSnak();
                $propertyId = $statement->getClaim()->getPropertyId();
 
diff --git a/includes/ConstraintCheck/Checker/TargetRequiredClaimChecker.php 
b/includes/ConstraintCheck/Checker/TargetRequiredClaimChecker.php
index 9c6af48..b6cb41f 100755
--- a/includes/ConstraintCheck/Checker/TargetRequiredClaimChecker.php
+++ b/includes/ConstraintCheck/Checker/TargetRequiredClaimChecker.php
@@ -79,6 +79,10 @@
                        $parameters['item'] = 
$this->constraintReportHelper->parseParameterArray( $items );
                }
 
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $mainSnak = $statement->getClaim()->getMainSnak();
 
                /*
diff --git a/includes/ConstraintCheck/Checker/TypeChecker.php 
b/includes/ConstraintCheck/Checker/TypeChecker.php
index 4b02e40..1f80631 100755
--- a/includes/ConstraintCheck/Checker/TypeChecker.php
+++ b/includes/ConstraintCheck/Checker/TypeChecker.php
@@ -78,6 +78,10 @@
                        $parameters['relation'] = 
$this->helper->parseSingleParameter( $relation, true );
                }
 
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                /*
                 * error handling:
                 *   parameter $constraintParameters['class'] must not be null
diff --git a/includes/ConstraintCheck/Checker/UniqueValueChecker.php 
b/includes/ConstraintCheck/Checker/UniqueValueChecker.php
index 95e2460..ff8964d 100755
--- a/includes/ConstraintCheck/Checker/UniqueValueChecker.php
+++ b/includes/ConstraintCheck/Checker/UniqueValueChecker.php
@@ -42,6 +42,11 @@
        public function checkConstraint( Statement $statement, Constraint 
$constraint, Entity $entity = null ) {
                $parameters = array ();
 
+               $constraintParameters = $constraint->getConstraintParameters();
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $message = 'For technical reasons, the check for this 
constraint has not yet been implemented.';
                return new CheckResult( $statement, 
$constraint->getConstraintTypeQid(), $parameters, CheckResult::STATUS_TODO, 
$message );
        }
diff --git a/includes/ConstraintCheck/Checker/ValueTypeChecker.php 
b/includes/ConstraintCheck/Checker/ValueTypeChecker.php
index fe6c007..a3087b1 100755
--- a/includes/ConstraintCheck/Checker/ValueTypeChecker.php
+++ b/includes/ConstraintCheck/Checker/ValueTypeChecker.php
@@ -78,6 +78,11 @@
                        $relation = $constraintParameters['relation'];
                        $parameters['relation'] = 
$this->helper->parseSingleParameter( $relation, true );
                }
+
+               if ( array_key_exists( 'constraint_status', 
$constraintParameters ) ) {
+                       $parameters[ 'constraint_status' ] = 
$this->helper->parseSingleParameter( 
$constraintParameters['constraint_status'], true );
+               }
+
                $mainSnak = $statement->getClaim()->getMainSnak();
 
                /*
diff --git 
a/includes/ConstraintCheck/Result/CheckResultToViolationTranslator.php 
b/includes/ConstraintCheck/Result/CheckResultToViolationTranslator.php
index 07ff873..32171cc 100755
--- a/includes/ConstraintCheck/Result/CheckResultToViolationTranslator.php
+++ b/includes/ConstraintCheck/Result/CheckResultToViolationTranslator.php
@@ -23,6 +23,12 @@
         $this->entityRevisionLookup = $entityRevisionLookup;
     }
 
+    /**
+     * @param Entity $entity
+     * @param CheckResult[] $checkResultOrArray
+     *
+     * @return array
+     */
        public function translateToViolation( Entity $entity, 
$checkResultOrArray ) {
 
            $checkResultArray = $this->setCheckResultArray( $checkResultOrArray 
);
@@ -42,8 +48,8 @@
             $constraintId = $this->setConstraintId( $checkResult, $statement, 
$constraintTypeEntityId );
                        $revisionId = 
$this->entityRevisionLookup->getLatestRevisionId( $entityId );
                        $status = CheckResult::STATUS_VIOLATION;
-
-                       $violationArray[ ] = new Violation( $entityId, 
$propertyId, $claimGuid, $constraintId, $constraintTypeEntityId, $revisionId, 
$status );
+            $parameters = json_encode( $checkResult->getParameters() );
+                       $violationArray[ ] = new Violation( $entityId, 
$propertyId, $claimGuid, $constraintId, $constraintTypeEntityId, $revisionId, 
$status, $parameters );
                }
 
                return $violationArray;
diff --git a/tests/phpunit/Result/CheckResultToViolationTranslatorTest.php 
b/tests/phpunit/Result/CheckResultToViolationTranslatorTest.php
index 007ec9f..76a9190 100644
--- a/tests/phpunit/Result/CheckResultToViolationTranslatorTest.php
+++ b/tests/phpunit/Result/CheckResultToViolationTranslatorTest.php
@@ -27,7 +27,7 @@
  * @author BP2014N1
  * @license GNU GPL v2+
  */
-class CheckResultTestToViolationTranslator extends \MediaWikiTestCase {
+class CheckResultTestToViolationTranslatorTest extends \MediaWikiTestCase {
 
     /**
      * @var CheckResultToViolationTranslator
@@ -81,7 +81,7 @@
                $this->propertyId =  new PropertyId( 'P1' );
                $this->claimGuid = 'P1$aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee';
                $this->statement->setGuid( 
'P1$aaaaaaaa-bbbb-cccc-dddd-eeeeeeeeeeee' );
-               $this->constraintName = 'Range';
+               $this->constraintName = 'Single value';
                $this->parameters = array ();
                $this->message = 'All right';
                $this->entity = new Item();
@@ -106,7 +106,7 @@
                $this->assertEquals( array (), $violations );
        }
 
-       public function testSingleViolationResult() {
+       public function testSingleViolationResultWithoutParameter() {
                $checkResult = new CheckResult( $this->statement, 
$this->constraintName, $this->parameters, 'violation', $this->message );
                $violations = $this->translator->translateToViolation( 
$this->entity, $checkResult );
                $this->assertEquals( 1, sizeof( $violations ) );
@@ -117,8 +117,15 @@
                $this->assertEquals( $this->statement->getGuid(), 
$violation->getClaimGuid() );
                $this->assertEquals( md5( $this->statement->getGuid() . 
$checkResult->getConstraintName() ), $violation->getConstraintId() );
                $this->assertEquals( $checkResult->getConstraintName(), 
$violation->getConstraintTypeEntityId() );
-        $this->assertEquals( 42, $violation->getRevisionId() );
+               $this->assertEquals( 42, $violation->getRevisionId() );
+               $this->assertEquals( '[]', $violation->getAdditionalInfo() );
+       }
 
+       public function testSingleViolationResultWithParameter() {
+               $checkResult = new CheckResult( $this->statement, 
$this->constraintName, array( array( 'constraint_status' => 'mandatory' ) ), 
'violation', $this->message );
+               $violations = $this->translator->translateToViolation( 
$this->entity, $checkResult );
+               $violation = $violations[0];
+               $this->assertEquals( '[{"constraint_status":"mandatory"}]', 
$violation->getAdditionalInfo() );
        }
 
        public function testMultipleCheckResults() {

-- 
To view, visit https://gerrit.wikimedia.org/r/212537
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib07d4f38acdc92c68671c746a28eb71810f22f64
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikidataQualityConstraints
Gerrit-Branch: master
Gerrit-Owner: Jonaskeutel <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to