Esempio n. 1
0
class TestMarkAsRead(IntegrationTestCase):

    def setUp(self):
        super(TestMarkAsRead, self).setUp()
        with self.login(self.regular_user):
            self.center = NotificationCenter()
            self.watcher = create(
                Builder('watcher')
                .having(actorid=self.regular_user.id)
            )
            oguid = Oguid.for_object(self.task)
            self.resource = create(
                Builder('resource')
                .oguid(oguid.id)
                .watchers([self.watcher])
            )

            # XXX - something is wonky with the builder for activities
            with freeze(FREEZE_TIME_FIRST):
                self.activity_1 = create(
                    Builder('activity')
                    .having(resource=self.resource, created=FREEZE_TIME_FIRST)
                )
                create(
                    Builder('notification')
                    .id(1)
                    .having(
                        activity=self.activity_1,
                        userid=self.regular_user.id,
                    )
                )

            # XXX - something is wonky with the builder for activities
            with freeze(FREEZE_TIME_SECOND):
                self.activity_2 = create(
                    Builder('activity')
                    .having(resource=self.resource, created=FREEZE_TIME_SECOND)
                )
                create(
                    Builder('notification')
                    .id(2)
                    .having(
                        activity=self.activity_2,
                        userid=self.regular_user.id,
                    )
                )

            self.notifications = self.center.get_users_notifications(
                self.regular_user.id)

    @browsing
    def test_mark_all_notifications_as_read(self, browser):
        self.login(self.regular_user, browser)
        # Now is always after both FREEZE_TIME_FIRST and FREEZE_TIME_SECOND
        browser.open(view='notifications/read', data={'timestamp': int(time())})

        notifications = self.center.get_users_notifications(
            self.regular_user.id)
        self.assertTrue(notifications[0].is_read)
        self.assertTrue(notifications[1].is_read)

    @browsing
    def test_mark_some_notifications_as_read(self, browser):
        self.login(self.regular_user, browser)
        # This is testing a race condition of more notifications after render
        with freeze(FREEZE_TIME_BETWEEN):
            browser.open(
                view='notifications/read', data={'timestamp': int(time())})

        notifications = self.center.get_users_notifications(
            self.regular_user.id)
        self.assertFalse(notifications[0].is_read)
        self.assertTrue(notifications[1].is_read)

    @browsing
    def test_mark_no_notifications_as_read(self, browser):
        self.login(self.regular_user, browser)
        # This is testing a race condition of more notifications after render
        with freeze(FREEZE_TIME_BEFORE):
            browser.open(
                view='notifications/read', data={'timestamp': int(time())})

        notifications = self.center.get_users_notifications(
            self.regular_user.id)
        self.assertFalse(notifications[0].is_read)
        self.assertFalse(notifications[1].is_read)

    @browsing
    def test_read_raise_exception_when_parameter_is_missing(self, browser):
        self.login(self.regular_user, browser)
        with browser.expect_http_error():
            browser.open(self.portal, view='notifications/read')
Esempio n. 2
0
class TestMarkAsRead(FunctionalTestCase):

    layer = OPENGEVER_FUNCTIONAL_ACTIVITY_LAYER

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

        self.center = NotificationCenter()
        self.test_user = create(
            Builder('watcher').having(actorid=TEST_USER_ID))
        self.resource_a = create(
            Builder('resource').oguid('fd:123').watchers([self.test_user]))

        with freeze(pytz.UTC.localize(datetime(2014, 5, 7, 12, 30))):
            self.activity_1 = self.center.add_activity(
                Oguid('fd', '123'), 'task-added', {
                    'en': 'Kennzahlen 2014 erfassen'
                }, {
                    'en': 'Task added'
                }, {
                    'en': 'Task bla added by Hugo'
                }, 'hugo.boss', {
                    'en': None
                }).get('activity')

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

            self.notifications = self.center.get_users_notifications(
                TEST_USER_ID)

    @browsing
    def test_mark_single_notification_as_read(self, browser):
        notification_id = self.notifications[0].notification_id
        browser.login().open(
            self.portal,
            view='notifications/read',
            data={'notification_ids': json.dumps([notification_id])})

        notifications = self.center.get_users_notifications(TEST_USER_ID)
        self.assertTrue(notifications[0].is_read)
        self.assertFalse(notifications[1].is_read)

    @browsing
    def test_mark_multiple_notifications_as_read(self, browser):
        ids = [
            self.notifications[0].notification_id,
            self.notifications[1].notification_id
        ]

        browser.login().open(self.portal,
                             view='notifications/read',
                             data={'notification_ids': json.dumps(ids)})

        notifications = self.center.get_users_notifications(TEST_USER_ID)
        self.assertTrue(notifications[0].is_read)
        self.assertTrue(notifications[1].is_read)

    @browsing
    def test_mark_already_read_or_invalid_notification_as_read_is_ignored(
            self, browser):
        invalid = 123
        notification_id = self.notifications[0].notification_id

        self.notifications[0].is_read = True

        browser.login().open(
            self.portal,
            view='notifications/read',
            data={'notification_ids': json.dumps([invalid, notification_id])})

    @browsing
    def test_read_raise_exception_when_parameter_is_missing(self, browser):
        with browser.expect_http_error():
            browser.login().open(self.portal, view='notifications/read')
