Lucas Werkmeister (WMDE) has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/395590 )

Change subject: Add tests for 
WikibaseQualityConstraintsHooks::isConstraintStatementsChange
......................................................................

Add tests for WikibaseQualityConstraintsHooks::isConstraintStatementsChange

To make the tests possible, the method is slightly refactored to get its
Config injected (so the tests don’t use the real installation’s config),
and it’s also made public so the tests can access it.

Most of the negative test cases are taken from Wikibase Lib’s own tests,
but some negative test cases and all of the positive test cases have to
be constructed more manually. (But at least we can still use the given
EntityChangeFactory.)

Bug: T182110
Change-Id: Icd6182bded426617ef401f19a801a9df3ac7fcf3
---
M WikibaseQualityConstraintsHooks.php
A tests/phpunit/WikibaseQualityConstraintsHooksTest.php
2 files changed, 118 insertions(+), 5 deletions(-)


  git pull 
ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/WikibaseQualityConstraints
 refs/changes/90/395590/1

diff --git a/WikibaseQualityConstraintsHooks.php 
b/WikibaseQualityConstraintsHooks.php
index 9970f27..3178edc 100644
--- a/WikibaseQualityConstraintsHooks.php
+++ b/WikibaseQualityConstraintsHooks.php
@@ -2,6 +2,7 @@
 
 namespace WikibaseQuality\ConstraintReport;
 
+use Config;
 use DatabaseUpdater;
 use JobQueueGroup;
 use JobSpecification;
