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