3 use Wikimedia\TestingAccessWrapper
;
8 class SiteStatsUpdateTest
extends MediaWikiTestCase
{
10 * @covers SiteStatsUpdate::factory
11 * @covers SiteStatsUpdate::merge
13 public function testFactoryAndMerge() {
14 $update1 = SiteStatsUpdate
::factory( [ 'pages' => 1, 'users' => 2 ] );
15 $update2 = SiteStatsUpdate
::factory( [ 'users' => 1, 'images' => 1 ] );
17 $update1->merge( $update2 );
18 $wrapped = TestingAccessWrapper
::newFromObject( $update1 );
20 $this->assertEquals( 1, $wrapped->pages
);
21 $this->assertEquals( 3, $wrapped->users
);
22 $this->assertEquals( 1, $wrapped->images
);
23 $this->assertEquals( 0, $wrapped->edits
);
24 $this->assertEquals( 0, $wrapped->articles
);
28 * @covers SiteStatsUpdate::doUpdate()
29 * @covers SiteStatsInit::refresh()
31 public function testDoUpdate() {
32 $this->setMwGlobals( 'wgSiteStatsAsyncFactor', false );
33 $this->setMwGlobals( 'wgCommandLineMode', false ); // disable opportunistic updates
35 $dbw = wfGetDB( DB_MASTER
);
36 $statsInit = new SiteStatsInit( $dbw );
37 $statsInit->refresh();
39 $ei = SiteStats
::edits(); // trigger load
40 $pi = SiteStats
::pages();
41 $ui = SiteStats
::users();
42 $fi = SiteStats
::images();
43 $ai = SiteStats
::articles();
45 $this->assertEquals( 0, DeferredUpdates
::pendingUpdatesCount() );
47 $dbw->begin( __METHOD__
); // block opportunistic updates
49 DeferredUpdates
::addUpdate(
50 SiteStatsUpdate
::factory( [ 'pages' => 2, 'images' => 1, 'edits' => 2 ] )
52 $this->assertEquals( 1, DeferredUpdates
::pendingUpdatesCount() );
56 $this->assertEquals( $pi, SiteStats
::pages(), 'page count' );
57 $this->assertEquals( $ei, SiteStats
::edits(), 'edit count' );
58 $this->assertEquals( $ui, SiteStats
::users(), 'user count' );
59 $this->assertEquals( $fi, SiteStats
::images(), 'file count' );
60 $this->assertEquals( $ai, SiteStats
::articles(), 'article count' );
61 $this->assertEquals( 1, DeferredUpdates
::pendingUpdatesCount() );
63 $dbw->commit( __METHOD__
);
65 $this->assertEquals( 1, DeferredUpdates
::pendingUpdatesCount() );
66 DeferredUpdates
::doUpdates();
67 $this->assertEquals( 0, DeferredUpdates
::pendingUpdatesCount() );
70 $this->assertEquals( $pi +
2, SiteStats
::pages(), 'page count' );
71 $this->assertEquals( $ei +
2, SiteStats
::edits(), 'edit count' );
72 $this->assertEquals( $ui, SiteStats
::users(), 'user count' );
73 $this->assertEquals( $fi +
1, SiteStats
::images(), 'file count' );
74 $this->assertEquals( $ai, SiteStats
::articles(), 'article count' );
76 $statsInit = new SiteStatsInit();
77 $statsInit->refresh();