mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Echo
synced 2024-12-01 02:46:46 +00:00
9c26779852
These are updated in deferred updates and should not rely on the same User instance being used in those updates. This also avoids convoluted logic in User to set the new edit count for various cases. Change-Id: I0ad3d17107efc7b0e59f1dd54d5733cd1572a2b7
78 lines
2.3 KiB
PHP
78 lines
2.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @group Echo
|
|
* @group Database
|
|
*/
|
|
class MWEchoThankYouEditTest extends MediaWikiTestCase {
|
|
|
|
protected function setUp() {
|
|
parent::setUp();
|
|
$this->tablesUsed[] = 'echo_event';
|
|
$this->tablesUsed[] = 'echo_notification';
|
|
}
|
|
|
|
private function deleteEchoData() {
|
|
$db = MWEchoDbFactory::newFromDefault()->getEchoDb( DB_MASTER );
|
|
$db->delete( 'echo_event', '*', __METHOD__ );
|
|
$db->delete( 'echo_notification', '*', __METHOD__ );
|
|
}
|
|
|
|
/**
|
|
* @covers \EchoHooks::onPageContentSaveComplete
|
|
*/
|
|
public function testFirstEdit() {
|
|
// setup
|
|
$this->deleteEchoData();
|
|
$user = $this->getMutableTestUser()->getUser();
|
|
$title = Title::newFromText( 'Help:MWEchoThankYouEditTest_testFirstEdit' );
|
|
|
|
// action
|
|
$this->edit( $title, $user, 'this is my first edit' );
|
|
|
|
// assertions
|
|
$notificationMapper = new EchoNotificationMapper();
|
|
$notifications = $notificationMapper->fetchByUser( $user, 10, null, [ 'thank-you-edit' ] );
|
|
$this->assertCount( 1, $notifications );
|
|
|
|
/** @var EchoNotification $notification */
|
|
$notification = reset( $notifications );
|
|
$this->assertEquals( 1, $notification->getEvent()->getExtraParam( 'editCount', 'not found' ) );
|
|
}
|
|
|
|
/**
|
|
* @covers \EchoHooks::onPageContentSaveComplete
|
|
*/
|
|
public function testTenthEdit() {
|
|
// setup
|
|
$this->deleteEchoData();
|
|
$user = $this->getMutableTestUser()->getUser();
|
|
$title = Title::newFromText( 'Help:MWEchoThankYouEditTest_testTenthEdit' );
|
|
|
|
// action
|
|
// we could fast-forward the edit-count to speed things up
|
|
// but this is the only way to make sure duplicate notifications
|
|
// are not generated
|
|
for ( $i = 0; $i < 12; $i++ ) {
|
|
$this->edit( $title, $user, "this is edit #$i" );
|
|
// Reload to reflect deferred update
|
|
$user->clearInstanceCache();
|
|
}
|
|
|
|
// assertions
|
|
$notificationMapper = new EchoNotificationMapper();
|
|
$notifications = $notificationMapper->fetchByUser( $user, 10, null, [ 'thank-you-edit' ] );
|
|
$this->assertCount( 2, $notifications );
|
|
|
|
/** @var EchoNotification $notification */
|
|
$notification = reset( $notifications );
|
|
$this->assertEquals( 10, $notification->getEvent()->getExtraParam( 'editCount', 'not found' ) );
|
|
}
|
|
|
|
private function edit( Title $title, User $user, $text ) {
|
|
$page = WikiPage::factory( $title );
|
|
$content = ContentHandler::makeContent( $text, $title );
|
|
$page->doEditContent( $content, 'test', 0, false, $user );
|
|
}
|
|
}
|