@@ -35,8 +36,9 @@
        }
 
        public static function onWikibaseChange( Change $change ) {
-               if ( MediaWikiServices::getInstance()->getMainConfig()->get( 
'WBQualityConstraintsEnableConstraintsImportFromStatements' ) &&
-                       self::isConstraintStatementsChange( $change )
+               $config = MediaWikiServices::getInstance()->getMainConfig();
+               if ( $config->get( 
'WBQualityConstraintsEnableConstraintsImportFromStatements' ) &&
+                       self::isConstraintStatementsChange( $config, $change )
                ) {
                        /** @var EntityChange $change */
                        $title = Title::newMainPage();
@@ -47,7 +49,7 @@
                }
        }
 
-       private static function isConstraintStatementsChange( Change $change ) {
+       public static function isConstraintStatementsChange( Config $config, 
Change $change ) {
                if ( !( $change instanceof EntityChange ) ||
                         $change->getAction() !== EntityChange::UPDATE ||
                         !( $change->getEntityId() instanceof PropertyId )
@@ -66,8 +68,7 @@
                /** @var EntityDiffChangedAspects $aspects */
                $aspects = $info['compactDiff'];
 
-               $propertyConstraintId = 
MediaWikiServices::getInstance()->getMainConfig()
-                       ->get( 'WBQualityConstraintsPropertyConstraintId' );
+               $propertyConstraintId = $config->get( 
'WBQualityConstraintsPropertyConstraintId' );
                return in_array( $propertyConstraintId, 
$aspects->getStatementChanges() );
        }
 
diff --git a/tests/phpunit/WikibaseQualityConstraintsHooksTest.php 
b/tests/phpunit/WikibaseQualityConstraintsHooksTest.php
new file mode 100644
index 0000000..60a75f6
--- /dev/null
+++ b/tests/phpunit/WikibaseQualityConstraintsHooksTest.php
@@ -0,0 +1,112 @@
+<?php
+
+namespace WikibaseQuality\ConstraintReport\Tests;
+use Diff\DiffOpFactory;
+use Wikibase\Change;
+use Wikibase\DataModel\Entity\BasicEntityIdParser;
+use Wikibase\DataModel\Entity\Property;
+use Wikibase\DataModel\Entity\PropertyId;
+use Wikibase\DataModel\Services\Diff\EntityDiff;
+use Wikibase\DataModel\Services\Diff\EntityDiffer;
+use Wikibase\DataModel\Snak\SnakList;
+use Wikibase\EntityChange;
+use Wikibase\Lib\Changes\EntityChangeFactory;
+use Wikibase\Lib\Changes\EntityDiffChangedAspectsFactory;
+use Wikibase\Lib\Tests\Changes\TestChanges;
+use Wikibase\Repo\Tests\NewStatement;
+use WikibaseQuality\ConstraintReport\WikibaseQualityConstraintsHooks;
+
+/**
+ * @covers \WikibaseQualityConstraintsHooks
+ *
+ * @group WikibaseQualityConstraints
+ *
+ * @author Lucas Werkmeister
+ * @license GNU GPL v2+
+ */
+class WikibaseQualityConstraintsHooksTest extends \PHPUnit_Framework_TestCase {
+
+       use DefaultConfig;
+
+       /**
+        * @dataProvider isConstraintStatementsChangeProvider
+        * @param Change $change
+        * @param bool $expected
+        */
+       public function testIsConstraintStatementsChange( Change $change, 
$expected ) {
+               $actual = 
WikibaseQualityConstraintsHooks::isConstraintStatementsChange(
+                       $this->getDefaultConfig(),
+                       $change
+               );
+               $this->assertSame( $expected, $actual );
+       }
+
+       public function isConstraintStatementsChangeProvider() {
+               $factory = TestChanges::getEntityChangeFactory();
+               $changes = TestChanges::getChanges();
+               $changeKeys = [];
+
+               // changes on items
+               $changeKeys += [
+                       'item-creation',
+                       'set-dewiki-sitelink',
+                       'change-sitelink-order',
+                       'set-en-aliases',
+                       'add-claim',
+                       'remove-claim',
+               ];
+
+               // changes on properties not affecting the statements
+               $changeKeys += [
+                       'property-creation',
+                       'property-set-label',
+               ];
+
+               foreach ( $changeKeys as $changeKey ) {
+                       yield $changeKey => [ $changes[$changeKey], false ];
+               }
+
+               // (TestChanges doesn’t have pre-defined changes for the 
following)
+               $new = new Property( new PropertyId( 'P1' ), null, 'string' );
+               $old = $new->copy();
+
+               // changes on properties affecting non-constraint statements
+               $new->getStatements()->addStatement( NewStatement::noValueFor( 
'P1' )->build() );
+               $change = $factory->newFromUpdate( EntityChange::UPDATE, $old, 
$new );
+               yield 'property-add-claim' => [ $change, false ];
+               $old = $new->copy();
+
+               $new->getStatements()->clear();
+               $change = $factory->newFromUpdate( EntityChange::UPDATE, $old, 
$new );
+               yield 'property-remove-claim' => [ $change, false ];
+               $old = $new->copy();
+
+               // changes on properties affecting constraint statements
+               $p2302 = $this->getDefaultConfig()->get( 
'WBQualityConstraintsPropertyConstraintId' );
+               $statement = NewStatement::noValueFor( $p2302 )->build();
+               $new->getStatements()->addStatement( $statement );
+               $change = $factory->newFromUpdate( EntityChange::UPDATE, $old, 
$new );
+               yield 'property-add-constraint' => [ $change, true ];
+               $old = $new->copy();
+
+               $parameter = NewStatement::noValueFor( 'P1' 
)->build()->getMainSnak();
+               $statement->setQualifiers( new SnakList( [ $parameter ] ) );
+               $change = $factory->newFromUpdate( EntityChange::UPDATE, $old, 
$new );
+               yield 'property-add-constraint-parameter' => [ $change, true ];
+               $old = $new->copy();
+
+               $statement->setQualifiers( new SnakList() );
+               $change = $factory->newFromUpdate( EntityChange::UPDATE, $old, 
$new );
+               yield 'property-remove-constraint-parameter' => [ $change, true 
];
+               $old = $new->copy();
+
+               $new->getStatements()->addStatement(
+                       NewStatement::noValueFor( $p2302 )
+                               ->withSomeGuid()
+                               ->build()
+               );
+               $change = $factory->newFromUpdate( EntityChange::UPDATE, $old, 
$new );
+               yield 'property-copy-constraint' => [ $change, true ];
+       }
+
+}

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Icd6182bded426617ef401f19a801a9df3ac7fcf3
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/WikibaseQualityConstraints
Gerrit-Branch: master
Gerrit-Owner: Lucas Werkmeister (WMDE) <[email protected]>

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

Reply via email to