*/ class CachingSiteStoreTest extends MediaWikiTestCase { /** * @covers CachingSiteStore::getSites */ public function testGetSites() { $testSites = TestSites::getSites(); $store = new CachingSiteStore( $this->getHashSiteStore( $testSites ), wfGetMainCache() ); $sites = $store->getSites(); $this->assertInstanceOf( 'SiteList', $sites ); /** * @var Site $site */ foreach ( $sites as $site ) { $this->assertInstanceOf( 'Site', $site ); } foreach ( $testSites as $site ) { if ( $site->getGlobalId() !== null ) { $this->assertTrue( $sites->hasSite( $site->getGlobalId() ) ); } } } /** * @covers CachingSiteStore::saveSites */ public function testSaveSites() { $store = new CachingSiteStore( new HashSiteStore(), wfGetMainCache() ); $sites = array(); $site = new Site(); $site->setGlobalId( 'ertrywuutr' ); $site->setLanguageCode( 'en' ); $sites[] = $site; $site = new MediaWikiSite(); $site->setGlobalId( 'sdfhxujgkfpth' ); $site->setLanguageCode( 'nl' ); $sites[] = $site; $this->assertTrue( $store->saveSites( $sites ) ); $site = $store->getSite( 'ertrywuutr' ); $this->assertInstanceOf( 'Site', $site ); $this->assertEquals( 'en', $site->getLanguageCode() ); $site = $store->getSite( 'sdfhxujgkfpth' ); $this->assertInstanceOf( 'Site', $site ); $this->assertEquals( 'nl', $site->getLanguageCode() ); } /** * @covers CachingSiteStore::reset */ public function testReset() { $dbSiteStore = $this->getMockBuilder( 'SiteStore' ) ->disableOriginalConstructor() ->getMock(); // php 5.3 compatibility! $that = $this; $dbSiteStore->expects( $this->any() ) ->method( 'getSite' ) ->will( $this->returnValue( $that->getTestSite() ) ); $dbSiteStore->expects( $this->any() ) ->method( 'getSites' ) ->will( $this->returnCallback( function() use ( $that ) { $siteList = new SiteList(); $siteList->setSite( $that->getTestSite() ); return $siteList; } ) ); $store = new CachingSiteStore( $dbSiteStore, wfGetMainCache() ); // initialize internal cache $this->assertGreaterThan( 0, $store->getSites()->count(), 'count sites' ); $store->getSite( 'enwiki' )->setLanguageCode( 'en-ca' ); // sanity check: $store should have the new language code for 'enwiki' $this->assertEquals( 'en-ca', $store->getSite( 'enwiki' )->getLanguageCode(), 'sanity check' ); // purge cache $store->reset(); // the internal cache of $store should be updated, and now pulling // the site from the 'fallback' DBSiteStore with the original language code. $this->assertEquals( 'en', $store->getSite( 'enwiki' )->getLanguageCode(), 'reset' ); } public function getTestSite() { $enwiki = new MediaWikiSite(); $enwiki->setGlobalId( 'enwiki' ); $enwiki->setLanguageCode( 'en' ); return $enwiki; } /** * @covers CachingSiteStore::clear */ public function testClear() { $store = new CachingSiteStore( new HashSiteStore(), wfGetMainCache() ); $this->assertTrue( $store->clear() ); $site = $store->getSite( 'enwiki' ); $this->assertNull( $site ); $sites = $store->getSites(); $this->assertEquals( 0, $sites->count() ); } private function getHashSiteStore( array $sites ) { $siteStore = new HashSiteStore(); $siteStore->saveSites( $sites ); return $siteStore; } }