Jeroen De Dauw has submitted this change and it was merged.

Change subject: (bug 48864) json decode value for addQualifier in SetQualifier 
api module
......................................................................


(bug 48864) json decode value for addQualifier in SetQualifier api module

Before this patch, SetQualifier accepted a non-json encoded string
for $params['value'] and failed to handle any json-encoded values
like wikibase-item and time data types.

This makes the module work for adding qualifiers with all data types,
and makes it consistent with the CreateClaim module.

Also updated the test to test for additional data value type.

Change-Id: I6c5f02aec5d87b413f896412d1b8f26dcbb3e895
---
M repo/includes/api/SetQualifier.php
M repo/tests/phpunit/includes/api/SetQualifierTest.php
2 files changed, 20 insertions(+), 13 deletions(-)

Approvals:
  Jeroen De Dauw: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/repo/includes/api/SetQualifier.php 
b/repo/includes/api/SetQualifier.php
index 32a6970..301eecd 100644
--- a/repo/includes/api/SetQualifier.php
+++ b/repo/includes/api/SetQualifier.php
@@ -258,7 +258,7 @@
                $newQualifier = $factory->newSnak(
                        $propertyId,
                        $params['snaktype'],
-                       isset( $params['value'] ) ? $params['value'] : null
+                       isset( $params['value'] ) ? \FormatJson::decode( 
$params['value'], true ) : null
                );
 
                return $qualifiers->addSnak( $newQualifier );
diff --git a/repo/tests/phpunit/includes/api/SetQualifierTest.php 
b/repo/tests/phpunit/includes/api/SetQualifierTest.php
index 012e620..78a0e38 100644
--- a/repo/tests/phpunit/includes/api/SetQualifierTest.php
+++ b/repo/tests/phpunit/includes/api/SetQualifierTest.php
@@ -6,7 +6,6 @@
 use Wikibase\Statement;
 use Wikibase\Claim;
 use Wikibase\EntityId;
-//use Wikibase\Test\ModifyItemBase;
 
 /**
  * Unit tests for the Wikibase\Repo\Api\SetQualifier class.
@@ -101,22 +100,33 @@
         * @return Snak[]
         */
        protected function newQualifierProvider() {
-               $property = \Wikibase\Property::newFromType( 'commonsMedia' );
-               $content = new \Wikibase\PropertyContent( $property );
-               $status = $content->save( '', null, EDIT_NEW );
+               $properties = array();
 
-               $this->assertTrue( $status->isOK() );
+               $property1 = \Wikibase\Property::newFromType( 'commonsMedia' );
+               $properties[] = $property1;
+
+               $property2 = \Wikibase\Property::newFromType( 'wikibase-item' );
+               $properties[] = $property2;
+
+               foreach( $properties as $property ) {
+                       $content = new \Wikibase\PropertyContent( $property );
+                       $status = $content->save( '', null, EDIT_NEW );
+
+                       $this->assertTrue( $status->isOK() );
+               }
 
                return array(
                        new \Wikibase\PropertySomeValueSnak( 1 ),
                        new \Wikibase\PropertyNoValueSnak( 1 ),
-                       new \Wikibase\PropertyValueSnak( $property->getId(), 
new \DataValues\StringValue( 'new qualifier' ) ),
+                       new \Wikibase\PropertyValueSnak( $property1->getId(), 
new \DataValues\StringValue( 'new qualifier' ) ),
+                       new \Wikibase\PropertyValueSnak( $property2->getId(), 
new EntityId( Item::ENTITY_TYPE, 802 ) ),
                );
        }
 
        public function testRequests() {
-               foreach ( $this->claimProvider() as $claim ) {
+               foreach( $this->claimProvider() as $claim ) {
                        $item = \Wikibase\Item::newEmpty();
+                       $item->setId( new EntityId( Item::ENTITY_TYPE, 802 ) );
                        $content = new \Wikibase\ItemContent( $item );
                        $content->save( '', null, EDIT_NEW );
 
@@ -145,11 +155,8 @@
                );
 
                if ( $qualifier instanceof \Wikibase\PropertyValueSnak ) {
-                       $params['value'] = 
$qualifier->getDataValue()->getArrayValue();
-
-                       if ( is_array( $params['value'] ) ) {
-                               $params['value'] = \FormatJson::encode( 
$params['value'] );
-                       }
+                       $dataValue = $qualifier->getDataValue();
+                       $params['value'] = \FormatJson::encode( 
$dataValue->getArrayValue() );
                }
 
                $this->makeValidRequest( $params );

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

Gerrit-MessageType: merged
Gerrit-Change-Id: I6c5f02aec5d87b413f896412d1b8f26dcbb3e895
Gerrit-PatchSet: 4
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aude <[email protected]>
Gerrit-Reviewer: Aude <[email protected]>
Gerrit-Reviewer: Daniel Kinzler <[email protected]>
Gerrit-Reviewer: Denny Vrandecic <[email protected]>
Gerrit-Reviewer: Jeroen De Dauw <[email protected]>
Gerrit-Reviewer: Tobias Gritschacher <[email protected]>
Gerrit-Reviewer: jenkins-bot

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

Reply via email to