wiki.techinc.nl/tests/phpunit/includes/api/query/ApiQueryAllDeletedRevisionsTest.php
Umherirrender 883b3f08fb api: Rewrite adrto/from/prefix handling to use expression builder
For a deduplication the raw sql is used as string key in an array.
Now only the search term is part of the key, build the sql a bit later,
as objects not usable in array keys.

The deduplication is needed when namespaces have different first letter
configs as happen with $wgCapitalLinks = false for all namespaces except
the hard coded like user and mediawiki with talk.
Searching for lower case titles splits the query

Bug: T361023
Change-Id: Ia4e29d1d4d816f354318ef443ae19c954fd52274
2024-06-17 22:36:10 +02:00

77 lines
2.8 KiB
PHP

<?php
namespace MediaWiki\Tests\Api\Query;
use MediaWiki\MainConfigNames;
use MediaWiki\Tests\Api\ApiTestCase;
use MediaWiki\Title\Title;
/**
* @group API
* @group Database
* @covers \ApiQueryAllDeletedRevisions
*/
class ApiQueryAllDeletedRevisionsTest extends ApiTestCase {
public function testFromToPrefixParameter() {
$this->overrideConfigValues( [
MainConfigNames::CapitalLinks => false,
] );
$performer = $this->getTestSysop()->getAuthority();
$title = Title::makeTitle( NS_MAIN, 'pageM' );
$page = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
$this->editPage( $page, 'Some text', 'Create', NS_MAIN, $performer );
$this->deletePage( $page, 'Delete', $performer );
$userTitle = Title::makeTitle( NS_USER, 'PageU' );
$userPage = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $userTitle );
$this->editPage( $userPage, 'Some text', 'Create', NS_MAIN, $performer );
$this->deletePage( $userPage, 'Delete', $performer );
$expectedResult0 = [ 'ns' => $title->getNamespace(), 'title' => $title->getPrefixedDbKey() ];
$expectedResult1 = [ 'ns' => $userTitle->getNamespace(), 'title' => $userTitle->getPrefixedDbKey() ];
// Search the page with prefix
[ $result ] = $this->doApiRequest( [
'action' => 'query',
'list' => 'alldeletedrevisions',
'adrdir' => 'newer',
'adrnamespace' => '0|2',
'adrprefix' => 'page',
], null, false, $performer );
$this->assertArrayHasKey( 'query', $result );
$this->assertArrayHasKey( 'alldeletedrevisions', $result['query'] );
$this->assertArrayContains( $expectedResult0, $result['query']['alldeletedrevisions'][0] );
$this->assertArrayContains( $expectedResult1, $result['query']['alldeletedrevisions'][1] );
// Search the page with from
[ $result ] = $this->doApiRequest( [
'action' => 'query',
'list' => 'alldeletedrevisions',
'adrdir' => 'newer',
'adrnamespace' => '0|2',
'adrfrom' => 'pageA',
], null, false, $performer );
$this->assertArrayHasKey( 'query', $result );
$this->assertArrayHasKey( 'alldeletedrevisions', $result['query'] );
$this->assertArrayContains( $expectedResult0, $result['query']['alldeletedrevisions'][0] );
$this->assertArrayContains( $expectedResult1, $result['query']['alldeletedrevisions'][1] );
// Search the page with to
[ $result ] = $this->doApiRequest( [
'action' => 'query',
'list' => 'alldeletedrevisions',
'adrdir' => 'newer',
'adrnamespace' => '0|2',
'adrto' => 'pageZ',
], null, false, $performer );
$this->assertArrayHasKey( 'query', $result );
$this->assertArrayHasKey( 'alldeletedrevisions', $result['query'] );
$this->assertArrayContains( $expectedResult0, $result['query']['alldeletedrevisions'][0] );
$this->assertArrayContains( $expectedResult1, $result['query']['alldeletedrevisions'][1] );
}
}