Henning Snater has uploaded a new change for review.

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


Change subject: Implemented index in SetReference API module
......................................................................

Implemented index in SetReference API module

Change-Id: Id64230e5e156506b37a2b2c56c7a9260ca252824
---
M lib/resources/wikibase.RepoApi/wikibase.AbstractedRepoApi.js
M lib/resources/wikibase.RepoApi/wikibase.RepoApi.js
M repo/includes/api/SetReference.php
M repo/tests/phpunit/includes/api/SetReferenceTest.php
4 files changed, 86 insertions(+), 11 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase 
refs/changes/99/88999/1

diff --git a/lib/resources/wikibase.RepoApi/wikibase.AbstractedRepoApi.js 
b/lib/resources/wikibase.RepoApi/wikibase.AbstractedRepoApi.js
index 5f0eacf..9b684fd 100644
--- a/lib/resources/wikibase.RepoApi/wikibase.AbstractedRepoApi.js
+++ b/lib/resources/wikibase.RepoApi/wikibase.AbstractedRepoApi.js
@@ -68,7 +68,7 @@
        },
 
        /**
-        * Will set a new Reference for a Statement.
+        * Adds a new or updates an existing Reference of a Statement.
         *
         * @since 0.4
         *
@@ -77,13 +77,15 @@
         * @param {number} baseRevId
         * @param {string} [referenceHash] A hash of the reference that should 
be updated.
         *        If not provided, a new reference is created.
+        * @param {number} [index] The new reference's index. Only needs to be 
specified if the
+        *        reference's index within the list of all the statement's 
references shall be changed.
         * @return {jQuery.Promise} If resolved, this will get a wb.Reference 
object as first parameter
         *         and the last base revision as second parameter.
         */
