Henning Snater has uploaded a new change for review.
https://gerrit.wikimedia.org/r/88997
Change subject: Implemented index in ChangeOpReference
......................................................................
Implemented index in ChangeOpReference
(requires change I38031e6eae6bed107241e4a9c34a67c7c7abee13)
ChangeOpReference supports specifying the index of a Reference within the list
of References.
Change-Id: I0941d1227c873a0d84a1d486d036644874ec1fb1
---
M repo/includes/ChangeOp/ChangeOpReference.php
M repo/tests/phpunit/includes/changeop/ChangeOpReferenceTest.php
2 files changed, 55 insertions(+), 7 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/97/88997/1
diff --git a/repo/includes/ChangeOp/ChangeOpReference.php
b/repo/includes/ChangeOp/ChangeOpReference.php
index 05f9510..01d2fd9 100644
--- a/repo/includes/ChangeOp/ChangeOpReference.php
+++ b/repo/includes/ChangeOp/ChangeOpReference.php
@@ -51,6 +51,13 @@
protected $idFormatter;
/**
+ * @since 0.5
+ *
+ * @var int|null
+ */
+ protected $index;
+
+ /**
* Constructs a new reference change operation
*
* @since 0.4
@@ -59,10 +66,17 @@
* @param Reference|null $reference
* @param string $referenceHash
* @param EntityIdFormatter $idFormatter
+ * @param int|null $index
*
* @throws \InvalidArgumentException
*/
- public function __construct( $claimGuid, $reference, $referenceHash,
EntityIdFormatter $idFormatter ) {
+ public function __construct(
+ $claimGuid,
+ $reference,
+ $referenceHash,
+ EntityIdFormatter $idFormatter,
+ $index = null
+ ) {
if ( !is_string( $claimGuid ) || $claimGuid === '' ) {
throw new InvalidArgumentException( '$claimGuid needs
to be a string and must not be empty' );
}
@@ -79,10 +93,15 @@
throw new InvalidArgumentException( 'Either
$referenceHash or $reference needs to be set' );
}
+ if( !is_null( $index ) && !is_integer( $index ) ) {
+ throw new InvalidArgumentException( '$index needs to be
null or an integer value' );
+ }
+
$this->claimGuid = $claimGuid;
$this->reference = $reference;
$this->referenceHash = $referenceHash;
$this->idFormatter = $idFormatter;
+ $this->index = $index;
}
/**
@@ -155,11 +174,16 @@
if ( !$references->hasReferenceHash( $this->referenceHash ) ) {
throw new ChangeOpException( "Reference with hash
$this->referenceHash does not exist" );
}
- if ( $references->hasReference( $this->reference ) ) {
- throw new ChangeOpException( "Claim has already a
reference with hash {$this->reference->getHash()}" );
+
+ $currentIndex = $references->indexOf( $this->reference );
+ $indexMatch = is_null( $this->index ) || $currentIndex ===
$this->index;
+
+ if ( $references->hasReference( $this->reference ) &&
$indexMatch ) {
+ throw new ChangeOpException( "Claim has already a
reference with hash "
+ . "{$this->reference->getHash()} and index
($currentIndex) is not changed" );
}
$references->removeReferenceHash( $this->referenceHash );
- $references->addReference( $this->reference );
+ $references->addReference( $this->reference, $this->index );
$this->updateSummary( $summary, 'set' );
}
diff --git a/repo/tests/phpunit/includes/changeop/ChangeOpReferenceTest.php
b/repo/tests/phpunit/includes/changeop/ChangeOpReferenceTest.php
index f572d9a..f0ce242b 100644
--- a/repo/tests/phpunit/includes/changeop/ChangeOpReferenceTest.php
+++ b/repo/tests/phpunit/includes/changeop/ChangeOpReferenceTest.php
@@ -8,6 +8,7 @@
use Wikibase\ItemContent;
use Wikibase\Repo\WikibaseRepo;
use Wikibase\Lib\ClaimGuidGenerator;
+use Wikibase\PropertyNoValueSnak;
use Wikibase\Reference;
use Wikibase\SnakList;
use InvalidArgumentException;
@@ -44,6 +45,7 @@
$args[] = array( $validClaimGuid, 'notAReference',
$validReferenceHash, $validIdFormatter );
$args[] = array( $validClaimGuid, 'notAReference', '',
$validIdFormatter );
$args[] = array( $validClaimGuid, null, '', $validIdFormatter );
+ $args[] = array( $validClaimGuid, $validReference,
$validReferenceHash, $validIdFormatter, 'string' );
return $args;
}
@@ -53,12 +55,11 @@
*
* @expectedException InvalidArgumentException
*/
- public function testInvalidConstruct( $claimGuid, $reference,
$referenceHash, $idFormatter ) {
- $ChangeOpQualifier = new ChangeOpReference( $claimGuid,
$reference, $referenceHash, $idFormatter );
+ public function testInvalidConstruct( $claimGuid, $reference,
$referenceHash, $idFormatter, $index = null ) {
+ new ChangeOpReference( $claimGuid, $reference, $referenceHash,
$idFormatter, $index );
}
public function changeOpAddProvider() {
- $idFormatter =
WikibaseRepo::getDefaultInstance()->getIdFormatter();
$snak = new \Wikibase\PropertyValueSnak( 2754236, new
\DataValues\StringValue( 'test' ) );
$args = array();
@@ -147,6 +148,29 @@
$changeOp = new ChangeOpReference( $claimGuid,
$changedReference, $referenceHash, $idFormatter );
$args[] = array ( $item, $changeOp,
$changedReference->getHash() );
+ // Just change a reference's index:
+ $item = $this->provideNewItemWithClaim( 'q123', $snak );
+ $claims = $item->getClaims();
+
+ $references = array(
+ new Reference( new SnakList( array( new
PropertyNoValueSnak( 1 ) ) ) ),
+ new Reference( new SnakList( array( new
PropertyNoValueSnak( 2 ) ) ) ),
+ );
+
+ $referenceList = $claims[0]->getReferences();
+ $referenceList->addReference( $references[0] );
+ $referenceList->addReference( $references[1] );
+
+ $item->setClaims( new Claims( $claims ) );
+ $changeOp = new ChangeOpReference(
+ $claims[0]->getGuid(),
+ $references[1],
+ $references[1]->getHash(),
+ $idFormatter,
+ 0
+ );
+ $args[] = array ( $item, $changeOp, $references[1]->getHash() );
+
return $args;
}
--
To view, visit https://gerrit.wikimedia.org/r/88997
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I0941d1227c873a0d84a1d486d036644874ec1fb1
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