wiki.techinc.nl/tests/phpunit/includes/page/PageSelectQueryBuilderTest.php
Umherirrender 134045b9aa tests: Swap assertion order in unit tests
Changes from patch set Icb93c79f4843b59dae80d3eda1a880457a1a68f2
Also some swaps from assertEquals to assertSame/True/False/Null

Change-Id: Ife497ae6cb1888b77eb25e85b76df72adc65641a
2021-08-04 20:21:01 +02:00

197 lines
5.3 KiB
PHP

<?php
namespace MediaWiki\Tests\Page;
use Exception;
use MediaWiki\Config\ServiceOptions;
use MediaWiki\Page\PageSelectQueryBuilder;
use MediaWiki\Page\PageStore;
use MediaWikiIntegrationTestCase;
/**
* @group Database
*/
class PageSelectQueryBuilderTest extends MediaWikiIntegrationTestCase {
public function addDBDataOnce() {
$this->getExistingTestPage( 'AA' );
$this->getExistingTestPage( 'AB' );
$this->getExistingTestPage( 'BB' );
$this->getExistingTestPage( 'Talk:AA' );
$this->getExistingTestPage( 'User:AB' );
}
/**
* @return PageStore
* @throws Exception
*/
private function getPageStore() {
$services = $this->getServiceContainer();
$serviceOptions = new ServiceOptions(
PageStore::CONSTRUCTOR_OPTIONS,
[
'LanguageCode' => $services->getContentLanguage()->getCode(),
'PageLanguageUseDB' => true
]
);
return new PageStore(
$serviceOptions,
$services->getDBLoadBalancer(),
$services->getNamespaceInfo(),
$services->getTitleParser()
);
}
/**
* @covers \MediaWiki\Page\PageSelectQueryBuilder::wherePageIds
* @covers \MediaWiki\Page\PageSelectQueryBuilder::fetchPageRecordArray
*/
public function testFetchBatchOfPagesById() {
$pageStore = $this->getPageStore();
$recAA = $pageStore->getPageByName( NS_MAIN, 'AA' );
$recAB = $pageStore->getPageByName( NS_MAIN, 'AB' );
$recs = $pageStore->newSelectQueryBuilder()
->wherePageIds( [] )
->fetchPageRecordArray();
$this->assertCount( 0, $recs );
$recs = $pageStore->newSelectQueryBuilder()
->wherePageIds( [ $recAA->getId(), $recAB->getId() ] )
->fetchPageRecordArray();
$this->assertCount( 2, $recs );
$this->assertSame( 'AA', $recs[ $recAA->getId() ]->getDBkey() );
$this->assertSame( 'AB', $recs[ $recAB->getId() ]->getDBkey() );
}
/**
* @covers \MediaWiki\Page\PageSelectQueryBuilder::wherePageIds
* @covers \MediaWiki\Page\PageSelectQueryBuilder::fetchPageRecord
*/
public function testFetchSinglePageById() {
$pageStore = $this->getPageStore();
$recAB = $pageStore->getPageByName( NS_MAIN, 'AB' );
$rec = $pageStore->newSelectQueryBuilder()
->wherePageIds( $recAB->getId() )
->fetchPageRecord();
$this->assertTrue( $recAB->isSamePageAs( $rec ) );
$rec = $pageStore->newSelectQueryBuilder()
->wherePageIds( 348529043 )
->fetchPageRecord();
$this->assertNull( $rec );
}
/**
* @covers \MediaWiki\Page\PageSelectQueryBuilder::whereTitles
* @covers \MediaWiki\Page\PageSelectQueryBuilder::fetchPageRecordArray
* @covers \MediaWiki\Page\PageSelectQueryBuilder::orderByPageId
*/
public function testFindBatchOfPageIdsByTitle() {
$pageStore = $this->getPageStore();
$recAA = $pageStore->getPageByName( NS_MAIN, 'AA' );
$recAB = $pageStore->getPageByName( NS_MAIN, 'AB' );
$recAC = $pageStore->getPageByName( NS_MAIN, 'BB' );
$recs = $pageStore->newSelectQueryBuilder()
->whereTitles( NS_FILE, [ 'AA', 'AB', 'BB' ] )
->fetchPageIds();
$this->assertCount( 0, $recs );
$recs = $pageStore->newSelectQueryBuilder()
->whereTitles( NS_MAIN, [ 'AA', 'AB', 'BB' ] )
->orderByPageId( PageSelectQueryBuilder::SORT_DESC )
->fetchPageIds();
$expectedIds = [ $recAA->getId(), $recAB->getId(), $recAC->getId() ];
sort( $expectedIds );
$expectedIds = array_reverse( $expectedIds );
$this->assertSame( $expectedIds, $recs );
}
/**
* @covers \MediaWiki\Page\PageSelectQueryBuilder::whereTitles
* @covers \MediaWiki\Page\PageSelectQueryBuilder::fetchPageRecord
*/
public function testFetchSinglePageByTitle() {
$pageStore = $this->getPageStore();
$recAB = $pageStore->getPageByName( NS_MAIN, 'AB' );
$rec = $pageStore->newSelectQueryBuilder()
->whereTitles( NS_MAIN, 'AB' )
->fetchPageRecord();
$this->assertTrue( $recAB->isSamePageAs( $rec ) );
$rec = $pageStore->newSelectQueryBuilder()
->whereTitles( NS_TALK, 'AB' )
->fetchPageRecord();
$this->assertNull( $rec );
}
/**
* @covers \MediaWiki\Page\PageSelectQueryBuilder::whereNamespace
* @covers \MediaWiki\Page\PageSelectQueryBuilder::fetchPageRecordArray
*/
public function testFilterByNamespace() {
$pageStore = $this->getPageStore();
$recAA = $pageStore->getPageByName( NS_TALK, 'AA' );
$recs = $pageStore->newSelectQueryBuilder()
->whereNamespace( NS_TALK )
->fetchPageRecordArray();
$this->assertCount( 1, $recs );
$this->assertSame( 'AA', $recs[ $recAA->getId() ]->getDBkey() );
}
/**
* @covers \MediaWiki\Page\PageSelectQueryBuilder::whereTitlePrefix
* @covers \MediaWiki\Page\PageSelectQueryBuilder::fetchPageRecords
* @covers \MediaWiki\Page\PageSelectQueryBuilder::orderByTitle
*/
public function testListPagesByPrefix() {
$pageStore = $this->getPageStore();
$recs = $pageStore->newSelectQueryBuilder()
->whereTitlePrefix( NS_MAIN, 'A' )
->orderByTitle( PageSelectQueryBuilder::SORT_DESC )
->fetchPageRecords();
$recs = iterator_to_array( $recs );
$this->assertCount( 2, $recs );
// descending order
$this->assertSame( 'AB', $recs[0]->getDBkey() );
$this->assertSame( 'AA', $recs[1]->getDBkey() );
$recs = $pageStore->newSelectQueryBuilder()
->whereTitlePrefix( NS_TALK, 'A' )
->fetchPageRecords();
$this->assertCount( 1, $recs );
$recs = $pageStore->newSelectQueryBuilder()
->whereTitlePrefix( NS_MAIN, 'XX' )
->fetchPageRecords();
$this->assertCount( 0, $recs );
}
}