summaryrefslogtreecommitdiff
blob: 5325c5cdd75733013e3631ae970334316edcb400 (plain)
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
74
75
<?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" );
		}

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