Aude has uploaded a new change for review.
https://gerrit.wikimedia.org/r/170342
Change subject: Add test case for statements on property in ChangeOps
......................................................................
Add test case for statements on property in ChangeOps
ChangeOpClaim and ChangeOpClaimTest are a terrible mess
that needs further refactoring.
this just adds a test case for bug 72671, which is
fatal error when trying to add statements to properties.
Change-Id: Idfe2bd9a329b473610919ca2f3ac3e1ea9873988
---
M repo/tests/phpunit/includes/ChangeOp/ChangeOpClaimTest.php
1 file changed, 60 insertions(+), 29 deletions(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Wikibase
refs/changes/42/170342/1
diff --git a/repo/tests/phpunit/includes/ChangeOp/ChangeOpClaimTest.php
b/repo/tests/phpunit/includes/ChangeOp/ChangeOpClaimTest.php
index 7d6d8e8..c8e71fe 100644
--- a/repo/tests/phpunit/includes/ChangeOp/ChangeOpClaimTest.php
+++ b/repo/tests/phpunit/includes/ChangeOp/ChangeOpClaimTest.php
@@ -14,12 +14,14 @@
use Wikibase\DataModel\Entity\EntityId;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\ItemId;
+use Wikibase\DataModel\Entity\Property;
use Wikibase\DataModel\Entity\PropertyId;
use Wikibase\DataModel\Reference;
use Wikibase\DataModel\ReferenceList;
use Wikibase\DataModel\Snak\PropertyNoValueSnak;
use Wikibase\DataModel\Snak\PropertySomeValueSnak;
use Wikibase\DataModel\Snak\PropertyValueSnak;
+use Wikibase\DataModel\Snak\Snak;
use Wikibase\DataModel\Snak\SnakList;
use Wikibase\DataModel\Statement\Statement;
use Wikibase\Lib\ClaimGuidGenerator;
@@ -81,9 +83,10 @@
public function provideTestApply() {
$itemEmpty = Item::newEmpty();
- $itemEmpty->setId( new ItemId( 'q888' ) );
- $item777 = self::makeNewItemWithStatement( 'Q777', new
PropertyNoValueSnak( 45 ) );
- $item666 = self::makeNewItemWithStatement( 'Q666', new
PropertySomeValueSnak( 44 ) );
+ $itemEmpty->setId( new ItemId( 'Q888' ) );
+
+ $item777 = $this->makeNewItemWithStatement( 'Q777', new
PropertyNoValueSnak( 45 ) );
+ $item666 = $this->makeNewItemWithStatement( 'Q666', new
PropertySomeValueSnak( 44 ) );
$item777Statements = $item777->getClaims();
$item666Statements = $item666->getClaims();
@@ -91,16 +94,18 @@
$statement777 = reset( $item777Statements );
$statement666 = reset( $item666Statements );
- //claims that exist on the given entities
+ // claims that exist on the given entities
$statements[0] = new Statement( new Claim( new
PropertyNoValueSnak( 43 ) ) );
$statements[777] = clone $statement777;
$statements[666] = clone $statement666;
- //claims with a null guid
+
+ // claims with a null guid
$statements[7770] = clone $statement777;
$statements[7770]->setGuid( null );
$statements[6660] = clone $statement666;
$statements[6660]->setGuid( null );
- //new claims not yet on the entity
+
+ // new claims not yet on the entity
$statements[7777] = clone $statement777;
$statements[7777]->setGuid(
'Q777$D8404CDA-25E4-4334-AF13-A3290BC77777' );
$statements[6666] = clone $statement666;
@@ -114,29 +119,49 @@
$statements[13]->setGuid(
'Q666$D8404CDA-25E4-4334-AF13-A3290BC66613' );
$args = array();
- //test adding claims with guids from other items(these
shouldn't be added)
+
+ // test adding claims with guids from other items(these
shouldn't be added)
$args[] = array( $itemEmpty, $statements[666], false );
$args[] = array( $itemEmpty, $statements[777], false );
$args[] = array( $item666, $statements[777], false );
$args[] = array( $item777, $statements[666], false );
- //test adding the same claims with a null guid (a guid should
be created)
+
+ // test adding the same claims with a null guid (a guid should
be created)
$args[] = array( $item777, $statements[7770], array(
$statements[777], $statements[7770] ) );
$args[] = array( $item666, $statements[6660], array(
$statements[666], $statements[6660] ) );
- //test adding the same claims with a correct but different guid
(these should be added)
+
+ // test adding the same claims with a correct but different
guid (these should be added)
$args[] = array( $item777, $statements[7777], array(
$statements[777], $statements[7770], $statements[7777] ) );
$args[] = array( $item666, $statements[6666], array(
$statements[666], $statements[6660], $statements[6666] ) );
- //test adding the same claims with and id that already exists
(these shouldn't be added)
+
+ // test adding the same claims with and id that already exists
(these shouldn't be added)
$args[] = array( $item777, $statements[7777], array(
$statements[777], $statements[7770], $statements[7777] ) );
$args[] = array( $item666, $statements[6666], array(
$statements[666], $statements[6660], $statements[6666] ) );
+
// test adding a claim at a specific index
$args[] = array( $item777, $statements[0], array(
$statements[0], $statements[777], $statements[7770], $statements[7777] ), 0 );
+
// test moving a claim
$args[] = array( $item666, $statements[6666], array(
$statements[666], $statements[6666], $statements[6660] ), 1 );
+
// test adding a claim featuring another property id within the
boundaries of claims the
// same property
$args[] = array( $item666, $statements[11], array(
$statements[666], $statements[6666], $statements[6660], $statements[11] ), 1 );
+
// test moving a subset of claims featuring the same property
$args[] = array( $item666, $statements[12], array(
$statements[12], $statements[11], $statements[666], $statements[6666],
$statements[6660] ), 0 );
+
+ // test statements on properties
+ $property = Property::newEmpty();
+ $property->setId( new PropertyId( 'P73923' ) );
+
+ $newProperty = clone $property;
+ $propertySnak = new PropertyNoValueSnak( 45 );
+ $propertyStatement = new Statement( $this->makeClaim(
$newProperty, $propertySnak ) );
+
+ $newProperty->getStatements()->addStatement( $propertyStatement
);
+
+ $args[] = array( $newProperty, $propertyStatement, 1 );
return $args;
}
@@ -210,20 +235,11 @@
$this->mockProvider->getMockSnakValidator()
) );
- //TODO: once we stop allowing user-generated GUIDs for new
claims, test this below.
- // apply change to an unknown claim
- /*
- $wrongClaimId = $item->getId()->getSerialization() .
'$DEADBEEF-DEAD-BEEF-DEAD-BEEFDEADBEEF';
- $badClaim = clone $newClaim;
- $badClaim->setGuid( $wrongClaimId );
- $args['unknown claim'] = array ( $item, new ChangeOpClaim(
$badClaim, $guidGenerator ) );
- */
-
// update an existing claim with wrong main snak property
$newSnak = new PropertyNoValueSnak( 23452345 );
$newStatement->setMainSnak( $newSnak );
- $changeOp = new ChangeOpClaim(
+ $changeOp = new ChangeOpClaim(
$newStatement,
$this->mockProvider->getGuidGenerator(),
$this->mockProvider->getMockGuidValidator(),
@@ -247,24 +263,39 @@
/**
* @param integer $itemId
- * @param $snak
+ * @param Snak $snak
* @return Item
*/
- protected function makeNewItemWithStatement( $itemId, $snak ) {
+ private function makeNewItemWithStatement( $itemId, Snak $snak ) {
$item = Item::newEmpty();
$item->setId( new ItemId( $itemId ) );
- $statement = $item->newClaim( $snak );
- $guidGenerator = new ClaimGuidGenerator();
- $statement->setGuid( $guidGenerator->newGuid( $item->getId() )
);
-
- $claims = new Claims();
- $claims->addClaim( $statement );
- $item->setClaims( $claims );
+ $this->addClaimsToEntity( $item, $snak );
return $item;
}
+ /**
+ * @param Entity $entity
+ */
+ private function makeClaim( Entity $entity, Snak $snak ) {
+ $claim = $entity->newClaim( $snak );
+ $guidGenerator = new ClaimGuidGenerator();
+ $claim->setGuid( $guidGenerator->newGuid( $entity->getId() ) );
+
+ return $claim;
+ }
+
+ /**
+ * @param Entity $entity
+ * @param Snak $snak
+ */
+ private function addClaimsToEntity( Entity $entity, Snak $snak ) {
+ $claim = $this->makeClaim( $entity, $snak );
+
+ $entity->getStatements()->addStatement( new Statement( $claim )
);
+ }
+
public function validateProvider() {
$p11 = new PropertyId( 'P11' );
$q17 = new ItemId( 'Q17' );
--
To view, visit https://gerrit.wikimedia.org/r/170342
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: Idfe2bd9a329b473610919ca2f3ac3e1ea9873988
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aude <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits