| Current File : /home/jvzmxxx/wiki1/extensions/Wikibase/repo/tests/phpunit/includes/ChangePrunerTest.php |
<?php
namespace Wikibase\Test;
use InvalidArgumentException;
use MediaWikiTestCase;
use Wikibase\EntityChange;
use Wikibase\Lib\Reporting\MessageReporter;
use Wikibase\Lib\Reporting\ObservableMessageReporter;
use Wikibase\Repo\ChangePruner;
use Wikibase\Repo\Store\Sql\SqlChangeStore;
/**
* @covers Wikibase\Repo\ChangePruner
*
* @group Database
* @group Wikibase
* @group WikibaseRepo
*
* @license GPL-2.0+
* @author Katie Filbert < aude.wiki@gmail.com >
*/
class ChangePrunerTest extends MediaWikiTestCase {
private $messages = array();
public function testConstructorWithInvalidBatchSize() {
$this->setExpectedException( InvalidArgumentException::class );
new ChangePruner( 0, 0, 0, false );
}
public function testConstructorWithInvalidKeepSeconds() {
$this->setExpectedException( InvalidArgumentException::class );
new ChangePruner( 1, -1, 0, false );
}
public function testConstructorWithInvalidGraceSeconds() {
$this->setExpectedException( InvalidArgumentException::class );
new ChangePruner( 1, 0, -1, false );
}
public function testPrune() {
$pruner = new ChangePruner( 1, 1, 1, false );
$dbw = wfGetDB( DB_MASTER );
$dbw->delete( 'wb_changes', '*' );
$this->assertEquals( 0, $dbw->selectRowCount( 'wb_changes' ),
'sanity check: wb_changes table is empty' );
$this->addTestChanges();
$this->assertEquals( 2, $dbw->selectRowCount( 'wb_changes' ),
'sanity check: 2 changes added to wb_changes'
);
$pruner->setMessageReporter( $this->newMessageReporter() );
$pruner->prune();
$this->assertEquals( 6, count( $this->messages ), 'pruner has reported 6 messages' );
$this->assertContains( 'pruning entries older than 2015-01-01T00:00:06Z', $this->messages[0] );
$this->assertContains( '1 rows pruned', $this->messages[1] );
$this->assertContains( 'pruning entries older than 2015-01-01T00:03:01Z', $this->messages[2] );
$this->assertContains( '1 rows pruned', $this->messages[3] );
$this->assertContains( '0 rows pruned', $this->messages[5] );
$this->assertEquals( 0, $dbw->selectRowCount( 'wb_changes' ), 'wb_changes table is empty' );
}
private function addTestChanges() {
$changeStore = new SqlChangeStore( wfGetLB() );
$change = new EntityChange( $this->getChangeRowData( '20150101000005' ) );
$changeStore->saveChange( $change );
$change = new EntityChange( $this->getChangeRowData( '20150101000300' ) );
$changeStore->saveChange( $change );
}
private function getChangeRowData( $timestamp ) {
return array(
'type' => 'wikibase-item~update',
'time' => $timestamp,
'user_id' => 0,
'revision_id' => 9002,
'object_id' => 'Q9000',
'info' => array( 'diff' => array() )
);
}
/**
* @return MessageReporter
*/
private function newMessageReporter() {
$reporter = new ObservableMessageReporter();
$reporter->registerReporterCallback(
function ( $message ) {
$this->messages[] = $message;
}
);
return $reporter;
}
}