| Current File : /home/jvzmxxx/wiki/extensions/Wikibase/lib/tests/phpunit/Store/HashSiteLinkStoreTest.php |
<?php
namespace Wikibase\Test;
use Wikibase\DataModel\Entity\Item;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\SiteLink;
use Wikibase\Lib\Store\HashSiteLinkStore;
/**
* @covers Wikibase\Lib\Store\HashSiteLinkStore
*
* @group Wikibase
* @group WikibaseLib
* @group WikibaseStore
*
* @license GPL-2.0+
* @author Daniel Kinzler
* @author Katie Filbert < aude.wiki@gmail.com >
*/
class HashSiteLinkStoreTest extends \PHPUnit_Framework_TestCase {
public function testGetItemIdForLink() {
$itemId = new ItemId( 'Q900' );
$item = new Item( $itemId );
$item->getSiteLinkList()->addNewSiteLink( 'enwiki', 'Foo' );
$siteLinkStore = new HashSiteLinkStore();
$siteLinkStore->saveLinksOfItem( $item );
$this->assertEquals( $itemId, $siteLinkStore->getItemIdForLink( 'enwiki', 'Foo' ) );
$this->assertNull( $siteLinkStore->getItemIdForLink( 'xywiki', 'Foo' ) );
}
public function provideGetLinks() {
$cases = array();
$item1 = new Item( new ItemId( 'Q1' ) );
$item1->getSiteLinkList()->addNewSiteLink( 'enwiki', 'Foo' );
$item1->getSiteLinkList()->addNewSiteLink( 'dewiki', 'Bar' );
$item2 = new Item( new ItemId( 'Q2' ) );
$item2->getSiteLinkList()->addNewSiteLink( 'enwiki', 'Bar' );
$item2->getSiteLinkList()->addNewSiteLink( 'dewiki', 'Xoo' );
$items = array( $item1, $item2 );
// #0: all ---------
$cases[] = array(
$items,
array(), // items
array(), // sites
array(), // pages
array( // expected
array( 'enwiki', 'Foo', 1 ),
array( 'dewiki', 'Bar', 1 ),
array( 'enwiki', 'Bar', 2 ),
array( 'dewiki', 'Xoo', 2 ),
)
);
// #1: mismatch ---------
$cases[] = array(
$items,
array(), // items
array( 'enwiki' ), // sites
array( 'Xoo' ), // pages
array() // expected
);
// #2: by item ---------
$cases[] = array(
$items,
array( 1 ), // items
array(), // sites
array(), // pages
array( // expected
array( 'enwiki', 'Foo', 1 ),
array( 'dewiki', 'Bar', 1 ),
)
);
// #3: by site ---------
$cases[] = array(
$items,
array(), // items
array( 'enwiki' ), // sites
array(), // pages
array( // expected
array( 'enwiki', 'Foo', 1 ),
array( 'enwiki', 'Bar', 2 ),
)
);
// #4: by page ---------
$cases[] = array(
$items,
array(), // items
array(), // sites
array( 'Bar' ), // pages
array( // expected
array( 'dewiki', 'Bar', 1 ),
array( 'enwiki', 'Bar', 2 ),
)
);
// #5: by site and page ---------
$cases[] = array(
$items,
array(), // items
array( 'dewiki' ), // sites
array( 'Bar' ), // pages
array( // expected
array( 'dewiki', 'Bar', 1 ),
)
);
return $cases;
}
/**
* @dataProvider provideGetLinks
*/
public function testGetLinks( array $items, array $itemIds, array $sites, array $pages, array $expectedLinks ) {
$siteLinkStore = new HashSiteLinkStore();
foreach ( $items as $item ) {
$siteLinkStore->saveLinksOfItem( $item );
}
$this->assertEquals( $expectedLinks, $siteLinkStore->getLinks( $itemIds, $sites, $pages ) );
}
public function testGetSiteLinksForItem() {
$item = new Item( new ItemId( 'Q1' ) );
$item->getSiteLinkList()->addNewSiteLink( 'dewiki', 'Xoo' );
$item->getSiteLinkList()->addNewSiteLink( 'enwiki', 'Foo' );
$siteLinkStore = new HashSiteLinkStore();
$siteLinkStore->saveLinksOfItem( $item );
// check link retrieval
$this->assertEquals(
array(
new SiteLink( 'dewiki', 'Xoo' ),
new SiteLink( 'enwiki', 'Foo' ),
),
$siteLinkStore->getSiteLinksForItem( $item->getId() )
);
// check links of unknown id
$this->assertEmpty( $siteLinkStore->getSiteLinksForItem( new ItemId( 'Q123' ) ) );
}
public function testGetItemIdForSiteLink() {
$itemId = new ItemId( 'Q11' );
$siteLink = new SiteLink( 'eswiki', 'Cerveza' );
$item = new Item( $itemId );
$item->getSiteLinkList()->addSiteLink( $siteLink );
$siteLinkStore = new HashSiteLinkStore();
$siteLinkStore->saveLinksOfItem( $item );
$this->assertEquals( $itemId, $siteLinkStore->getItemIdForSiteLink( $siteLink ) );
}
public function testDeleteLinksOfItem() {
$itemId = new ItemId( 'Q111' );
$siteLink = new SiteLink( 'eswiki', 'Gato' );
$item = new Item( $itemId );
$item->getSiteLinkList()->addSiteLink( $siteLink );
$siteLinkStore = new HashSiteLinkStore();
$siteLinkStore->saveLinksOfItem( $item );
$this->assertEquals( $itemId, $siteLinkStore->getItemIdForSiteLink( $siteLink ) );
$siteLinkStore->deleteLinksOfItem( $itemId );
$this->assertEmpty(
$siteLinkStore->getSiteLinksForItem( $itemId ),
'get by item id'
);
$this->assertNull(
$siteLinkStore->getItemIdForSiteLink( $siteLink ),
'get by site link'
);
}
}