diff --git a/rhodecode/tests/functional/test_admin_notifications.py b/rhodecode/tests/functional/test_admin_notifications.py
new file mode 100644
--- /dev/null
+++ b/rhodecode/tests/functional/test_admin_notifications.py
@@ -0,0 +1,117 @@
+from rhodecode.tests import *
+from rhodecode.model.db import Notification, User, UserNotification
+
+from rhodecode.model.user import UserModel
+from rhodecode.model.notification import NotificationModel
+
+class TestNotificationsController(TestController):
+
+ def test_index(self):
+ self.log_user()
+
+
+ u1 = UserModel().create_or_update(username='u1', password='qweqwe',
+ email='u1@rhodecode.org',
+ name='u1', lastname='u1').user_id
+ u2 = UserModel().create_or_update(username='u2', password='qweqwe',
+ email='u2@rhodecode.org',
+ name='u2', lastname='u2').user_id
+
+ response = self.app.get(url('notifications'))
+ self.assertTrue('''
No notifications here yet
'''
+ in response.body)
+
+ cur_user = self._get_logged_user()
+
+ NotificationModel().create(created_by=u1, subject=u'test',
+ body=u'notification_1',
+ recipients=[cur_user])
+ response = self.app.get(url('notifications'))
+
+ self.assertTrue(u'notification_1' in response.body)
+
+ User.delete(u1)
+ User.delete(u2)
+
+# def test_index_as_xml(self):
+# response = self.app.get(url('formatted_notifications', format='xml'))
+#
+# def test_create(self):
+# response = self.app.post(url('notifications'))
+#
+# def test_new(self):
+# response = self.app.get(url('new_notification'))
+#
+# def test_new_as_xml(self):
+# response = self.app.get(url('formatted_new_notification', format='xml'))
+#
+# def test_update(self):
+# response = self.app.put(url('notification', notification_id=1))
+#
+# def test_update_browser_fakeout(self):
+# response = self.app.post(url('notification', notification_id=1), params=dict(_method='put'))
+
+ def test_delete(self):
+ self.log_user()
+ cur_user = self._get_logged_user()
+
+ u1 = UserModel().create_or_update(username='u1', password='qweqwe',
+ email='u1@rhodecode.org',
+ name='u1', lastname='u1')
+ u2 = UserModel().create_or_update(username='u2', password='qweqwe',
+ email='u2@rhodecode.org',
+ name='u2', lastname='u2')
+
+ # make two notifications
+ notification = NotificationModel().create(created_by=cur_user,
+ subject=u'test',
+ body=u'hi there',
+ recipients=[cur_user, u1, u2])
+
+ u1 = User.get(u1.user_id)
+ u2 = User.get(u2.user_id)
+
+ # check DB
+ self.assertEqual(u1.notifications, [notification])
+ self.assertEqual(u2.notifications, [notification])
+ cur_usr_id = cur_user.user_id
+ response = self.app.delete(url('notification',
+ notification_id=cur_usr_id))
+
+ cur_user = self._get_logged_user()
+ self.assertEqual(cur_user.notifications, [])
+
+ User.delete(u1.user_id)
+ User.delete(u2.user_id)
+
+
+# def test_delete_browser_fakeout(self):
+# response = self.app.post(url('notification', notification_id=1), params=dict(_method='delete'))
+
+ def test_show(self):
+ self.log_user()
+ cur_user = self._get_logged_user()
+ u1 = UserModel().create_or_update(username='u1', password='qweqwe',
+ email='u1@rhodecode.org',
+ name='u1', lastname='u1')
+ u2 = UserModel().create_or_update(username='u2', password='qweqwe',
+ email='u2@rhodecode.org',
+ name='u2', lastname='u2')
+
+ notification = NotificationModel().create(created_by=cur_user,
+ subject='test',
+ body='hi there',
+ recipients=[cur_user, u1, u2])
+
+ response = self.app.get(url('notification',
+ notification_id=notification.notification_id))
+
+# def test_show_as_xml(self):
+# response = self.app.get(url('formatted_notification', notification_id=1, format='xml'))
+#
+# def test_edit(self):
+# response = self.app.get(url('edit_notification', notification_id=1))
+#
+# def test_edit_as_xml(self):
+# response = self.app.get(url('formatted_edit_notification', notification_id=1, format='xml'))
+