Skip to content

Commit

Permalink
Add missing Item and PropertyPatcher tests
Browse files Browse the repository at this point in the history
  • Loading branch information
thiemowmde committed May 13, 2016
1 parent e429fad commit b159eb7
Show file tree
Hide file tree
Showing 2 changed files with 125 additions and 4 deletions.
78 changes: 77 additions & 1 deletion tests/unit/Diff/ItemPatcherTest.php
Expand Up @@ -5,18 +5,23 @@
use Diff\DiffOp\Diff\Diff;
use Diff\DiffOp\DiffOpAdd;
use Diff\DiffOp\DiffOpChange;
use Diff\DiffOp\DiffOpRemove;
use PHPUnit_Framework_TestCase;
use Wikibase\DataModel\Services\Diff\ItemDiff;
use Wikibase\DataModel\Services\Diff\ItemPatcher;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\Property;
use Wikibase\DataModel\SiteLink;
use Wikibase\DataModel\Snak\PropertyNoValueSnak;
use Wikibase\DataModel\Statement\Statement;

/**
* @covers Wikibase\DataModel\Services\Diff\ItemPatcher
*
* @license GPL-2.0+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class ItemPatcherTest extends \PHPUnit_Framework_TestCase {
class ItemPatcherTest extends PHPUnit_Framework_TestCase {

public function testGivenEmptyDiff_itemIsReturnedAsIs() {
$item = new Item();
Expand Down Expand Up @@ -77,4 +82,75 @@ public function testPatchesLabels() {
);
}

public function testDescriptionsArePatched() {
$property = new Item();
$property->setDescription( 'en', 'foo' );
$property->setDescription( 'de', 'bar' );

$patch = new ItemDiff( array(
'description' => new Diff( array(
'en' => new DiffOpChange( 'foo', 'spam' ),
'nl' => new DiffOpAdd( 'baz' ),
) ),
) );

$patcher = new ItemPatcher();
$patcher->patchEntity( $property, $patch );

$this->assertSame( array(
'en' => 'spam',
'de' => 'bar',
'nl' => 'baz',
), $property->getFingerprint()->getDescriptions()->toTextArray() );
}

public function testStatementsArePatched() {
$removedStatement = new Statement( new PropertyNoValueSnak( 1 ), null, null, 's1' );
$addedStatement = new Statement( new PropertyNoValueSnak( 2 ), null, null, 's2' );

$item = new Item();
$item->getStatements()->addStatement( $removedStatement );

$patch = new ItemDiff( array(
'claim' => new Diff( array(
's1' => new DiffOpRemove( $removedStatement ),
's2' => new DiffOpAdd( $addedStatement ),
) ),
) );

$expected = new Item();
$expected->getStatements()->addStatement( $addedStatement );

$patcher = new ItemPatcher();
$patcher->patchEntity( $item, $patch );
$this->assertTrue( $expected->equals( $item ) );
}

public function testSiteLinksArePatched() {
$removedSiteLink = new SiteLink( 'rewiki', 'Removed' );
$addedSiteLink = new SiteLink( 'adwiki', 'Added' );

$item = new Item();
$item->getSiteLinkList()->addSiteLink( $removedSiteLink );

$patch = new ItemDiff( array(
'links' => new Diff( array(
'rewiki' => new Diff( array(
'name' => new DiffOpRemove( 'Removed' ),
) ),
'adwiki' => new Diff( array(
'name' => new DiffOpAdd( 'Added' ),
'badges' => new Diff(),
) ),
) ),
) );

$expected = new Item();
$expected->getSiteLinkList()->addSiteLink( $addedSiteLink );

$patcher = new ItemPatcher();
$patcher->patchEntity( $item, $patch );
$this->assertTrue( $expected->equals( $item ) );
}

}
51 changes: 48 additions & 3 deletions tests/unit/Diff/PropertyPatcherTest.php
Expand Up @@ -4,7 +4,9 @@

use Diff\DiffOp\Diff\Diff;
use Diff\DiffOp\DiffOpAdd;
use Diff\DiffOp\DiffOpChange;
use Diff\DiffOp\DiffOpRemove;
use PHPUnit_Framework_TestCase;
use Wikibase\DataModel\Services\Diff\EntityDiff;
use Wikibase\DataModel\Services\Diff\PropertyPatcher;
use Wikibase\DataModel\Entity\Item;
Expand All @@ -18,7 +20,7 @@
* @license GPL-2.0+
* @author Jeroen De Dauw < jeroendedauw@gmail.com >
*/
class PropertyPatcherTest extends \PHPUnit_Framework_TestCase {
class PropertyPatcherTest extends PHPUnit_Framework_TestCase {

public function testGivenEmptyDiff_itemIsReturnedAsIs() {
$property = Property::newFromType( 'kittens' );
Expand Down Expand Up @@ -55,6 +57,50 @@ public function testGivenNonItem_exceptionIsThrown() {
$patcher->patchEntity( new Item(), new EntityDiff() );
}

public function testLabelsArePatched() {
$property = Property::newFromType( 'string' );
$property->setLabel( 'en', 'foo' );
$property->setLabel( 'de', 'bar' );

$patch = new EntityDiff( array(
'label' => new Diff( array(
'en' => new DiffOpChange( 'foo', 'spam' ),
'nl' => new DiffOpAdd( 'baz' ),
) ),
) );

$patcher = new PropertyPatcher();
$patcher->patchEntity( $property, $patch );

$this->assertSame( array(
'en' => 'spam',
'de' => 'bar',
'nl' => 'baz',
), $property->getFingerprint()->getLabels()->toTextArray() );
}

public function testDescriptionsArePatched() {
$property = Property::newFromType( 'string' );
$property->setDescription( 'en', 'foo' );
$property->setDescription( 'de', 'bar' );

$patch = new EntityDiff( array(
'description' => new Diff( array(
'en' => new DiffOpChange( 'foo', 'spam' ),
'nl' => new DiffOpAdd( 'baz' ),
) ),
) );

$patcher = new PropertyPatcher();
$patcher->patchEntity( $property, $patch );

$this->assertSame( array(
'en' => 'spam',
'de' => 'bar',
'nl' => 'baz',
), $property->getFingerprint()->getDescriptions()->toTextArray() );
}

public function testStatementsArePatched() {
$s1337 = new Statement( new PropertyNoValueSnak( 1337 ) );
$s1337->setGuid( 's1337' );
Expand All @@ -70,8 +116,7 @@ public function testStatementsArePatched() {
's42' => new DiffOpRemove( $s42 ),
's23' => new DiffOpAdd( $s23 ),
) )
)
);
) );

$property = Property::newFromType( 'kittens' );
$property->getStatements()->addStatement( $s1337 );
Expand Down

0 comments on commit b159eb7

Please sign in to comment.