wiki.techinc.nl/tests/phpunit/includes/Revision/RevisionStoreFactoryTest.php
Timo Tijhof a52e796473 Revision: Inject Logger instead of LoggerSpi
For consistency with other services and entry points.
The caller decides on the channel name. This also narrows the
surface area for the DI layer by only requiring LoggerInterface
which is significantly lighter and easier to mock than an entire
LoggerProvider/Spi.

Change-Id: Ia71f2e1c0a1a08c9edf0736eb627c5d4a2dde8d5
2019-09-10 03:24:18 +01:00

180 lines
5.1 KiB
PHP

<?php
namespace MediaWiki\Tests\Revision;
use ActorMigration;
use CommentStore;
use MediaWiki\Revision\RevisionStore;
use MediaWiki\Revision\RevisionStoreFactory;
use MediaWiki\Revision\SlotRoleRegistry;
use MediaWiki\Storage\BlobStore;
use MediaWiki\Storage\BlobStoreFactory;
use MediaWiki\Storage\NameTableStore;
use MediaWiki\Storage\NameTableStoreFactory;
use MediaWiki\Storage\SqlBlobStore;
use Psr\Log\LoggerInterface;
use Psr\Log\NullLogger;
use WANObjectCache;
use Wikimedia\Rdbms\ILBFactory;
use Wikimedia\Rdbms\ILoadBalancer;
use Wikimedia\TestingAccessWrapper;
class RevisionStoreFactoryTest extends \MediaWikiIntegrationTestCase {
/**
* @covers \MediaWiki\Revision\RevisionStoreFactory::__construct
*/
public function testValidConstruction_doesntCauseErrors() {
new RevisionStoreFactory(
$this->getMockLoadBalancerFactory(),
$this->getMockBlobStoreFactory(),
$this->getNameTableStoreFactory(),
$this->getMockSlotRoleRegistry(),
$this->getHashWANObjectCache(),
$this->getMockCommentStore(),
ActorMigration::newMigration(),
MIGRATION_OLD,
new NullLogger(),
true
);
$this->assertTrue( true );
}
public function provideWikiIds() {
yield [ true ];
yield [ false ];
yield [ 'somewiki' ];
yield [ 'somewiki', MIGRATION_OLD , false ];
yield [ 'somewiki', MIGRATION_NEW , true ];
}
/**
* @dataProvider provideWikiIds
* @covers \MediaWiki\Revision\RevisionStoreFactory::getRevisionStore
*/
public function testGetRevisionStore(
$dbDomain,
$mcrMigrationStage = MIGRATION_OLD,
$contentHandlerUseDb = true
) {
$lbFactory = $this->getMockLoadBalancerFactory();
$blobStoreFactory = $this->getMockBlobStoreFactory();
$nameTableStoreFactory = $this->getNameTableStoreFactory();
$slotRoleRegistry = $this->getMockSlotRoleRegistry();
$cache = $this->getHashWANObjectCache();
$commentStore = $this->getMockCommentStore();
$actorMigration = ActorMigration::newMigration();
$logger = new NullLogger();
$factory = new RevisionStoreFactory(
$lbFactory,
$blobStoreFactory,
$nameTableStoreFactory,
$slotRoleRegistry,
$cache,
$commentStore,
$actorMigration,
$mcrMigrationStage,
$logger,
$contentHandlerUseDb
);
$store = $factory->getRevisionStore( $dbDomain );
$wrapper = TestingAccessWrapper::newFromObject( $store );
// ensure the correct object type is returned
$this->assertInstanceOf( RevisionStore::class, $store );
// ensure the RevisionStore is for the given wikiId
$this->assertSame( $dbDomain, $wrapper->dbDomain );
// ensure all other required services are correctly set
$this->assertSame( $cache, $wrapper->cache );
$this->assertSame( $commentStore, $wrapper->commentStore );
$this->assertSame( $mcrMigrationStage, $wrapper->mcrMigrationStage );
$this->assertSame( $actorMigration, $wrapper->actorMigration );
$this->assertSame( $contentHandlerUseDb, $store->getContentHandlerUseDB() );
$this->assertInstanceOf( ILoadBalancer::class, $wrapper->loadBalancer );
$this->assertInstanceOf( BlobStore::class, $wrapper->blobStore );
$this->assertInstanceOf( NameTableStore::class, $wrapper->contentModelStore );
$this->assertInstanceOf( NameTableStore::class, $wrapper->slotRoleStore );
$this->assertInstanceOf( LoggerInterface::class, $wrapper->logger );
}
/**
* @return \PHPUnit_Framework_MockObject_MockObject|ILoadBalancer
*/
private function getMockLoadBalancer() {
return $this->getMockBuilder( ILoadBalancer::class )
->disableOriginalConstructor()->getMock();
}
/**
* @return \PHPUnit_Framework_MockObject_MockObject|ILBFactory
*/
private function getMockLoadBalancerFactory() {
$mock = $this->getMockBuilder( ILBFactory::class )
->disableOriginalConstructor()->getMock();
$mock->method( 'getMainLB' )
->willReturnCallback( function () {
return $this->getMockLoadBalancer();
} );
return $mock;
}
/**
* @return \PHPUnit_Framework_MockObject_MockObject|SqlBlobStore
*/
private function getMockSqlBlobStore() {
return $this->getMockBuilder( SqlBlobStore::class )
->disableOriginalConstructor()->getMock();
}
/**
* @return \PHPUnit_Framework_MockObject_MockObject|BlobStoreFactory
*/
private function getMockBlobStoreFactory() {
$mock = $this->getMockBuilder( BlobStoreFactory::class )
->disableOriginalConstructor()->getMock();
$mock->method( 'newSqlBlobStore' )
->willReturnCallback( function () {
return $this->getMockSqlBlobStore();
} );
return $mock;
}
/**
* @return SlotRoleRegistry
*/
private function getMockSlotRoleRegistry() {
return $this->createMock( SlotRoleRegistry::class );
}
/**
* @return NameTableStoreFactory
*/
private function getNameTableStoreFactory() {
return new NameTableStoreFactory(
$this->getMockLoadBalancerFactory(),
$this->getHashWANObjectCache(),
new NullLogger() );
}
/**
* @return \PHPUnit_Framework_MockObject_MockObject|CommentStore
*/
private function getMockCommentStore() {
return $this->getMockBuilder( CommentStore::class )
->disableOriginalConstructor()->getMock();
}
private function getHashWANObjectCache() {
return new WANObjectCache( [ 'cache' => new \HashBagOStuff() ] );
}
}