Current File : /home/jvzmxxx/wiki1/extensions/Echo/tests/phpunit/BundlerTest.php
<?php

class BundlerTest extends MediaWikiTestCase {

	public function testBundle() {
		$read = true;
		$unread = false;
		$n1 = $this->createNotificationForBundling( 'bundle_hash_1', 'timestamp_4', $read );
		$n2 = $this->createNotificationForBundling( 'bundle_hash_1', 'timestamp_1', $read );
		$n3 = $this->createNotificationForBundling( 'bundle_hash_2', 'timestamp_3', $unread );
		$n4 = $this->createNotificationForBundling( 'bundle_hash_2', 'timestamp_2', $unread );
		$n5 = $this->createNotificationForBundling( 'bundle_hash_2', 'timestamp_5', $read );
		$notifications = array( $n1, $n2, $n3, $n4, $n5 );

		$bundler = new Bundler();
		$bundledNotifications = $bundler->bundle( $notifications );

		$this->assertCount( 4, $bundledNotifications );
		$this->assertSame( $n5, $bundledNotifications[0] );
		$this->assertSame( $n1, $bundledNotifications[1] );
		$this->assertSame( $n3, $bundledNotifications[2] );
		$this->assertCount( 1, $bundledNotifications[2]->getBundledNotifications() );
		$this->assertSame( $n4, $bundledNotifications[2]->getBundledNotifications()[0] );
		$this->assertSame( $n2, $bundledNotifications[3] );

	}

	private function createNotificationForBundling( $bundleHash, $timestamp, $readStatus ) {
		$mock = $this->getMockBuilder( 'EchoNotification' )
			->disableOriginalConstructor()
			->setMethods( array(
				'getBundlingKey',
				'getSortingKey',
				'canBeBundled',
			) )
			->getMock();

		$mock->method( 'getBundlingKey' )->willReturn( $bundleHash );
		$mock->method( 'getSortingKey' )->willReturn( $timestamp );
		$mock->method( 'canBeBundled' )->willReturn( !$readStatus );

		return $mock;
	}

}