Esempio n. 3
0
class TestMarkAsRead(IntegrationTestCase):
    def setUp(self):
        super(TestMarkAsRead, self).setUp()
        with self.login(self.regular_user):
            self.center = NotificationCenter()
            self.watcher = create(
                Builder('watcher').having(actorid=self.regular_user.id))
            oguid = Oguid.for_object(self.task)
            self.resource = create(
                Builder('resource').oguid(oguid.id).watchers([self.watcher]))

            # XXX - something is wonky with the builder for activities
            with freeze(FREEZE_TIME_FIRST):
                self.activity_1 = create(
                    Builder('activity').having(resource=self.resource,
                                               created=FREEZE_TIME_FIRST))
                create(
                    Builder('notification').id(1).having(
                        activity=self.activity_1,
                        userid=self.regular_user.id,
                    ))

            # XXX - something is wonky with the builder for activities
            with freeze(FREEZE_TIME_SECOND):
                self.activity_2 = create(
                    Builder('activity').having(resource=self.resource,
                                               created=FREEZE_TIME_SECOND))
                create(
                    Builder('notification').id(2).having(
                        activity=self.activity_2,
                        userid=self.regular_user.id,
                    ))

            self.notifications = self.center.get_users_notifications(
                self.regular_user.id)

    @browsing
    def test_mark_all_notifications_as_read(self, browser):
        self.login(self.regular_user, browser)
        # Now is always after both FREEZE_TIME_FIRST and FREEZE_TIME_SECOND
        browser.open(view='notifications/read',
                     data={'timestamp': int(time())})

        notifications = self.center.get_users_notifications(
            self.regular_user.id)
        self.assertTrue(notifications[0].is_read)
        self.assertTrue(notifications[1].is_read)

    @browsing
    def test_mark_some_notifications_as_read(self, browser):
        self.login(self.regular_user, browser)
        # This is testing a race condition of more notifications after render
        with freeze(FREEZE_TIME_BETWEEN):
            browser.open(view='notifications/read',
                         data={'timestamp': int(time())})

        notifications = self.center.get_users_notifications(
            self.regular_user.id)
        self.assertFalse(notifications[0].is_read)
        self.assertTrue(notifications[1].is_read)

    @browsing
    def test_mark_no_notifications_as_read(self, browser):
        self.login(self.regular_user, browser)
        # This is testing a race condition of more notifications after render
        with freeze(FREEZE_TIME_BEFORE):
            browser.open(view='notifications/read',
                         data={'timestamp': int(time())})

        notifications = self.center.get_users_notifications(
            self.regular_user.id)
        self.assertFalse(notifications[0].is_read)
        self.assertFalse(notifications[1].is_read)

    @browsing
    def test_read_raise_exception_when_parameter_is_missing(self, browser):
        self.login(self.regular_user, browser)
        with browser.expect_http_error():
            browser.open(self.portal, view='notifications/read')
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. 5
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])
Esempio n. 6
0
class TestMarkAsRead(FunctionalTestCase):

    layer = OPENGEVER_FUNCTIONAL_ACTIVITY_LAYER

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

        self.center = NotificationCenter()
        self.test_user = create(Builder('watcher')
                                .having(actorid=TEST_USER_ID))
        self.resource_a = create(Builder('resource')
                                 .oguid('fd:123')
                                 .watchers([self.test_user]))

        with freeze(pytz.UTC.localize(datetime(2014, 5, 7, 12, 30))):
            self.activity_1 = self.center.add_activity(
                Oguid('fd', '123'),
                'task-added',
                {'en': 'Kennzahlen 2014 erfassen'},
                {'en': 'Task added'},
                {'en': 'Task bla added by Hugo'},
                'hugo.boss',
                {'en': None}).get('activity')

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

            self.notifications = self.center.get_users_notifications(TEST_USER_ID)

    @browsing
    def test_mark_single_notification_as_read(self, browser):
        notification_id = self.notifications[0].notification_id
        browser.login().open(self.portal, view='notifications/read',
                             data={'notification_ids': json.dumps([notification_id])})

        notifications = self.center.get_users_notifications(TEST_USER_ID)
        self.assertTrue(notifications[0].is_read)
        self.assertFalse(notifications[1].is_read)

    @browsing
    def test_mark_multiple_notifications_as_read(self, browser):
        ids = [self.notifications[0].notification_id,
               self.notifications[1].notification_id]

        browser.login().open(self.portal, view='notifications/read',
                             data={'notification_ids': json.dumps(ids)})

        notifications = self.center.get_users_notifications(TEST_USER_ID)
        self.assertTrue(notifications[0].is_read)
        self.assertTrue(notifications[1].is_read)

    @browsing
    def test_mark_already_read_or_invalid_notification_as_read_is_ignored(self, browser):
        invalid = 123
        notification_id = self.notifications[0].notification_id

        self.notifications[0].is_read = True

        browser.login().open(
            self.portal, view='notifications/read',
            data={'notification_ids': json.dumps([invalid, notification_id])})

    @browsing
    def test_read_raise_exception_when_parameter_is_missing(self, browser):
        with self.assertRaises(Exception):
            browser.login().open(self.portal, view='notifications/read')