class TestNotificationHandling(ActivityTestCase):

    def setUp(self):
        super(TestNotificationHandling, self).setUp()

        self.center = NotificationCenter()

        self.peter = create(Builder('ogds_user').id('peter'))
        self.peter = create(Builder('watcher').having(actorid='peter'))
        self.hugo = create(Builder('ogds_user').id('hugo'))
        self.hugo = create(Builder('watcher').having(actorid='hugo'))

        self.resource_a = create(Builder('resource')
                                 .oguid('fd:123')
                                 .watchers([self.hugo, self.peter]))
        self.resource_b = create(Builder('resource')
                                 .oguid('fd:456')
                                 .watchers([self.hugo]))
        self.resource_c = create(Builder('resource')
                                 .oguid('fd:789')
                                 .watchers([self.peter]))

        self.activity_1 = self.center.add_activity(
            Oguid('fd', '123'),
            'task-added',
            {'en': 'Kennzahlen 2014 erfassen'},
            {'en': 'Task added'},
            {'en': 'Task bla added by Peter'},
            'hugo.boss',
            {'en': None}).get('activity')
        self.activity_2 = self.center.add_activity(
            Oguid('fd', '123'),
            'task-transition-open-in-progress',
            {'en': 'Kennzahlen 2015 erfassen'},
            {'en': 'Task accepted'},
            {'en': 'Task bla accepted by Peter'},
            'peter.mueller',
            {'en': None}).get('activity')

        self.activity_3 = self.center.add_activity(
            Oguid('fd', '456'),
            'task-added',
            {'en': 'Besprechung Gesuch'},
            {'en': 'Task added'},
            {'en': 'Task for added by Peter'},
            'peter.mueller',
            {'en': None}).get('activity')

        self.activity_4 = self.center.add_activity(
            Oguid('fd', '789'),
            'task-added',
            {'en': 'Vorbereitung Besprechung'},
            {'en': 'Task added'},
            {'en': 'Task bla accepted by Franz'},
            'franz.meier',
            {'en': None}).get('activity')

    def test_get_users_notifications_lists_only_users_notifications(self):
        peters_notifications = self.center.get_users_notifications('peter')
        hugos_notifications = self.center.get_users_notifications('hugo')

        self.assertEquals(
            [self.activity_4, self.activity_2, self.activity_1],
            [notification.activity for notification in peters_notifications])

        self.assertEquals(
            [self.activity_3, self.activity_2, self.activity_1],
            [notification.activity for notification in hugos_notifications])

    def test_get_users_notifications_only_unread_parameter(self):
        notifications = self.center.get_users_notifications('peter')
        self.center.mark_notification_as_read(notifications[0].notification_id)

        peters_notifications = self.center.get_users_notifications('peter', only_unread=True)
        self.assertEquals(2, len(peters_notifications))

    def test_get_users_notifications_retuns_empty_list_when_no_notifications_for_this_user_exists(self):
        create(Builder('watcher').having(actorid='franz'))

        self.assertEquals([],
                          self.center.get_users_notifications('franz'))

    def test_mark_notification_as_read(self):
        notification = Notification.query.by_user('peter').first()
        self.center.mark_notification_as_read(notification.notification_id)
        self.assertTrue(Notification.get(notification.notification_id).is_read)

    def test_mark_notifications_as_read(self):
        notification_1, notification_2, notification_3 = Notification.query.by_user(
            'peter').all()

        self.center.mark_notifications_as_read(
            [notification_1.notification_id, notification_3.notification_id])

        self.assertTrue(notification_1.is_read)
        self.assertFalse(notification_2.is_read)
        self.assertTrue(notification_3.is_read)

    def test_mark_an_already_read_notification_is_ignored(self):
        notification = Notification.query.by_user('peter').first()
        notification_id = notification.notification_id

        self.center.mark_notification_as_read(notification_id)
        self.assertTrue(Notification.get(notification_id).is_read)

        self.center.mark_notification_as_read(notification_id)
        self.assertTrue(Notification.get(notification_id).is_read)

    def test_list_notifications_by_userid(self):
        notifications = self.center.list_notifications(userid='peter')
        self.assertEquals(
            [self.activity_1, self.activity_2, self.activity_4],
            [notification.activity for notification in notifications])

    def test_list_notifications_with_sorting(self):
        notifications = self.center.list_notifications(userid='peter', sort_on='kind')

        self.assertEquals(
            ['task-added', 'task-added', 'task-transition-open-in-progress'],
            [notification.activity.kind for notification in notifications])

    def test_list_notifications_with_reverse_sorting(self):
        notifications = self.center.list_notifications(
            userid='peter', sort_on='kind', sort_reverse=True)

        self.assertEquals(
            ['task-transition-open-in-progress', 'task-added', 'task-added'],
            [notification.activity.kind for notification in notifications])

    @unittest.skip('Textfilter not implemented yet')
    def test_list_notifications_with_text_filter_on_title(self):
        notifications = self.center.list_notifications(
            userid='peter', sort_on='kind', filters=['kennzahlen'])

        self.assertEquals(
            [self.activity_1, self.activity_2],
            [notification.activity for notification in notifications])

    @unittest.skip('Textfilter not implemented yet')
    def test_list_notifications_with_text_filter_on_kind(self):
        notifications = self.center.list_notifications(
            userid='peter', sort_on='kind', filters=['Task', 'added'])

        self.assertEquals(
            ['task-added', 'task-added'],
            [notification.activity.kind for notification in notifications])
