1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
<?php
use MediaWiki\Deferred\DeferredUpdates;
use MediaWiki\Deferred\SiteStatsUpdate;
use MediaWiki\SiteStats\SiteStats;
use MediaWiki\SiteStats\SiteStatsInit;
use Wikimedia\TestingAccessWrapper;
/**
* @group Database
* @covers \MediaWiki\Deferred\SiteStatsUpdate
* @covers \MediaWiki\SiteStats\SiteStats
* @covers \MediaWiki\SiteStats\SiteStatsInit
*/
class SiteStatsUpdateTest extends MediaWikiIntegrationTestCase {
public function testFactoryAndMerge() {
$update1 = SiteStatsUpdate::factory( [ 'pages' => 1, 'users' => 2 ] );
$update2 = SiteStatsUpdate::factory( [ 'users' => 1, 'images' => 1 ] );
$update1->merge( $update2 );
$wrapped = TestingAccessWrapper::newFromObject( $update1 );
$this->assertSame( 1, $wrapped->pages );
$this->assertEquals( 3, $wrapped->users );
$this->assertSame( 1, $wrapped->images );
$this->assertSame( 0, $wrapped->edits );
$this->assertSame( 0, $wrapped->articles );
}
public function testDoUpdate() {
$dbw = $this->getDb();
$statsInit = new SiteStatsInit( $dbw );
$statsInit->refresh();
$ei = SiteStats::edits(); // trigger load
$pi = SiteStats::pages();
$ui = SiteStats::users();
$fi = SiteStats::images();
$ai = SiteStats::articles();
$this->assertSame( 0, DeferredUpdates::pendingUpdatesCount() );
$dbw->begin( __METHOD__ ); // block opportunistic updates
DeferredUpdates::addUpdate(
SiteStatsUpdate::factory( [ 'pages' => 2, 'images' => 1, 'edits' => 2 ] )
);
$this->assertSame( 1, DeferredUpdates::pendingUpdatesCount() );
// Still the same
SiteStats::unload();
$this->assertEquals( $pi, SiteStats::pages(), 'page count' );
$this->assertEquals( $ei, SiteStats::edits(), 'edit count' );
$this->assertEquals( $ui, SiteStats::users(), 'user count' );
$this->assertEquals( $fi, SiteStats::images(), 'file count' );
$this->assertEquals( $ai, SiteStats::articles(), 'article count' );
$this->assertSame( 1, DeferredUpdates::pendingUpdatesCount() );
// This also notifies DeferredUpdates to do an opportunistic run
$dbw->commit( __METHOD__ );
$this->assertSame( 0, DeferredUpdates::pendingUpdatesCount() );
SiteStats::unload();
$this->assertEquals( $pi + 2, SiteStats::pages(), 'page count' );
$this->assertEquals( $ei + 2, SiteStats::edits(), 'edit count' );
$this->assertEquals( $ui, SiteStats::users(), 'user count' );
$this->assertEquals( $fi + 1, SiteStats::images(), 'file count' );
$this->assertEquals( $ai, SiteStats::articles(), 'article count' );
$statsInit = new SiteStatsInit();
$statsInit->refresh();
}
}
|