-       setReference: function( statementGuid, snaks, baseRevId, referenceHash 
) {
+       setReference: function( statementGuid, snaks, baseRevId, referenceHash, 
index ) {
                var snakJson = snaks.toJSON();
                return this._abstract(
-                       this._repoApi.setReference( statementGuid, snakJson, 
baseRevId, referenceHash ),
+                       this._repoApi.setReference( statementGuid, snakJson, 
baseRevId, referenceHash, index ),
                        function( result ) {
                                return [
                                        wb.Reference.newFromJSON( 
result.reference ),
diff --git a/lib/resources/wikibase.RepoApi/wikibase.RepoApi.js 
b/lib/resources/wikibase.RepoApi/wikibase.RepoApi.js
index 020976d..a8a729c 100644
--- a/lib/resources/wikibase.RepoApi/wikibase.RepoApi.js
+++ b/lib/resources/wikibase.RepoApi/wikibase.RepoApi.js
@@ -335,7 +335,7 @@
        },
 
        /**
-        * Will set a new Reference for a Statement.
+        * Adds a new or updates an existing Reference of a Statement.
         *
         * @since 0.4
         *
@@ -344,14 +344,17 @@
         * @param {number} baseRevId
         * @param {string} [referenceHash] A hash of the reference that should 
be updated.
         *        If not provided, a new reference is created.
+        * @param {number} [index] The new reference's index. Only needs to be 
specified if the
+        *        reference's index within the list of all the statement's 
references shall be changed.
         * @return {jQuery.Promise}
         */
-       setReference: function( statementGuid, snaks, baseRevId, referenceHash 
) {
+       setReference: function( statementGuid, snaks, baseRevId, referenceHash, 
index ) {
                var params = {
                        action: 'wbsetreference',
                        statement: statementGuid,
                        snaks: $.toJSON( snaks ),
-                       baserevid: baseRevId
+                       baserevid: baseRevId,
+                       index: index
                };
 
                if( referenceHash ) {
diff --git a/repo/includes/api/SetReference.php 
b/repo/includes/api/SetReference.php
index ae0aaf5..11f61e0 100644
--- a/repo/includes/api/SetReference.php
+++ b/repo/includes/api/SetReference.php
@@ -191,7 +191,13 @@
                $idFormatter = 
WikibaseRepo::getDefaultInstance()->getIdFormatter();
 
                if ( isset( $params['reference'] ) ) {
-                       $changeOp = new ChangeOpReference( $claimGuid, 
$reference, $params['reference'], $idFormatter );
+                       $changeOp = new ChangeOpReference(
+                               $claimGuid,
+                               $reference,
+                               $params['reference'],
+                               $idFormatter,
+                               $params['index']
+                       );
                } else {
                        $changeOp = new ChangeOpReference( $claimGuid, 
$reference, '', $idFormatter );
                }
@@ -240,6 +246,9 @@
                                'reference' => array(
                                        ApiBase::PARAM_TYPE => 'string',
                                ),
+                               'index' => array(
+                                       ApiBase::PARAM_TYPE => 'integer',
+                               ),
                        ),
                        parent::getAllowedParams()
                );
diff --git a/repo/tests/phpunit/includes/api/SetReferenceTest.php 
b/repo/tests/phpunit/includes/api/SetReferenceTest.php
index 9c00b76..30da997 100644
--- a/repo/tests/phpunit/includes/api/SetReferenceTest.php
+++ b/repo/tests/phpunit/includes/api/SetReferenceTest.php
@@ -2,8 +2,13 @@
 
 namespace Wikibase\Test\Api;
 
+use Wikibase\Item;
+use Wikibase\ItemContent;
 use Wikibase\PropertyContent;
+use Wikibase\PropertyNoValueSnak;
+use Wikibase\PropertySomeValueSnak;
 use Wikibase\Reference;
+use Wikibase\SnakList;
 
 /**
  * Unit tests for the Wikibase\ApiSetReference class.
@@ -116,17 +121,60 @@
                );
        }
 
+       public function testSettingIndex() {
+               $item = Item::newEmpty();
+               $content = new ItemContent( $item );
+               $content->save( '', null, EDIT_NEW );
+
+               // Create a statement to act upon:
+               $statement = $item->newClaim( new PropertyNoValueSnak( 42 ) );
+               $statement->setGuid(
+                       $item->getId()->getPrefixedId() . 
'$D8505CDA-25E4-4334-AG93-A3290BCD9C0P'
+               );
+
+               // Pre-fill statement with three references:
+               $references = array(
+                       new Reference( new SnakList( array( new 
PropertySomeValueSnak( 1 ) ) ) ),
+                       new Reference( new SnakList( array( new 
PropertySomeValueSnak( 2 ) ) ) ),
+                       new Reference( new SnakList( array( new 
PropertySomeValueSnak( 3 ) ) ) ),
+               );
+
+               foreach( $references as $reference ) {
+                       $statement->getReferences()->addReference( $reference );
+               }
+
+               $item->addClaim( $statement );
+
+               $content->save( '' );
+
+               $this->makeValidRequest(
+                       $statement->getGuid(),
+                       $references[2]->getHash(),
+                       $references[2],
+                       0
+               );
+
+               $this->assertEquals( $statement->getReferences()->indexOf( 
$references[0] ), 0 );
+       }
+
        /**
         * @param string|null $statementGuid
         * @param string $referenceHash
         * @param Reference|array $reference Reference object or serialized 
reference
+        * @param int|null $index
+        *
         * @return array Serialized reference
         */
-       protected function makeValidRequest( $statementGuid, $referenceHash, 
$reference ) {
+       protected function makeValidRequest( $statementGuid, $referenceHash, 
$reference, $index = null ) {
                $serializedReference = $this->serializeReference( $reference );
                $reference = $this->unserializeReference( $reference );
 
-               $params = $this->generateRequestParams( $statementGuid, 
$referenceHash, $serializedReference );
+               $params = $this->generateRequestParams(
+                       $statementGuid,
+                       $referenceHash,
+                       $serializedReference,
+                       $index
+               );
 
                list( $resultArray, ) = $this->doApiRequestWithToken( $params );
 
@@ -195,16 +243,29 @@
         * @param string $statementGuid
         * @param string $referenceHash
         * @param array $serializedReference
+        * @param int|null $index
+        *
         * @return array
         */
-       protected function generateRequestParams( $statementGuid, 
$referenceHash, $serializedReference ) {
-               return array(
+       protected function generateRequestParams(
+               $statementGuid,
+               $referenceHash,
+               $serializedReference,
+               $index = null
+       ) {
+               $params = array(
                        'action' => 'wbsetreference',
                        'statement' => $statementGuid,
                        'reference' => $referenceHash,
                        'snaks' => \FormatJson::encode( 
$serializedReference['snaks'] ),
                        'snaks-order' => \FormatJson::encode( 
$serializedReference['snaks-order'] ),
                );
+
+               if( !is_null( $index ) ) {
+                       $params['index'] = $index;
+               }
+
+               return $params;
        }
 
        /**

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Id64230e5e156506b37a2b2c56c7a9260ca252824
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Henning Snater <[email protected]>

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

Reply via email to