Esempio n. 2
0
class TestNotificationHandling(ActivityTestCase):

    def setUp(self):
        super(TestNotificationHandling, self).setUp()

        self.center = NotificationCenter()

        self.peter = create(Builder('ogds_user').id('peter'))
        self.peter = create(Builder('watcher').having(actorid='peter'))
        self.hugo = create(Builder('ogds_user').id('hugo'))
        self.hugo = create(Builder('watcher').having(actorid='hugo'))

        self.resource_a = create(Builder('resource')
                                 .oguid('fd:123')
                                 .watchers([self.hugo, self.peter]))
        self.resource_b = create(Builder('resource')
                                 .oguid('fd:456')
                                 .watchers([self.hugo]))
        self.resource_c = create(Builder('resource')
                                 .oguid('fd:789')
                                 .watchers([self.peter]))

        self.activity_1 = self.center.add_activity(
            Oguid('fd', '123'),
            'task-added',
            {'en': 'Kennzahlen 2014 erfassen'},
            {'en': 'Task added'},
            {'en': 'Task bla added by Peter'},
            'hugo.boss',
            {'en': None}).get('activity')
        self.activity_2 = self.center.add_activity(
            Oguid('fd', '123'),
            'task-transition-open-in-progress',
            {'en': 'Kennzahlen 2015 erfassen'},
            {'en': 'Task accepted'},
            {'en': 'Task bla accepted by Peter'},
            'peter.mueller',
            {'en': None}).get('activity')

        self.activity_3 = self.center.add_activity(
            Oguid('fd', '456'),
            'task-added',
            {'en': 'Besprechung Gesuch'},
            {'en': 'Task added'},
            {'en': 'Task for added by Peter'},
            'peter.mueller',
            {'en': None}).get('activity')

        self.activity_4 = self.center.add_activity(
            Oguid('fd', '789'),
            'task-added',
            {'en': 'Vorbereitung Besprechung'},
            {'en': 'Task added'},
            {'en': 'Task bla accepted by Franz'},
            'franz.meier',
            {'en': None}).get('activity')

    def test_get_users_notifications_lists_only_users_notifications(self):
        peters_notifications = self.center.get_users_notifications('peter')
        hugos_notifications = self.center.get_users_notifications('hugo')

        self.assertEquals(
            [self.activity_4, self.activity_2, self.activity_1],
            [notification.activity for notification in peters_notifications])

        self.assertEquals(
            [self.activity_3, self.activity_2, self.activity_1],
            [notification.activity for notification in hugos_notifications])

    def test_get_users_notifications_only_unread_parameter(self):
        notifications = self.center.get_users_notifications('peter')
        self.center.mark_notification_as_read(notifications[0].notification_id)

        peters_notifications = self.center.get_users_notifications('peter', only_unread=True)
        self.assertEquals(2, len(peters_notifications))

    def test_get_users_notifications_retuns_empty_list_when_no_notifications_for_this_user_exists(self):
        create(Builder('watcher').having(actorid='franz'))

        self.assertEquals([],
                          self.center.get_users_notifications('franz'))

    def test_mark_notification_as_read(self):
        notification = Notification.query.by_user('peter').first()
        self.center.mark_notification_as_read(notification.notification_id)
        self.assertTrue(Notification.get(notification.notification_id).is_read)

    def test_mark_notifications_as_read(self):
        notification_1, notification_2, notification_3 = Notification.query.by_user(
            'peter').all()

        self.center.mark_notifications_as_read(
            [notification_1.notification_id, notification_3.notification_id])

        self.assertTrue(notification_1.is_read)
        self.assertFalse(notification_2.is_read)
        self.assertTrue(notification_3.is_read)

    def test_mark_an_already_read_notification_is_ignored(self):
        notification = Notification.query.by_user('peter').first()
        notification_id = notification.notification_id

        self.center.mark_notification_as_read(notification_id)
        self.assertTrue(Notification.get(notification_id).is_read)

        self.center.mark_notification_as_read(notification_id)
        self.assertTrue(Notification.get(notification_id).is_read)

    def test_list_notifications_by_userid(self):
        notifications = self.center.list_notifications(userid='peter')
        self.assertEquals(
            [self.activity_1, self.activity_2, self.activity_4],
            [notification.activity for notification in notifications])

    def test_list_notifications_with_sorting(self):
        notifications = self.center.list_notifications(userid='peter', sort_on='kind')

        self.assertEquals(
            ['task-added', 'task-added', 'task-transition-open-in-progress'],
            [notification.activity.kind for notification in notifications])

    def test_list_notifications_with_reverse_sorting(self):
        notifications = self.center.list_notifications(
            userid='peter', sort_on='kind', sort_reverse=True)

        self.assertEquals(
            ['task-transition-open-in-progress', 'task-added', 'task-added'],
            [notification.activity.kind for notification in notifications])

    @unittest.skip('Textfilter not implemented yet')
    def test_list_notifications_with_text_filter_on_title(self):
        notifications = self.center.list_notifications(
            userid='peter', sort_on='kind', filters=['kennzahlen'])

        self.assertEquals(
            [self.activity_1, self.activity_2],
            [notification.activity for notification in notifications])

    @unittest.skip('Textfilter not implemented yet')
    def test_list_notifications_with_text_filter_on_kind(self):
        notifications = self.center.list_notifications(
            userid='peter', sort_on='kind', filters=['Task', 'added'])

        self.assertEquals(
            ['task-added', 'task-added'],
            [notification.activity.kind for notification in notifications])