| Current File : /home/jvzmxxx/wiki/extensions/Wikibase/lib/tests/phpunit/Store/CachingSiteLinkLookupTest.php |
<?php
namespace Wikibase\Test;
use HashBagOStuff;
use PHPUnit_Framework_TestCase;
use Wikibase\DataModel\Entity\ItemId;
use Wikibase\DataModel\SiteLink;
use Wikibase\Lib\Store\CachingSiteLinkLookup;
use Wikibase\Lib\Store\SiteLinkLookup;
/**
* @covers Wikibase\Lib\Store\CachingSiteLinkLookup
*
* @group WikibaseLib
* @group WikibaseStore
* @group Wikibase
*
* @license GPL-2.0+
* @author Marius Hoch < hoo@online.de >
*/
class CachingSiteLinkLookupTest extends PHPUnit_Framework_TestCase {
public function testGetItemIdForLink_cacheHit() {
$cache = new HashBagOStuff();
$cache->set( 'wikibase:sitelinks-by-page:foowiki:bar', 'Q42' );
$cachingSiteLinkLookup = new CachingSiteLinkLookup(
$this->getMock( SiteLinkLookup::class ),
$cache
);
$this->assertSame(
'Q42',
$cachingSiteLinkLookup->getItemIdForLink( 'foowiki', 'bar' )->getSerialization()
);
}
public function testGetItemIdForLink_cacheMiss() {
$cache = new HashBagOStuff();
$lookup = $this->getMock( SiteLinkLookup::class );
$lookup->expects( $this->once() )
->method( 'getItemIdForLink' )
->with( 'foowiki', 'bar' )
->will( $this->returnValue( new ItemId( 'Q42' ) ) );
$cachingSiteLinkLookup = new CachingSiteLinkLookup(
$lookup,
$cache
);
$this->assertSame(
'Q42',
$cachingSiteLinkLookup->getItemIdForLink( 'foowiki', 'bar' )->getSerialization()
);
// Make sure the new value also made it into the cache
$this->assertSame(
'Q42',
$cache->get( 'wikibase:sitelinks-by-page:foowiki:bar' )
);
}
public function testGetItemIdForSiteLink_cacheHit() {
$siteLink = new SiteLink( 'foowiki', 'bar' );
$cache = new HashBagOStuff();
$cache->set( 'wikibase:sitelinks-by-page:foowiki:bar', 'Q42' );
$cachingSiteLinkLookup = new CachingSiteLinkLookup(
$this->getMock( SiteLinkLookup::class ),
$cache
);
$this->assertSame(
'Q42',
$cachingSiteLinkLookup->getItemIdForSiteLink( $siteLink )->getSerialization()
);
}
public function testGetItemIdForSiteLink_cacheMiss() {
$siteLink = new SiteLink( 'foowiki', 'bar' );
$cache = new HashBagOStuff();
$lookup = $this->getMock( SiteLinkLookup::class );
$lookup->expects( $this->once() )
->method( 'getItemIdForLink' )
->with( 'foowiki', 'bar' )
->will( $this->returnValue( new ItemId( 'Q42' ) ) );
$cachingSiteLinkLookup = new CachingSiteLinkLookup(
$lookup,
$cache
);
$this->assertSame(
'Q42',
$cachingSiteLinkLookup->getItemIdForSiteLink( $siteLink )->getSerialization()
);
// Make sure the new value also made it into the cache
$this->assertSame(
'Q42',
$cache->get( 'wikibase:sitelinks-by-page:foowiki:bar' )
);
}
public function testGetSiteLinksForItem_cacheHit() {
$siteLinks = array( new SiteLink( 'foowiki', 'bar' ) );
$cache = new HashBagOStuff();
$cache->set( 'wikibase:sitelinks:Q42', $siteLinks );
$cachingSiteLinkLookup = new CachingSiteLinkLookup(
$this->getMock( SiteLinkLookup::class ),
$cache
);
$this->assertSame(
$siteLinks,
$cachingSiteLinkLookup->getSiteLinksForItem( new ItemId( 'Q42' ) )
);
}
public function testGetSiteLinksForItem_cacheMiss() {
$siteLinks = array( new SiteLink( 'foowiki', 'bar' ) );
$q42 = new ItemId( 'Q42' );
$cache = new HashBagOStuff();
$lookup = $this->getMock( SiteLinkLookup::class );
$lookup->expects( $this->once() )
->method( 'getSiteLinksForItem' )
->with( $q42 )
->will( $this->returnValue( $siteLinks ) );
$cachingSiteLinkLookup = new CachingSiteLinkLookup( $lookup, $cache );
$this->assertSame(
$siteLinks,
$cachingSiteLinkLookup->getSiteLinksForItem( new ItemId( 'Q42' ) )
);
// Make sure the new value also made it into the cache
$this->assertSame( $siteLinks, $cache->get( 'wikibase:sitelinks:Q42' ) );
}
public function testGetLinks() {
// getLinks is a simple pass through
$lookup = $this->getMock( SiteLinkLookup::class );
$lookup->expects( $this->once() )
->method( 'getLinks' )
->with( array( 1 ), array( 'a' ), array( 'b' ) )
->will( $this->returnValue( 'bar' ) );
$cachingSiteLinkLookup = new CachingSiteLinkLookup( $lookup, new HashBagOStuff() );
$this->assertSame(
'bar',
$cachingSiteLinkLookup->getLinks( array( 1 ), array( 'a' ), array( 'b' ) )
);
}
}