2019-04-05 15:17:56 +00:00
|
|
|
<?php
|
|
|
|
|
|
|
|
|
|
use MediaWiki\MediaWikiServices;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Class JobRunnerTest
|
|
|
|
|
*
|
|
|
|
|
* @group Database
|
|
|
|
|
* @covers JobRunner
|
|
|
|
|
*/
|
|
|
|
|
class JobRunnerTest extends MediaWikiIntegrationTestCase {
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @var Title
|
|
|
|
|
*/
|
|
|
|
|
private $page;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @var JobRunner
|
|
|
|
|
*/
|
|
|
|
|
private $jobRunner;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @var DeletePageJob
|
|
|
|
|
*/
|
|
|
|
|
private $deletePageJob;
|
|
|
|
|
|
2021-07-22 03:11:47 +00:00
|
|
|
protected function setUp(): void {
|
2019-04-05 15:17:56 +00:00
|
|
|
parent::setUp();
|
|
|
|
|
|
|
|
|
|
$str = wfRandomString( 10 );
|
|
|
|
|
$this->page = $this->insertPage( $str )['title'];
|
|
|
|
|
|
|
|
|
|
$this->assertTrue( $this->page->exists(), 'Sanity: The created page exists' );
|
|
|
|
|
|
2020-02-07 02:24:00 +00:00
|
|
|
$this->jobRunner = MediaWikiServices::getInstance()->getJobRunner();
|
2019-04-05 15:17:56 +00:00
|
|
|
$jobParams = [
|
|
|
|
|
'namespace' => $this->page->getNamespace(),
|
|
|
|
|
'title' => $this->page->getDBkey(),
|
|
|
|
|
'wikiPageId' => $this->page->getArticleID(),
|
|
|
|
|
'requestId' => WebRequest::getRequestId(),
|
|
|
|
|
'reason' => 'Testing delete job',
|
|
|
|
|
'suppress' => false,
|
|
|
|
|
'userId' => $this->getTestUser()->getUser()->getId(),
|
|
|
|
|
'tags' => json_encode( [] ),
|
|
|
|
|
'logsubtype' => 'delete',
|
|
|
|
|
];
|
|
|
|
|
$this->deletePageJob = new DeletePageJob( $jobParams );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* @dataProvider provideTestRun
|
|
|
|
|
*/
|
|
|
|
|
public function testRun( $options, $expectedVal ) {
|
|
|
|
|
JobQueueGroup::singleton()->push( $this->deletePageJob );
|
|
|
|
|
|
|
|
|
|
$results = $this->jobRunner->run( $options );
|
|
|
|
|
|
|
|
|
|
$this->assertEquals( $results['reached'], $expectedVal );
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function provideTestRun() {
|
|
|
|
|
return [
|
|
|
|
|
[ [], 'none-ready' ],
|
|
|
|
|
[ [ 'type' => true ], 'none-possible' ],
|
|
|
|
|
[ [ 'maxJobs' => 1 ], 'job-limit' ],
|
|
|
|
|
[ [ 'maxTime' => -1 ], 'time-limit' ],
|
|
|
|
|
[ [ 'type' => 'deletePage', 'throttle' => false ], 'none-ready' ]
|
|
|
|
|
];
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public function testExecuteJob() {
|
2020-02-07 02:24:00 +00:00
|
|
|
$results = $this->jobRunner->executeJob( $this->deletePageJob );
|
2019-04-05 15:17:56 +00:00
|
|
|
|
|
|
|
|
$this->assertIsInt( $results['timeMs'] );
|
|
|
|
|
$this->assertTrue( $results['status'] );
|
|
|
|
|
$this->assertIsArray( $results['caught'] );
|
|
|
|
|
$this->assertNull( $results['error'] );
|
|
|
|
|
|
2020-11-03 08:57:13 +00:00
|
|
|
$this->assertTrue( $this->page->hasDeletedEdits() );
|
2019-04-05 15:17:56 +00:00
|
|
|
}
|
|
|
|
|
}
|