mediawiki-extensions-Echo/tests/phpunit/ThankYouEditTest.php
Aaron Schulz 9c26779852 Reload the test user instance before checking the edit count
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
2018-10-23 11:01:35 -07:00

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 );
}
}