1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036 |
- <?php
- use MediaWiki\Linker\LinkTarget;
- use MediaWiki\MediaWikiServices;
- /**
- * @group API
- * @group Database
- * @group medium
- *
- * @covers ApiQueryRecentChanges
- */
- class ApiQueryRecentChangesIntegrationTest extends ApiTestCase {
- public function __construct( $name = null, array $data = [], $dataName = '' ) {
- parent::__construct( $name, $data, $dataName );
- $this->tablesUsed[] = 'recentchanges';
- $this->tablesUsed[] = 'page';
- }
- protected function setUp() {
- parent::setUp();
- self::$users['ApiQueryRecentChangesIntegrationTestUser'] = $this->getMutableTestUser();
- wfGetDB( DB_MASTER )->delete( 'recentchanges', '*', __METHOD__ );
- }
- private function getLoggedInTestUser() {
- return self::$users['ApiQueryRecentChangesIntegrationTestUser']->getUser();
- }
- private function doPageEdit( User $user, LinkTarget $target, $summary ) {
- static $i = 0;
- $title = Title::newFromLinkTarget( $target );
- $page = WikiPage::factory( $title );
- $page->doEditContent(
- ContentHandler::makeContent( __CLASS__ . $i++, $title ),
- $summary,
- 0,
- false,
- $user
- );
- }
- private function doMinorPageEdit( User $user, LinkTarget $target, $summary ) {
- $title = Title::newFromLinkTarget( $target );
- $page = WikiPage::factory( $title );
- $page->doEditContent(
- ContentHandler::makeContent( __CLASS__, $title ),
- $summary,
- EDIT_MINOR,
- false,
- $user
- );
- }
- private function doBotPageEdit( User $user, LinkTarget $target, $summary ) {
- $title = Title::newFromLinkTarget( $target );
- $page = WikiPage::factory( $title );
- $page->doEditContent(
- ContentHandler::makeContent( __CLASS__, $title ),
- $summary,
- EDIT_FORCE_BOT,
- false,
- $user
- );
- }
- private function doAnonPageEdit( LinkTarget $target, $summary ) {
- $title = Title::newFromLinkTarget( $target );
- $page = WikiPage::factory( $title );
- $page->doEditContent(
- ContentHandler::makeContent( __CLASS__, $title ),
- $summary,
- 0,
- false,
- User::newFromId( 0 )
- );
- }
- private function deletePage( LinkTarget $target, $reason ) {
- $title = Title::newFromLinkTarget( $target );
- $page = WikiPage::factory( $title );
- $page->doDeleteArticleReal( $reason );
- }
- /**
- * Performs a batch of page edits as a specified user
- * @param User $user
- * @param array $editData associative array, keys:
- * - target => LinkTarget page to edit
- * - summary => string edit summary
- * - minorEdit => bool mark as minor edit if true (defaults to false)
- * - botEdit => bool mark as bot edit if true (defaults to false)
- */
- private function doPageEdits( User $user, array $editData ) {
- foreach ( $editData as $singleEditData ) {
- if ( array_key_exists( 'minorEdit', $singleEditData ) && $singleEditData['minorEdit'] ) {
- $this->doMinorPageEdit(
- $user,
- $singleEditData['target'],
- $singleEditData['summary']
- );
- continue;
- }
- if ( array_key_exists( 'botEdit', $singleEditData ) && $singleEditData['botEdit'] ) {
- $this->doBotPageEdit(
- $user,
- $singleEditData['target'],
- $singleEditData['summary']
- );
- continue;
- }
- $this->doPageEdit(
- $user,
- $singleEditData['target'],
- $singleEditData['summary']
- );
- }
- }
- private function doListRecentChangesRequest( array $params = [] ) {
- return $this->doApiRequest(
- array_merge(
- [ 'action' => 'query', 'list' => 'recentchanges' ],
- $params
- ),
- null,
- false,
- $this->getLoggedInTestUser()
- );
- }
- private function doGeneratorRecentChangesRequest( array $params = [] ) {
- return $this->doApiRequest(
- array_merge(
- [ 'action' => 'query', 'generator' => 'recentchanges' ],
- $params
- ),
- null,
- false,
- $this->getLoggedInTestUser()
- );
- }
- private function getItemsFromApiResponse( array $response ) {
- return $response[0]['query']['recentchanges'];
- }
- private function getTitleFormatter() {
- return new MediaWikiTitleCodec(
- Language::factory( 'en' ),
- MediaWikiServices::getInstance()->getGenderCache()
- );
- }
- private function getPrefixedText( LinkTarget $target ) {
- $formatter = $this->getTitleFormatter();
- return $formatter->getPrefixedText( $target );
- }
- public function testListRecentChanges_returnsRCInfo() {
- $target = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdit( $this->getLoggedInTestUser(), $target, 'Create the page' );
- $result = $this->doListRecentChangesRequest();
- $this->assertArrayHasKey( 'query', $result[0] );
- $this->assertArrayHasKey( 'recentchanges', $result[0]['query'] );
- $items = $this->getItemsFromApiResponse( $result );
- $this->assertCount( 1, $items );
- $item = $items[0];
- $this->assertArraySubset(
- [
- 'type' => 'new',
- 'ns' => $target->getNamespace(),
- 'title' => $this->getPrefixedText( $target ),
- ],
- $item
- );
- $this->assertArrayNotHasKey( 'bot', $item );
- $this->assertArrayNotHasKey( 'new', $item );
- $this->assertArrayNotHasKey( 'minor', $item );
- $this->assertArrayHasKey( 'pageid', $item );
- $this->assertArrayHasKey( 'revid', $item );
- $this->assertArrayHasKey( 'old_revid', $item );
- }
- public function testIdsPropParameter() {
- $target = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdit( $this->getLoggedInTestUser(), $target, 'Create the page' );
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => 'ids', ] );
- $items = $this->getItemsFromApiResponse( $result );
- $this->assertCount( 1, $items );
- $this->assertArrayHasKey( 'pageid', $items[0] );
- $this->assertArrayHasKey( 'revid', $items[0] );
- $this->assertArrayHasKey( 'old_revid', $items[0] );
- $this->assertEquals( 'new', $items[0]['type'] );
- }
- public function testTitlePropParameter() {
- $subjectTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $talkTarget = new TitleValue( 1, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdits(
- $this->getLoggedInTestUser(),
- [
- [
- 'target' => $subjectTarget,
- 'summary' => 'Create the page',
- ],
- [
- 'target' => $talkTarget,
- 'summary' => 'Create Talk page',
- ],
- ]
- );
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => 'title', ] );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'ns' => $talkTarget->getNamespace(),
- 'title' => $this->getPrefixedText( $talkTarget ),
- ],
- [
- 'type' => 'new',
- 'ns' => $subjectTarget->getNamespace(),
- 'title' => $this->getPrefixedText( $subjectTarget ),
- ],
- ],
- $this->getItemsFromApiResponse( $result )
- );
- }
- public function testFlagsPropParameter() {
- $normalEditTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $minorEditTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPageM' );
- $botEditTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPageB' );
- $this->doPageEdits(
- $this->getLoggedInTestUser(),
- [
- [
- 'target' => $normalEditTarget,
- 'summary' => 'Create the page',
- ],
- [
- 'target' => $minorEditTarget,
- 'summary' => 'Create the page',
- ],
- [
- 'target' => $minorEditTarget,
- 'summary' => 'Change content',
- 'minorEdit' => true,
- ],
- [
- 'target' => $botEditTarget,
- 'summary' => 'Create the page with a bot',
- 'botEdit' => true,
- ],
- ]
- );
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => 'flags', ] );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'new' => true,
- 'minor' => false,
- 'bot' => true,
- ],
- [
- 'type' => 'edit',
- 'new' => false,
- 'minor' => true,
- 'bot' => false,
- ],
- [
- 'type' => 'new',
- 'new' => true,
- 'minor' => false,
- 'bot' => false,
- ],
- [
- 'type' => 'new',
- 'new' => true,
- 'minor' => false,
- 'bot' => false,
- ],
- ],
- $this->getItemsFromApiResponse( $result )
- );
- }
- public function testUserPropParameter() {
- $userEditTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $anonEditTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPageA' );
- $this->doPageEdit( $this->getLoggedInTestUser(), $userEditTarget, 'Create the page' );
- $this->doAnonPageEdit( $anonEditTarget, 'Create the page' );
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => 'user', ] );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'anon' => true,
- 'user' => User::newFromId( 0 )->getName(),
- ],
- [
- 'type' => 'new',
- 'user' => $this->getLoggedInTestUser()->getName(),
- ],
- ],
- $this->getItemsFromApiResponse( $result )
- );
- }
- public function testUserIdPropParameter() {
- $user = $this->getLoggedInTestUser();
- $userEditTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $anonEditTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPageA' );
- $this->doPageEdit( $user, $userEditTarget, 'Create the page' );
- $this->doAnonPageEdit( $anonEditTarget, 'Create the page' );
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => 'userid', ] );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'anon' => true,
- 'userid' => 0,
- ],
- [
- 'type' => 'new',
- 'userid' => $user->getId(),
- ],
- ],
- $this->getItemsFromApiResponse( $result )
- );
- }
- public function testCommentPropParameter() {
- $target = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdit( $this->getLoggedInTestUser(), $target, 'Create the <b>page</b>' );
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => 'comment', ] );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'comment' => 'Create the <b>page</b>',
- ],
- ],
- $this->getItemsFromApiResponse( $result )
- );
- }
- public function testParsedCommentPropParameter() {
- $target = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdit( $this->getLoggedInTestUser(), $target, 'Create the <b>page</b>' );
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => 'parsedcomment', ] );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'parsedcomment' => 'Create the <b>page</b>',
- ],
- ],
- $this->getItemsFromApiResponse( $result )
- );
- }
- public function testTimestampPropParameter() {
- $target = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdit( $this->getLoggedInTestUser(), $target, 'Create the page' );
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => 'timestamp', ] );
- $items = $this->getItemsFromApiResponse( $result );
- $this->assertCount( 1, $items );
- $this->assertArrayHasKey( 'timestamp', $items[0] );
- $this->assertInternalType( 'string', $items[0]['timestamp'] );
- }
- public function testSizesPropParameter() {
- $target = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdit( $this->getLoggedInTestUser(), $target, 'Create the page' );
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => 'sizes', ] );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'oldlen' => 0,
- 'newlen' => 38,
- ],
- ],
- $this->getItemsFromApiResponse( $result )
- );
- }
- private function createPageAndDeleteIt( LinkTarget $target ) {
- $this->doPageEdit( $this->getLoggedInTestUser(),
- $target,
- 'Create the page that will be deleted'
- );
- $this->deletePage( $target, 'Important Reason' );
- }
- public function testLoginfoPropParameter() {
- $target = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->createPageAndDeleteIt( $target );
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => 'loginfo', ] );
- $items = $this->getItemsFromApiResponse( $result );
- $this->assertCount( 1, $items );
- $this->assertArraySubset(
- [
- 'type' => 'log',
- 'logtype' => 'delete',
- 'logaction' => 'delete',
- 'logparams' => [],
- ],
- $items[0]
- );
- $this->assertArrayHasKey( 'logid', $items[0] );
- }
- public function testEmptyPropParameter() {
- $user = $this->getLoggedInTestUser();
- $target = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdit( $user, $target, 'Create the page' );
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => '', ] );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- ]
- ],
- $this->getItemsFromApiResponse( $result )
- );
- }
- public function testNamespaceParam() {
- $subjectTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $talkTarget = new TitleValue( 1, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdits(
- $this->getLoggedInTestUser(),
- [
- [
- 'target' => $subjectTarget,
- 'summary' => 'Create the page',
- ],
- [
- 'target' => $talkTarget,
- 'summary' => 'Create the talk page',
- ],
- ]
- );
- $result = $this->doListRecentChangesRequest( [ 'rcnamespace' => '0', ] );
- $items = $this->getItemsFromApiResponse( $result );
- $this->assertCount( 1, $items );
- $this->assertArraySubset(
- [
- 'ns' => 0,
- 'title' => $this->getPrefixedText( $subjectTarget ),
- ],
- $items[0]
- );
- }
- public function testShowAnonParams() {
- $target = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doAnonPageEdit( $target, 'Create the page' );
- $resultAnon = $this->doListRecentChangesRequest( [
- 'rcprop' => 'user',
- 'rcshow' => WatchedItemQueryService::FILTER_ANON
- ] );
- $resultNotAnon = $this->doListRecentChangesRequest( [
- 'rcprop' => 'user',
- 'rcshow' => WatchedItemQueryService::FILTER_NOT_ANON
- ] );
- $items = $this->getItemsFromApiResponse( $resultAnon );
- $this->assertCount( 1, $items );
- $this->assertArraySubset( [ 'anon' => true ], $items[0] );
- $this->assertEmpty( $this->getItemsFromApiResponse( $resultNotAnon ) );
- }
- public function testNewAndEditTypeParameters() {
- $subjectTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $talkTarget = new TitleValue( 1, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdits(
- $this->getLoggedInTestUser(),
- [
- [
- 'target' => $subjectTarget,
- 'summary' => 'Create the page',
- ],
- [
- 'target' => $subjectTarget,
- 'summary' => 'Change the content',
- ],
- [
- 'target' => $talkTarget,
- 'summary' => 'Create Talk page',
- ],
- ]
- );
- $resultNew = $this->doListRecentChangesRequest( [ 'rcprop' => 'title', 'rctype' => 'new' ] );
- $resultEdit = $this->doListRecentChangesRequest( [ 'rcprop' => 'title', 'rctype' => 'edit' ] );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'ns' => $talkTarget->getNamespace(),
- 'title' => $this->getPrefixedText( $talkTarget ),
- ],
- [
- 'type' => 'new',
- 'ns' => $subjectTarget->getNamespace(),
- 'title' => $this->getPrefixedText( $subjectTarget ),
- ],
- ],
- $this->getItemsFromApiResponse( $resultNew )
- );
- $this->assertEquals(
- [
- [
- 'type' => 'edit',
- 'ns' => $subjectTarget->getNamespace(),
- 'title' => $this->getPrefixedText( $subjectTarget ),
- ],
- ],
- $this->getItemsFromApiResponse( $resultEdit )
- );
- }
- public function testLogTypeParameters() {
- $subjectTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $talkTarget = new TitleValue( 1, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->createPageAndDeleteIt( $subjectTarget );
- $this->doPageEdit( $this->getLoggedInTestUser(), $talkTarget, 'Create Talk page' );
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => 'title', 'rctype' => 'log' ] );
- $this->assertEquals(
- [
- [
- 'type' => 'log',
- 'ns' => $subjectTarget->getNamespace(),
- 'title' => $this->getPrefixedText( $subjectTarget ),
- ],
- ],
- $this->getItemsFromApiResponse( $result )
- );
- }
- private function getExternalRC( LinkTarget $target ) {
- $title = Title::newFromLinkTarget( $target );
- $rc = new RecentChange;
- $rc->mTitle = $title;
- $rc->mAttribs = [
- 'rc_timestamp' => wfTimestamp( TS_MW ),
- 'rc_namespace' => $title->getNamespace(),
- 'rc_title' => $title->getDBkey(),
- 'rc_type' => RC_EXTERNAL,
- 'rc_source' => 'foo',
- 'rc_minor' => 0,
- 'rc_cur_id' => $title->getArticleID(),
- 'rc_user' => 0,
- 'rc_user_text' => 'm>External User',
- 'rc_comment' => '',
- 'rc_comment_text' => '',
- 'rc_comment_data' => null,
- 'rc_this_oldid' => $title->getLatestRevID(),
- 'rc_last_oldid' => $title->getLatestRevID(),
- 'rc_bot' => 0,
- 'rc_ip' => '',
- 'rc_patrolled' => 0,
- 'rc_new' => 0,
- 'rc_old_len' => $title->getLength(),
- 'rc_new_len' => $title->getLength(),
- 'rc_deleted' => 0,
- 'rc_logid' => 0,
- 'rc_log_type' => null,
- 'rc_log_action' => '',
- 'rc_params' => '',
- ];
- $rc->mExtra = [
- 'prefixedDBkey' => $title->getPrefixedDBkey(),
- 'lastTimestamp' => 0,
- 'oldSize' => $title->getLength(),
- 'newSize' => $title->getLength(),
- 'pageStatus' => 'changed'
- ];
- return $rc;
- }
- public function testExternalTypeParameters() {
- $user = $this->getLoggedInTestUser();
- $subjectTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $talkTarget = new TitleValue( 1, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdit( $user, $subjectTarget, 'Create the page' );
- $this->doPageEdit( $user, $talkTarget, 'Create Talk page' );
- $rc = $this->getExternalRC( $subjectTarget );
- $rc->save();
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => 'title', 'rctype' => 'external' ] );
- $this->assertEquals(
- [
- [
- 'type' => 'external',
- 'ns' => $subjectTarget->getNamespace(),
- 'title' => $this->getPrefixedText( $subjectTarget ),
- ],
- ],
- $this->getItemsFromApiResponse( $result )
- );
- }
- public function testCategorizeTypeParameter() {
- $user = $this->getLoggedInTestUser();
- $subjectTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $categoryTarget = new TitleValue( NS_CATEGORY, 'ApiQueryRecentChangesIntegrationTestCategory' );
- $this->doPageEdits(
- $user,
- [
- [
- 'target' => $categoryTarget,
- 'summary' => 'Create the category',
- ],
- [
- 'target' => $subjectTarget,
- 'summary' => 'Create the page and add it to the category',
- ],
- ]
- );
- $title = Title::newFromLinkTarget( $subjectTarget );
- $revision = Revision::newFromTitle( $title );
- $rc = RecentChange::newForCategorization(
- $revision->getTimestamp(),
- Title::newFromLinkTarget( $categoryTarget ),
- $user,
- $revision->getComment(),
- $title,
- 0,
- $revision->getId(),
- null,
- false
- );
- $rc->save();
- $result = $this->doListRecentChangesRequest( [ 'rcprop' => 'title', 'rctype' => 'categorize' ] );
- $this->assertEquals(
- [
- [
- 'type' => 'categorize',
- 'ns' => $categoryTarget->getNamespace(),
- 'title' => $this->getPrefixedText( $categoryTarget ),
- ],
- ],
- $this->getItemsFromApiResponse( $result )
- );
- }
- public function testLimitParam() {
- $target1 = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $target2 = new TitleValue( 1, 'ApiQueryRecentChangesIntegrationTestPage' );
- $target3 = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage2' );
- $this->doPageEdits(
- $this->getLoggedInTestUser(),
- [
- [
- 'target' => $target1,
- 'summary' => 'Create the page',
- ],
- [
- 'target' => $target2,
- 'summary' => 'Create Talk page',
- ],
- [
- 'target' => $target3,
- 'summary' => 'Create the page',
- ],
- ]
- );
- $resultWithoutLimit = $this->doListRecentChangesRequest( [ 'rcprop' => 'title' ] );
- $resultWithLimit = $this->doListRecentChangesRequest( [ 'rclimit' => 2, 'rcprop' => 'title' ] );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'ns' => $target3->getNamespace(),
- 'title' => $this->getPrefixedText( $target3 )
- ],
- [
- 'type' => 'new',
- 'ns' => $target2->getNamespace(),
- 'title' => $this->getPrefixedText( $target2 )
- ],
- [
- 'type' => 'new',
- 'ns' => $target1->getNamespace(),
- 'title' => $this->getPrefixedText( $target1 )
- ],
- ],
- $this->getItemsFromApiResponse( $resultWithoutLimit )
- );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'ns' => $target3->getNamespace(),
- 'title' => $this->getPrefixedText( $target3 )
- ],
- [
- 'type' => 'new',
- 'ns' => $target2->getNamespace(),
- 'title' => $this->getPrefixedText( $target2 )
- ],
- ],
- $this->getItemsFromApiResponse( $resultWithLimit )
- );
- $this->assertArrayHasKey( 'continue', $resultWithLimit[0] );
- $this->assertArrayHasKey( 'rccontinue', $resultWithLimit[0]['continue'] );
- }
- public function testAllRevParam() {
- $target = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdits(
- $this->getLoggedInTestUser(),
- [
- [
- 'target' => $target,
- 'summary' => 'Create the page',
- ],
- [
- 'target' => $target,
- 'summary' => 'Change the content',
- ],
- ]
- );
- $resultAllRev = $this->doListRecentChangesRequest( [ 'rcprop' => 'title', 'rcallrev' => '', ] );
- $resultNoAllRev = $this->doListRecentChangesRequest( [ 'rcprop' => 'title' ] );
- $this->assertEquals(
- [
- [
- 'type' => 'edit',
- 'ns' => $target->getNamespace(),
- 'title' => $this->getPrefixedText( $target ),
- ],
- [
- 'type' => 'new',
- 'ns' => $target->getNamespace(),
- 'title' => $this->getPrefixedText( $target ),
- ],
- ],
- $this->getItemsFromApiResponse( $resultNoAllRev )
- );
- $this->assertEquals(
- [
- [
- 'type' => 'edit',
- 'ns' => $target->getNamespace(),
- 'title' => $this->getPrefixedText( $target ),
- ],
- [
- 'type' => 'new',
- 'ns' => $target->getNamespace(),
- 'title' => $this->getPrefixedText( $target ),
- ],
- ],
- $this->getItemsFromApiResponse( $resultAllRev )
- );
- }
- public function testDirParams() {
- $subjectTarget = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $talkTarget = new TitleValue( 1, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdits(
- $this->getLoggedInTestUser(),
- [
- [
- 'target' => $subjectTarget,
- 'summary' => 'Create the page',
- ],
- [
- 'target' => $talkTarget,
- 'summary' => 'Create Talk page',
- ],
- ]
- );
- $resultDirOlder = $this->doListRecentChangesRequest(
- [ 'rcdir' => 'older', 'rcprop' => 'title' ]
- );
- $resultDirNewer = $this->doListRecentChangesRequest(
- [ 'rcdir' => 'newer', 'rcprop' => 'title' ]
- );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'ns' => $talkTarget->getNamespace(),
- 'title' => $this->getPrefixedText( $talkTarget )
- ],
- [
- 'type' => 'new',
- 'ns' => $subjectTarget->getNamespace(),
- 'title' => $this->getPrefixedText( $subjectTarget )
- ],
- ],
- $this->getItemsFromApiResponse( $resultDirOlder )
- );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'ns' => $subjectTarget->getNamespace(),
- 'title' => $this->getPrefixedText( $subjectTarget )
- ],
- [
- 'type' => 'new',
- 'ns' => $talkTarget->getNamespace(),
- 'title' => $this->getPrefixedText( $talkTarget )
- ],
- ],
- $this->getItemsFromApiResponse( $resultDirNewer )
- );
- }
- public function testTitleParams() {
- $page1 = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $page2 = new TitleValue( 1, 'ApiQueryRecentChangesIntegrationTestPage2' );
- $page3 = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage3' );
- $this->doPageEdits(
- $this->getLoggedInTestUser(),
- [
- [
- 'target' => $page1,
- 'summary' => 'Create the page',
- ],
- [
- 'target' => $page2,
- 'summary' => 'Create the page',
- ],
- [
- 'target' => $page3,
- 'summary' => 'Create the page',
- ],
- ]
- );
- $result = $this->doListRecentChangesRequest(
- [
- 'rctitle' => 'ApiQueryRecentChangesIntegrationTestPage',
- 'rcprop' => 'title'
- ]
- );
- $result2 = $this->doListRecentChangesRequest(
- [
- 'rctitle' => 'Talk:ApiQueryRecentChangesIntegrationTestPage2',
- 'rcprop' => 'title'
- ]
- );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'ns' => $page1->getNamespace(),
- 'title' => $this->getPrefixedText( $page1 )
- ],
- ],
- $this->getItemsFromApiResponse( $result )
- );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'ns' => $page2->getNamespace(),
- 'title' => $this->getPrefixedText( $page2 )
- ],
- ],
- $this->getItemsFromApiResponse( $result2 )
- );
- }
- public function testStartEndParams() {
- $target = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdit( $this->getLoggedInTestUser(), $target, 'Create the page' );
- $resultStart = $this->doListRecentChangesRequest( [
- 'rcstart' => '20010115000000',
- 'rcdir' => 'newer',
- 'rcprop' => 'title',
- ] );
- $resultEnd = $this->doListRecentChangesRequest( [
- 'rcend' => '20010115000000',
- 'rcdir' => 'newer',
- 'rcprop' => 'title',
- ] );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'ns' => $target->getNamespace(),
- 'title' => $this->getPrefixedText( $target ),
- ]
- ],
- $this->getItemsFromApiResponse( $resultStart )
- );
- $this->assertEmpty( $this->getItemsFromApiResponse( $resultEnd ) );
- }
- public function testContinueParam() {
- $target1 = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $target2 = new TitleValue( 1, 'ApiQueryRecentChangesIntegrationTestPage' );
- $target3 = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage2' );
- $this->doPageEdits(
- $this->getLoggedInTestUser(),
- [
- [
- 'target' => $target1,
- 'summary' => 'Create the page',
- ],
- [
- 'target' => $target2,
- 'summary' => 'Create Talk page',
- ],
- [
- 'target' => $target3,
- 'summary' => 'Create the page',
- ],
- ]
- );
- $firstResult = $this->doListRecentChangesRequest( [ 'rclimit' => 2, 'rcprop' => 'title' ] );
- $this->assertArrayHasKey( 'continue', $firstResult[0] );
- $this->assertArrayHasKey( 'rccontinue', $firstResult[0]['continue'] );
- $continuationParam = $firstResult[0]['continue']['rccontinue'];
- $continuedResult = $this->doListRecentChangesRequest(
- [ 'rccontinue' => $continuationParam, 'rcprop' => 'title' ]
- );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'ns' => $target3->getNamespace(),
- 'title' => $this->getPrefixedText( $target3 ),
- ],
- [
- 'type' => 'new',
- 'ns' => $target2->getNamespace(),
- 'title' => $this->getPrefixedText( $target2 ),
- ],
- ],
- $this->getItemsFromApiResponse( $firstResult )
- );
- $this->assertEquals(
- [
- [
- 'type' => 'new',
- 'ns' => $target1->getNamespace(),
- 'title' => $this->getPrefixedText( $target1 )
- ]
- ],
- $this->getItemsFromApiResponse( $continuedResult )
- );
- }
- public function testGeneratorRecentChangesPropInfo_returnsRCPages() {
- $target = new TitleValue( 0, 'ApiQueryRecentChangesIntegrationTestPage' );
- $this->doPageEdit( $this->getLoggedInTestUser(), $target, 'Create the page' );
- $result = $this->doGeneratorRecentChangesRequest( [ 'prop' => 'info' ] );
- $this->assertArrayHasKey( 'query', $result[0] );
- $this->assertArrayHasKey( 'pages', $result[0]['query'] );
- // $result[0]['query']['pages'] uses page ids as keys. Page ids don't matter here, so drop them
- $pages = array_values( $result[0]['query']['pages'] );
- $this->assertCount( 1, $pages );
- $this->assertArraySubset(
- [
- 'ns' => $target->getNamespace(),
- 'title' => $this->getPrefixedText( $target ),
- 'new' => true,
- ],
- $pages[0]
- );
- }
- }
|