wiki.techinc.nl/tests/phpunit/includes/page/UndeletePageTest.php
Umherirrender 388b0374fa tests: Use namespaced classes
Changes to the use statements done automatically via script
Addition of missing use statements and changes to docs done manually

Change-Id: Ib326ae1e5c8409a98398c721e8b8ce42c73bd012
2023-12-11 15:59:55 +01:00

119 lines
3.8 KiB
PHP

<?php
use MediaWiki\CommentStore\CommentStoreComment;
use MediaWiki\Page\UndeletePage;
use MediaWiki\Revision\SlotRecord;
use MediaWiki\Title\Title;
use MediaWiki\User\UserIdentityValue;
use Wikimedia\IPUtils;
/**
* @group Database
* @coversDefaultClass \MediaWiki\Page\UndeletePage
*/
class UndeletePageTest extends MediaWikiIntegrationTestCase {
/**
* @var array
*/
private $pages = [];
/**
* A logged out user who edited the page before it was archived.
* @var string
*/
private $ipEditor;
protected function setUp(): void {
parent::setUp();
$this->ipEditor = '2001:DB8:0:0:0:0:0:1';
$this->setupPage( 'UndeletePageTest_thePage', NS_MAIN, ' ' );
$this->setupPage( 'UndeletePageTest_thePage', NS_TALK, ' ' );
}
/**
* @param string $titleText
* @param int $ns
* @param string $content
*/
private function setupPage( string $titleText, int $ns, string $content ): void {
$title = Title::makeTitle( $ns, $titleText );
$page = $this->getServiceContainer()->getWikiPageFactory()->newFromTitle( $title );
$performer = static::getTestUser()->getUser();
$content = ContentHandler::makeContent( $content, $page->getTitle(), CONTENT_MODEL_WIKITEXT );
$updater = $page->newPageUpdater( UserIdentityValue::newAnonymous( $this->ipEditor ) )
->setContent( SlotRecord::MAIN, $content );
$revisionRecord = $updater->saveRevision( CommentStoreComment::newUnsavedComment( "testing" ) );
if ( !$updater->wasSuccessful() ) {
$this->fail( $updater->getStatus()->getWikiText() );
}
$this->pages[] = [ 'page' => $page, 'revId' => $revisionRecord->getId() ];
$this->deletePage( $page, '', $performer );
}
/**
* @covers ::undeleteUnsafe
* @covers ::undeleteRevisions
*/
public function testUndeleteRevisions() {
// TODO: MCR: Test undeletion with multiple slots. Check that slots remain untouched.
$revisionStore = $this->getServiceContainer()->getRevisionStore();
// First make sure old revisions are archived
$dbr = $this->getDb();
foreach ( [ 0, 1 ] as $key ) {
$row = $revisionStore->newArchiveSelectQueryBuilder( $dbr )
->joinComment()
->where( [ 'ar_rev_id' => $this->pages[$key]['revId'] ] )
->caller( __METHOD__ )->fetchRow();
$this->assertEquals( $this->ipEditor, $row->ar_user_text );
// Should not be in revision
$row = $dbr->newSelectQueryBuilder()
->select( '1' )
->from( 'revision' )
->where( [ 'rev_id' => $this->pages[$key]['revId'] ] )
->fetchRow();
$this->assertFalse( $row );
// Should not be in ip_changes
$row = $dbr->newSelectQueryBuilder()
->select( '1' )
->from( 'ip_changes' )
->where( [ 'ipc_rev_id' => $this->pages[$key]['revId'] ] )
->fetchRow();
$this->assertFalse( $row );
}
// Restore the page
$undeletePage = $this->getServiceContainer()->getUndeletePageFactory()->newUndeletePage(
$this->pages[0]['page'],
$this->getTestSysop()->getUser()
);
$status = $undeletePage->setUndeleteAssociatedTalk( true )->undeleteUnsafe( '' );
$this->assertEquals( 2, $status->value[UndeletePage::REVISIONS_RESTORED] );
// check subject page and talk page are both back in the revision table
foreach ( [ 0, 1 ] as $key ) {
$row = $revisionStore->newSelectQueryBuilder( $dbr )
->where( [ 'rev_id' => $this->pages[$key]['revId'] ] )
->caller( __METHOD__ )->fetchRow();
$this->assertNotFalse( $row, 'row exists in revision table' );
$this->assertEquals( $this->ipEditor, $row->rev_user_text );
// Should be back in ip_changes
$row = $dbr->newSelectQueryBuilder()
->select( [ 'ipc_hex' ] )
->from( 'ip_changes' )
->where( [ 'ipc_rev_id' => $this->pages[$key]['revId'] ] )
->fetchRow();
$this->assertNotFalse( $row, 'row exists in ip_changes table' );
$this->assertEquals( IPUtils::toHex( $this->ipEditor ), $row->ipc_hex );
}
}
}