/ */ class P4Cms_NotificationsTest extends TestCase { /** * Test usage scenarios. */ public function testNotifications() { // make sure there are currently no notifications. $notifications = P4Cms_Notifications::fetch(); $this->assertTrue(isset($notifications), 'Expect initial notifications to be set.'); $this->assertTrue(is_array($notifications), 'Expect initial notifications to be an array.'); $this->assertEquals(0, count($notifications), 'Expect no initial notifications'); // test Notifications' facilities to measure the same things $this->assertFalse(P4Cms_Notifications::exist(), 'Expect initial notifications to not exist.'); $this->assertEquals(0, P4Cms_Notifications::getCount(), 'Expect initial notifications total to be zero.'); // now add a notification P4Cms_Notifications::add('Test message'); $this->assertTrue(P4Cms_Notifications::exist(), 'Expect notifications to exist after add.'); $this->assertEquals(1, P4Cms_Notifications::getCount(), 'Expect notifications total to be one after add.'); // fetch without clearing $notifications = P4Cms_Notifications::fetch(null, false); $this->assertSame( array( 'info' => array( 'Test message', ), ), $notifications, 'Expected notifications after add.' ); // make sure notification still exist after fetch without clearing $this->assertTrue(P4Cms_Notifications::exist(), 'Expect notifications to exist after add.'); $this->assertEquals(1, P4Cms_Notifications::getCount(), 'Expect notifications total to be one after add.'); // fetch with clearing $notifications = P4Cms_Notifications::fetch(); $this->assertSame( array('info' => array('Test message')), $notifications, 'Expected notifications after add.' ); // make sure notification still exists after fetch without clearing $this->assertFalse( P4Cms_Notifications::exist(), 'Expect notifications to not exist after fetch with clearing.' ); $this->assertEquals( 0, P4Cms_Notifications::getCount(), 'Expect notifications total to be zero after fetch with clearing.' ); } /** * Test bulk addition of notifications. */ public function testBulkNotifications() { // clear out existing notifications, if any. $notifications = P4Cms_Notifications::fetch(); $this->assertFalse( P4Cms_Notifications::exist(), 'Expect notifications to not exist after fetch with clearing.' ); $this->assertEquals( 0, P4Cms_Notifications::getCount(), 'Expect notifications total to be zero after fetch with clearing.' ); P4Cms_Notifications::add(array('one', 'two', 'three')); $this->assertTrue( P4Cms_Notifications::exist(), 'Expect notifications to exist after bulk add.' ); $this->assertEquals( 3, P4Cms_Notifications::getCount(), 'Expect notifications total to be three after bulk add.' ); $notifications = P4Cms_Notifications::fetch(); $this->assertSame( array('info' => array('one', 'two', 'three')), $notifications, 'Expected notifications after bulk add.' ); } /** * Test multiple notifications with differing severities. */ public function testSeverities() { // clear out existing notifications, if any. $notifications = P4Cms_Notifications::fetch(); $this->assertFalse( P4Cms_Notifications::exist(), 'Expect notifications to not exist after fetch with clearing.' ); $this->assertEquals( 0, P4Cms_Notifications::getCount(), 'Expect notifications total to be zero after fetch with clearing.' ); // add notifications P4Cms_Notifications::add('a warning', 'warn'); P4Cms_Notifications::add('an error', 'error'); P4Cms_Notifications::add('information', 'info'); P4Cms_Notifications::add('another warning', 'warn'); P4Cms_Notifications::add('arbitrary notification', 'arbitrary'); // overall existance/total $this->assertTrue(P4Cms_Notifications::exist(), 'Expect notifications to exist.'); $this->assertEquals(5, P4Cms_Notifications::getCount(), 'Expect notifications total to be five.'); $tests = array( 'info' => array('total' => 1, 'exist' => true), 'warn' => array('total' => 2, 'exist' => true), 'error' => array('total' => 1, 'exist' => true), 'arbitrary' => array('total' => 1, 'exist' => true), 'nonexistant' => array('total' => 0, 'exist' => false), ); foreach ($tests as $severity => $values) { $not = $values['exist'] ? '' : ' not'; $this->assertSame( $values['exist'], P4Cms_Notifications::exist($severity), "Expect $severity notifications to$not exist." ); $this->assertEquals( $values['total'], P4Cms_Notifications::getCount($severity), "Expect $severity notifications total to be {$values['total']}." ); } // fetch global notifications without clear $notifications = P4Cms_Notifications::fetch(null, false); $this->assertSame( array( 'warn' => array('a warning', 'another warning'), 'error' => array('an error'), 'info' => array('information'), 'arbitrary' => array('arbitrary notification'), ), $notifications, 'Expected global notifications.' ); // fetch warn notifications with clear $notifications = P4Cms_Notifications::fetch('warn'); $this->assertSame( array('a warning', 'another warning'), $notifications, 'Expected warn notifications.' ); // fetch global notifications without clear $notifications = P4Cms_Notifications::fetch(null, false); $this->assertSame( array( 'warn' => array(), 'error' => array('an error'), 'info' => array('information'), 'arbitrary' => array('arbitrary notification'), ), $notifications, 'Expected global notifications after removing warn notifications.' ); // fetch arbitrary notifications without clear $notifications = P4Cms_Notifications::fetch('arbitrary', false); $this->assertSame( array('arbitrary notification'), $notifications, 'Expected arbitrary notification.' ); // fetch global notifications without clear $notifications = P4Cms_Notifications::fetch(null, false); $this->assertSame( array( 'warn' => array(), 'error' => array('an error'), 'info' => array('information'), 'arbitrary' => array('arbitrary notification'), ), $notifications, 'Expected global notifications after keeping arbitrary notifications.' ); } }