* @license GNU General Public License, version 2 (GPL-2.0) * * For full copyright and license information, please see * the docs/CREDITS.txt file. * */ require_once dirname(__FILE__) . '/base.php'; class phpbb_notification_test extends phpbb_tests_notification_base { protected $notifications, $db, $container, $user, $config, $auth, $cache; public function getDataSet() { return $this->createXMLDataSet(dirname(__FILE__) . '/fixtures/notification.xml'); } public function test_get_notification_type_id() { // They should be inserted the first time $post_type_id = $this->notifications->get_notification_type_id('notification.type.post'); $quote_type_id = $this->notifications->get_notification_type_id('notification.type.quote'); $test_type_id = $this->notifications->get_notification_type_id('test'); self::assertEquals(array( 'test' => $test_type_id, 'notification.type.quote' => $quote_type_id, 'notification.type.post' => $post_type_id, ), $this->notifications->get_notification_type_ids(array( 'test', 'notification.type.quote', 'notification.type.post', ) )); self::assertEquals($quote_type_id, $this->notifications->get_notification_type_id('notification.type.quote')); try { self::assertEquals(false, $this->notifications->get_notification_type_id('fail')); self::fail('Non-existent type should throw an exception'); } catch (Exception $e) {} } public function test_get_subscription_types() { $subscription_types = $this->notifications->get_subscription_types(); self::assertArrayHasKey('NOTIFICATION_GROUP_MISCELLANEOUS', $subscription_types); self::assertArrayHasKey('NOTIFICATION_GROUP_POSTING', $subscription_types); self::assertArrayHasKey('notification.type.bookmark', $subscription_types['NOTIFICATION_GROUP_POSTING']); self::assertArrayHasKey('notification.type.post', $subscription_types['NOTIFICATION_GROUP_POSTING']); self::assertArrayHasKey('notification.type.quote', $subscription_types['NOTIFICATION_GROUP_POSTING']); self::assertArrayHasKey('notification.type.topic', $subscription_types['NOTIFICATION_GROUP_POSTING']); self::assertArrayHasKey('notification.type.pm', $subscription_types['NOTIFICATION_GROUP_MISCELLANEOUS']); //get_subscription_types //get_subscription_methods } public function test_subscriptions() { $expected_subscriptions = array( 'notification.type.post' => array('notification.method.board'), 'notification.type.topic' => array('notification.method.board'), 'notification.type.quote' => array('notification.method.board'), 'notification.type.bookmark' => array('notification.method.board'), 'test' => array('notification.method.board'), 'notification.type.pm' => array('notification.method.board'), ); $subscriptions = $this->notifications->get_global_subscriptions(2); foreach ($expected_subscriptions as $item_type => $methods) { self::assertArrayHasKey($item_type, $subscriptions); $this->assert_array_content_equals($methods, $subscriptions[$item_type]); } foreach ($subscriptions as $item_type => $methods) { $this->assert_array_content_equals($methods, $expected_subscriptions[$item_type]); } $this->notifications->delete_subscription('notification.type.post', 0, 'notification.method.board', 2); self::assertArrayNotHasKey('notification.type.post', $this->notifications->get_global_subscriptions(2)); $this->notifications->add_subscription('notification.type.post', 0, 'notification.method.board', 2); self::assertArrayHasKey('notification.type.post', $this->notifications->get_global_subscriptions(2)); } public function test_notifications() { $this->db->sql_query('DELETE FROM phpbb_notification_types'); $types = array('notification.type.quote', 'notification.type.bookmark', 'notification.type.post', 'test'); foreach ($types as $id => $type) { $this->getConnection()->createQueryTable('insertNotification', 'INSERT INTO phpbb_notification_types ' . $this->db->sql_build_array('INSERT', array( 'notification_type_id' => ($id + 1), 'notification_type_name' => $type, 'notification_type_enabled' => 1, )) ); } // Used to test post notifications later $this->db->sql_query('INSERT INTO ' . TOPICS_WATCH_TABLE . ' ' . $this->db->sql_build_array('INSERT', array( 'topic_id' => 2, 'notify_status' => NOTIFY_YES, 'user_id' => 0, ))); self::assertEquals(array( 'notifications' => array(), 'unread_count' => 0, 'total_count' => 0, ), $this->notifications->load_notifications('notification.method.board', array( 'count_unread' => true, ))); $this->notifications->add_notifications('test', array( 'post_id' => '1', 'topic_id' => '1', 'post_time' => 1349413321, )); $this->notifications->add_notifications('test', array( 'post_id' => '2', 'topic_id' => '2', 'post_time' => 1349413322, )); $this->notifications->add_notifications('test', array( 'post_id' => '3', 'topic_id' => '2', 'post_time' => 1349413323, )); $this->notifications->add_notifications(array('notification.type.quote', 'notification.type.bookmark', 'notification.type.post', 'test'), array( 'post_id' => '4', 'topic_id' => '2', 'post_time' => 1349413324, 'poster_id' => 2, 'topic_title' => 'test-title', 'post_subject' => 'Re: test-title', 'forum_id' => 2, 'forum_name' => 'Your first forum', )); $this->db->sql_query('INSERT INTO ' . BOOKMARKS_TABLE . ' ' . $this->db->sql_build_array('INSERT', array( 'topic_id' => 2, 'user_id' => 0, ))); $this->notifications->add_notifications(array('notification.type.quote', 'notification.type.bookmark', 'notification.type.post', 'test'), array( 'post_id' => '5', 'topic_id' => '2', 'post_time' => 1349413325, 'poster_id' => 2, 'topic_title' => 'test-title', 'post_subject' => 'Re: test-title', 'forum_id' => 2, 'forum_name' => 'Your first forum', )); $this->notifications->delete_subscription('test'); $this->notifications->add_notifications('test', array( 'post_id' => '6', 'topic_id' => '2', 'post_time' => 1349413326, )); $this->assert_notifications( array( array( 'item_id' => 1, 'item_parent_id' => 1, 'user_id' => 0, 'notification_read' => 0, 'notification_time' => 1349413321, 'notification_data' => array(), ), array( 'item_id' => 2, 'item_parent_id' => 2, 'user_id' => 0, 'notification_read' => 0, 'notification_time' => 1349413322, 'notification_data' => array(), ), array( 'item_id' => 3, 'item_parent_id' => 2, 'user_id' => 0, 'notification_read' => 0, 'notification_time' => 1349413323, 'notification_data' => array(), ), array( 'item_id' => 4, 'item_parent_id' => 2, 'user_id' => 0, 'notification_read' => 0, 'notification_time' => 1349413324, 'notification_data' => array( 'poster_id' => 2, 'topic_title' => 'test-title', 'post_subject' => 'Re: test-title', 'post_username' => '', 'forum_id' => 2, 'forum_name' => 'Your first forum', ), ), array( 'item_id' => 5, 'item_parent_id' => 2, 'user_id' => 0, 'notification_read' => 0, 'notification_time' => 1349413325, 'notification_data' => array( 'poster_id' => 2, 'topic_title' => 'test-title', 'post_subject' => 'Re: test-title', 'post_username' => '', 'forum_id' => 2, 'forum_name' => 'Your first forum', ), ), ) ); // Now test updating ------------------------------- $this->notifications->update_notifications('test', array( 'post_id' => '1', 'topic_id' => '2', // change parent_id 'post_time' => 1349413321, )); $this->notifications->update_notifications('test', array( 'post_id' => '3', 'topic_id' => '2', 'post_time' => 1234, // change time )); $this->notifications->update_notifications(array('notification.type.quote', 'notification.type.bookmark', 'notification.type.post', 'test'), array( 'post_id' => '5', 'topic_id' => '2', 'poster_id' => 2, 'topic_title' => 'test-title2', // change topic_title 'post_subject' => 'Re: test-title2', // change post_subject 'forum_id' => 3, // change forum_id 'forum_name' => 'Your second forum', // change forum_name )); $this->assert_notifications( array( array( 'item_id' => 3, 'item_parent_id' => 2, 'user_id' => 0, 'notification_read' => 0, 'notification_time' => 1234, 'notification_data' => array(), ), array( 'item_id' => 1, 'item_parent_id' => 2, 'user_id' => 0, 'notification_read' => 0, 'notification_time' => 1349413321, 'notification_data' => array(), ), array( 'item_id' => 2, 'item_parent_id' => 2, 'user_id' => 0, 'notification_read' => 0, 'notification_time' => 1349413322, 'notification_data' => array(), ), array( 'item_id' => 4, 'item_parent_id' => 2, 'user_id' => 0, 'notification_read' => 0, 'notification_time' => 1349413324, 'notification_data' => array( 'poster_id' => 2, 'topic_title' => 'test-title', 'post_subject' => 'Re: test-title', 'post_username' => '', 'forum_id' => 2, 'forum_name' => 'Your first forum', ), ), array( 'item_id' => 5, 'item_parent_id' => 2, 'user_id' => 0, 'notification_read' => 0, 'notification_time' => 1349413325, 'notification_data' => array( 'poster_id' => 2, 'topic_title' => 'test-title2', 'post_subject' => 'Re: test-title2', 'post_username' => '', 'forum_id' => 3, 'forum_name' => 'Your second forum', ), ), ) ); } }