3 namespace MediaWiki\Tests\Storage
;
5 use MediaWiki\Storage\RevisionStore
;
6 use MediaWiki\Storage\SqlBlobStore
;
9 use Wikimedia\Rdbms\LoadBalancer
;
11 class RevisionStoreTest
extends MediaWikiTestCase
{
14 * @param LoadBalancer $loadBalancer
15 * @param SqlBlobStore $blobStore
16 * @param WANObjectCache $WANObjectCache
18 * @return RevisionStore
20 private function getRevisionStore(
23 $WANObjectCache = null
25 return new RevisionStore(
26 $loadBalancer ?
$loadBalancer : $this->getMockLoadBalancer(),
27 $blobStore ?
$blobStore : $this->getMockSqlBlobStore(),
28 $WANObjectCache ?
$WANObjectCache : $this->getHashWANObjectCache()
33 * @return \PHPUnit_Framework_MockObject_MockObject|LoadBalancer
35 private function getMockLoadBalancer() {
36 return $this->getMockBuilder( LoadBalancer
::class )
37 ->disableOriginalConstructor()->getMock();
41 * @return \PHPUnit_Framework_MockObject_MockObject|SqlBlobStore
43 private function getMockSqlBlobStore() {
44 return $this->getMockBuilder( SqlBlobStore
::class )
45 ->disableOriginalConstructor()->getMock();
48 private function getHashWANObjectCache() {
49 return new WANObjectCache( [ 'cache' => new \
HashBagOStuff() ] );
53 * @covers \MediaWiki\Storage\RevisionStore::getContentHandlerUseDB
54 * @covers \MediaWiki\Storage\RevisionStore::setContentHandlerUseDB
56 public function testGetSetContentHandlerDb() {
57 $store = $this->getRevisionStore();
58 $this->assertTrue( $store->getContentHandlerUseDB() );
59 $store->setContentHandlerUseDB( false );
60 $this->assertFalse( $store->getContentHandlerUseDB() );
61 $store->setContentHandlerUseDB( true );
62 $this->assertTrue( $store->getContentHandlerUseDB() );
65 private function getDefaultQueryFields() {
81 private function getCommentQueryFields() {
83 'rev_comment_text' => 'rev_comment',
84 'rev_comment_data' => 'NULL',
85 'rev_comment_cid' => 'NULL',
89 private function getContentHandlerQueryFields() {
96 public function provideGetQueryInfo() {
101 'tables' => [ 'revision' ],
102 'fields' => array_merge(
103 $this->getDefaultQueryFields(),
104 $this->getCommentQueryFields(),
105 $this->getContentHandlerQueryFields()
114 'tables' => [ 'revision' ],
115 'fields' => array_merge(
116 $this->getDefaultQueryFields(),
117 $this->getCommentQueryFields()
126 'tables' => [ 'revision', 'page' ],
127 'fields' => array_merge(
128 $this->getDefaultQueryFields(),
129 $this->getCommentQueryFields(),
140 'page' => [ 'INNER JOIN', [ 'page_id = rev_page' ] ],
148 'tables' => [ 'revision', 'user' ],
149 'fields' => array_merge(
150 $this->getDefaultQueryFields(),
151 $this->getCommentQueryFields(),
157 'user' => [ 'LEFT JOIN', [ 'rev_user != 0', 'user_id = rev_user' ] ],
165 'tables' => [ 'revision', 'text' ],
166 'fields' => array_merge(
167 $this->getDefaultQueryFields(),
168 $this->getCommentQueryFields(),
175 'text' => [ 'INNER JOIN', [ 'rev_text_id=old_id' ] ],
181 [ 'page', 'user', 'text' ],
183 'tables' => [ 'revision', 'page', 'user', 'text' ],
184 'fields' => array_merge(
185 $this->getDefaultQueryFields(),
186 $this->getCommentQueryFields(),
187 $this->getContentHandlerQueryFields(),
201 'page' => [ 'INNER JOIN', [ 'page_id = rev_page' ] ],
202 'user' => [ 'LEFT JOIN', [ 'rev_user != 0', 'user_id = rev_user' ] ],
203 'text' => [ 'INNER JOIN', [ 'rev_text_id=old_id' ] ],
210 * @dataProvider provideGetQueryInfo
211 * @covers \MediaWiki\Storage\RevisionStore::getQueryInfo
213 public function testGetQueryInfo( $contentHandlerUseDb, $options, $expected ) {
214 $store = $this->getRevisionStore();
215 $store->setContentHandlerUseDB( $contentHandlerUseDb );
216 $this->assertEquals( $expected, $store->getQueryInfo( $options ) );
219 private function getDefaultArchiveFields() {
240 * @covers \MediaWiki\Storage\RevisionStore::getArchiveQueryInfo
242 public function testGetArchiveQueryInfo_contentHandlerDb() {
243 $store = $this->getRevisionStore();
244 $store->setContentHandlerUseDB( true );
250 'fields' => array_merge(
251 $this->getDefaultArchiveFields(),
253 'ar_comment_text' => 'ar_comment',
254 'ar_comment_data' => 'NULL',
255 'ar_comment_cid' => 'NULL',
262 $store->getArchiveQueryInfo()
267 * @covers \MediaWiki\Storage\RevisionStore::getArchiveQueryInfo
269 public function testGetArchiveQueryInfo_noContentHandlerDb() {
270 $store = $this->getRevisionStore();
271 $store->setContentHandlerUseDB( false );
277 'fields' => array_merge(
278 $this->getDefaultArchiveFields(),
280 'ar_comment_text' => 'ar_comment',
281 'ar_comment_data' => 'NULL',
282 'ar_comment_cid' => 'NULL',
287 $store->getArchiveQueryInfo()