class TestAddActivity(ActivityTestCase): def setUp(self): super(TestAddActivity, self).setUp() self.center = NotificationCenter() def test_add_resource_if_not_exists(self): 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}) resource = self.center.fetch_resource(Oguid('fd', '123')) self.assertEquals('fd', resource.admin_unit_id) self.assertEquals(123, resource.int_id) def test_creates_notifications_for_each_resource_watcher(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) resource_a = create( Builder('resource').oguid('fd:123').watchers([hugo, peter])) activity = self.center.add_activity(Oguid('fd', '123'), 'TASK_ADDED', { 'en': 'Kennzahlen 2014 erfassen' }, { 'en': 'Task bla added' }, { 'en': 'Task bla added by Hugo' }, 'hugo.boss', { 'en': None }).get('activity') notification = Notification.query.by_user('peter').first() self.assertEquals(activity, notification.activity) self.assertEquals(resource_a, notification.activity.resource) self.assertFalse(notification.is_read) notification = Notification.query.by_user('hugo').first() self.assertEquals(activity, notification.activity) self.assertEquals(resource_a, notification.activity.resource) self.assertFalse(notification.is_read) def test_does_not_create_an_notification_for_the_actor(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) create(Builder('resource').oguid('fd:123').watchers([hugo, peter])) self.center.add_activity(Oguid('fd', '123'), 'TASK_ADDED', {'en': 'Kennzahlen 2014 erfassen'}, {'en': 'Task accepted'}, {'en': 'Task bla added by Peter'}, 'peter', {'en': None}) self.assertEquals(1, Notification.query.by_user('hugo').count()) self.assertEquals(0, Notification.query.by_user('peter').count())
class TestMyNotifications(IntegrationTestCase): def setUp(self): super(TestMyNotifications, self).setUp() setting = NotificationDefault.query.filter_by(kind='task-added').one() setting.badge_notification_roles = [WATCHER_ROLE, ] setting = NotificationDefault.query.filter_by( kind='task-transition-open-in-progress').one() setting.badge_notification_roles = [WATCHER_ROLE, ] self.center = NotificationCenter(dispatchers=[BadgeIconDispatcher()]) self.test_watcher = create(Builder('watcher') .having(actorid=self.regular_user.getId())) self.resource_a = create(Builder('resource') .oguid('fd:123') .watchers([self.test_watcher])) self.resource_b = create(Builder('resource') .oguid('fd:456') .watchers([self.test_watcher])) self.activity_1 = self.center.add_activity( Oguid('fd', '123'), u'task-added', {'de': u'Kennzahlen 2014 \xfcbertragen'}, {'de': u'Aufgabe hinzugef\xfcgt'}, {'de': u'Neue Aufgabe hinzugef\xfcgt durch B\xf6ss'}, self.dossier_responsible.getId(), {'de': None}).get('activity') self.activity_2 = self.center.add_activity( Oguid('fd', '123'), u'task-transition-open-in-progress', {'de': u'Kennzahlen 2014 \xfcbertragen'}, {'de': u'Aufgabe akzeptiert'}, {'de': u'Aufgabe akzeptiert durch Hugo B\xf6ss'}, self.secretariat_user.getId(), {'de': None}).get('activity') self.activity_3 = self.center.add_activity( Oguid('fd', '456'), u'task-added', {'de': u'Kennzahlen 2014 \xfcbertragen'}, {'de': u'Aufgabe hinzugef\xfcgt'}, {'de': u'Neue Aufgabe hinzugef\xfcgt durch Peter M\xfcller'}, self.dossier_responsible.getId(), {'de': None}).get('activity') @browsing def test_lists_only_notifications_of_current_user(self, browser): self.login(self.regular_user, browser=browser) browser.open(self.portal, view='tabbedview_view-mynotifications') links = [link.get('href') for link in browser.css('.listing a')] self.assertEquals( ['http://nohost/plone/@@resolve_notification?notification_id=1', 'http://nohost/plone/@@resolve_notification?notification_id=2', 'http://nohost/plone/@@resolve_notification?notification_id=3'], links) @browsing def test_listing_content(self, browser): self.login(self.regular_user, browser=browser) browser.open(self.portal, view='tabbedview_view-mynotifications') self.maxDiff = None self.assertEquals( [{'Actor': u'Ziegler Robert (robert.ziegler)', 'Created': api.portal.get_localized_time( self.activity_1.created, long_format=True), 'Kind': u'Aufgabe hinzugef\xfcgt', 'Title': u'Kennzahlen 2014 \xfcbertragen'}, {'Actor': u'K\xf6nig J\xfcrgen (jurgen.konig)', 'Created': api.portal.get_localized_time( self.activity_2.created, long_format=True), 'Kind': u'Aufgabe akzeptiert', 'Title': u'Kennzahlen 2014 \xfcbertragen'}, {'Actor': u'Ziegler Robert (robert.ziegler)', 'Created': api.portal.get_localized_time( self.activity_3.created, long_format=True), 'Kind': u'Aufgabe hinzugef\xfcgt', 'Title': u'Kennzahlen 2014 \xfcbertragen'}], browser.css('.listing').first.dicts()) @browsing def test_title_is_linked_to_resolve_notification_view(self, browser): self.login(self.regular_user, browser=browser) browser.open(self.portal, view='tabbedview_view-mynotifications') row = browser.css('.listing tr')[1] link = row.css('a').first self.assertEquals(u'Kennzahlen 2014 \xfcbertragen', link.text) self.assertEquals( 'http://nohost/plone/@@resolve_notification?notification_id=1', link.get('href')) @browsing def test_my_notification_lists_only_badge_notifications(self, browser): self.login(self.regular_user, browser=browser) browser.open(self.portal, view='tabbedview_view-mynotifications') self.assertEquals(4, len(browser.css('.listing').first.rows)) notifications = Notification.query.filter_by(userid=self.regular_user.getId()) notifications[0].is_badge = False browser.open(self.portal, view='tabbedview_view-mynotifications') self.assertEquals(3, len(browser.css('.listing').first.rows)) @browsing def test_hide_system_actor_id(self, browser): self.login(self.regular_user, browser=browser) self.activity_2.actor_id = SYSTEM_ACTOR_ID browser.open(self.portal, view='tabbedview_view-mynotifications') self.assertEquals( [u'Ziegler Robert (robert.ziegler)', u'', u'Ziegler Robert (robert.ziegler)'], [row.get('Actor') for row in browser.css('.listing').first.dicts()])
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')
class TestMyNotifications(FunctionalTestCase): def setUp(self): super(TestMyNotifications, self).setUp() create(Builder('ogds_user').having(userid=u'peter.mueller', firstname=u'Peter', lastname=u'M\xfcller')) create(Builder('ogds_user').having(userid=u'hugo.boss', firstname=u'Hugo', lastname=u'B\xf6ss')) 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])) self.resource_b = create(Builder('resource') .oguid('fd:456') .watchers([self.test_user])) self.activity_1 = self.center.add_activity( Oguid('fd', '123'), u'task-added', {'de': u'Kennzahlen 2014 \xfcbertragen'}, {'de': u'Aufgabe hinzugef\xfcgt'}, {'de': u'Neue Aufgabe hinzugef\xfcgt durch Hugo B\xf6ss'}, 'hugo.boss', {'de': None}).get('activity') self.activity_2 = self.center.add_activity( Oguid('fd', '123'), u'task-transition-open-in-progress', {'de': u'Kennzahlen 2014 \xfcbertragen'}, {'de': u'Aufgabe akzeptiert'}, {'de': u'Aufgabe akzeptiert durch Hugo B\xf6ss'}, 'peter.mueller', {'de': None}).get('activity') self.activity_3 = self.center.add_activity( Oguid('fd', '456'), u'task-added', {'de': u'Kennzahlen 2014 \xfcbertragen'}, {'de': u'Aufgabe hinzugef\xfcgt'}, {'de': u'Neue Aufgabe hinzugef\xfcgt durch Peter M\xfcller'}, 'peter.mueller', {'de': None}).get('activity') @browsing def test_lists_only_notifications_of_current_user(self, browser): browser.login().open(self.portal, view='tabbedview_view-mynotifications') links = [link.get('href') for link in browser.css('.listing a')] self.assertEquals( ['http://example.com/@@resolve_notification?notification_id=1', 'http://example.com/@@resolve_notification?notification_id=2'], links) @browsing def test_listing_content(self, browser): browser.login().open(self.portal, view='tabbedview_view-mynotifications') self.assertEquals( [{'Actor': u'B\xf6ss Hugo (hugo.boss)', 'Created': api.portal.get_localized_time( self.activity_1.created, long_format=True), 'Kind': u'Aufgabe hinzugef\xfcgt', 'Title': u'Kennzahlen 2014 \xfcbertragen'}, {'Actor': u'M\xfcller Peter (peter.mueller)', 'Created': api.portal.get_localized_time( self.activity_2.created, long_format=True), 'Kind': u'Aufgabe akzeptiert', 'Title': u'Kennzahlen 2014 \xfcbertragen'}], browser.css('.listing').first.dicts()) @browsing def test_title_is_linked_to_resolve_notification_view(self, browser): browser.login().open(self.portal, view='tabbedview_view-mynotifications') row = browser.css('.listing tr')[1] link = row.css('a').first self.assertEquals(u'Kennzahlen 2014 \xfcbertragen', link.text) self.assertEquals( 'http://example.com/@@resolve_notification?notification_id=1', link.get('href'))
class TestDispatchers(ActivityTestCase): def setUp(self): super(TestDispatchers, self).setUp() self.dispatcher = FakeMailDispatcher() self.center = NotificationCenter( [self.dispatcher, BadgeIconDispatcher(), DigestDispatcher()]) hugo = create(Builder('watcher').having(actorid='hugo')) peter = create(Builder('watcher').having(actorid='peter')) resource = create(Builder('resource').oguid('fd:123')) create(Builder('subscription') .having(resource=resource, watcher=hugo, role=WATCHER_ROLE)) create(Builder('subscription') .having(resource=resource, watcher=peter, role=TASK_RESPONSIBLE_ROLE)) def test_uses_personal_setting_if_exists(self): create(Builder('notification_default_setting') .having(kind='task-added', mail_notification_roles=[WATCHER_ROLE, TASK_RESPONSIBLE_ROLE])) create(Builder('notification_setting') .having(kind='task-added', userid='hugo')) self.center.add_activity( Oguid('fd', '123'), 'task-added', {'en': 'Kennzahlen 2014 erfassen'}, {'en': 'Task added'}, {'en': 'Task bla accepted by Peter'}, 'hugo.boss', {'en': None}) self.assertEquals(1, len(self.dispatcher.notified)) self.assertEquals( ['peter'], [note.userid for note in self.dispatcher.notified]) def test_uses_notification_default_as_fallback(self): setting = create(Builder('notification_default_setting') .having(kind='task-added', mail_notification_roles=[ WATCHER_ROLE, TASK_RESPONSIBLE_ROLE])) self.center.add_activity( Oguid('fd', '123'), 'task-added', {'en': 'Kennzahlen 2014 erfassen'}, {'en': 'Task added'}, {'en': 'Task bla accepted by Peter'}, 'hugo.boss', {'en': None}) self.assertEquals(2, len(self.dispatcher.notified)) def test_only_watchers_with_configured_roles_are_dispatched(self): setting = create(Builder('notification_default_setting') .having(kind='task-added', mail_notification_roles=[WATCHER_ROLE])) self.center.add_activity( Oguid('fd', '123'), 'task-added', {'en': 'Kennzahlen 2014 erfassen'}, {'en': 'Task added'}, {'en': 'Task bla accepted by Peter'}, 'hugo.boss', {'en': None}) self.assertEquals(1, len(self.dispatcher.notified)) self.assertEquals(u'hugo', self.dispatcher.notified[0].userid) def test_if_setting_for_kind_does_not_exist_dispatcher_is_ignored(self): self.center.add_activity( Oguid('fd', '123'), 'task-added', {'en': 'Kennzahlen 2014 erfassen'}, {'en': 'Task added'}, {'en': 'Task bla accepted by Peter'}, 'hugo.boss', {'en': None}) self.assertEquals(0, len(self.dispatcher.notified)) def test_badge_dispatcher_sets_badge_flag_depending_on_the_setting(self): setting = create(Builder('notification_default_setting') .having(kind='task-added', badge_notification_roles=[TASK_RESPONSIBLE_ROLE])) self.center.add_activity( Oguid('fd', '123'), 'task-added', {'en': 'Kennzahlen 2014 erfassen'}, {'en': 'Task added'}, {'en': 'Task bla accepted by Peter'}, 'hugo.boss', {'en': None}) peters_note = Notification.query.filter_by(userid='peter').one() hugos_note = Notification.query.filter_by(userid='hugo').one() self.assertFalse(hugos_note.is_badge) self.assertTrue(peters_note.is_badge) def test_digest_dispatcher_sets_digest_flag_depending_on_the_setting(self): create(Builder('notification_default_setting') .having(kind='task-added', digest_notification_roles=[TASK_RESPONSIBLE_ROLE])) self.center.add_activity( Oguid('fd', '123'), 'task-added', {'en': 'Kennzahlen 2014 erfassen'}, {'en': 'Task added'}, {'en': 'Task bla accepted by Peter'}, 'hugo.boss', {'en': None}) peters_note = Notification.query.filter_by(userid='peter').one() hugos_note = Notification.query.filter_by(userid='hugo').one() self.assertFalse(hugos_note.is_digest) self.assertTrue(peters_note.is_digest)
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])
class TestMyNotifications(FunctionalTestCase): def setUp(self): super(TestMyNotifications, self).setUp() create(Builder('ogds_user').having(userid=u'peter.mueller', firstname=u'Peter', lastname=u'M\xfcller')) create(Builder('ogds_user').having(userid=u'hugo.boss', firstname=u'Hugo', lastname=u'B\xf6ss')) 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])) self.resource_b = create(Builder('resource') .oguid('fd:456') .watchers([self.test_user])) self.activity_1 = self.center.add_activity( Oguid('fd', '123'), u'task-added', {'de': u'Kennzahlen 2014 \xfcbertragen'}, {'de': u'Aufgabe hinzugef\xfcgt'}, {'de': u'Neue Aufgabe hinzugef\xfcgt durch Hugo B\xf6ss'}, 'hugo.boss', {'de': None}).get('activity') self.activity_2 = self.center.add_activity( Oguid('fd', '123'), u'task-transition-open-in-progress', {'de': u'Kennzahlen 2014 \xfcbertragen'}, {'de': u'Aufgabe akzeptiert'}, {'de': u'Aufgabe akzeptiert durch Hugo B\xf6ss'}, 'peter.mueller', {'de': None}).get('activity') self.activity_3 = self.center.add_activity( Oguid('fd', '456'), u'task-added', {'de': u'Kennzahlen 2014 \xfcbertragen'}, {'de': u'Aufgabe hinzugef\xfcgt'}, {'de': u'Neue Aufgabe hinzugef\xfcgt durch Peter M\xfcller'}, 'peter.mueller', {'de': None}).get('activity') transaction.commit() @browsing def test_lists_only_notifications_of_current_user(self, browser): browser.login().open(self.portal, view='tabbedview_view-mynotifications') links = [link.get('href') for link in browser.css('.listing a')] self.assertEquals( ['http://example.com/@@resolve_notification?notification_id=1', 'http://example.com/@@resolve_notification?notification_id=2', 'http://example.com/@@resolve_notification?notification_id=3'], links) @browsing def test_listing_content(self, browser): browser.login().open(self.portal, view='tabbedview_view-mynotifications') self.maxDiff = None self.assertEquals( [{'Actor': u'B\xf6ss Hugo (hugo.boss)', 'Created': api.portal.get_localized_time( self.activity_1.created, long_format=True), 'Kind': u'Aufgabe hinzugef\xfcgt', 'Title': u'Kennzahlen 2014 \xfcbertragen'}, {'Actor': u'M\xfcller Peter (peter.mueller)', 'Created': api.portal.get_localized_time( self.activity_2.created, long_format=True), 'Kind': u'Aufgabe akzeptiert', 'Title': u'Kennzahlen 2014 \xfcbertragen'}, {'Actor': u'M\xfcller Peter (peter.mueller)', 'Created': api.portal.get_localized_time( self.activity_3.created, long_format=True), 'Kind': u'Aufgabe hinzugef\xfcgt', 'Title': u'Kennzahlen 2014 \xfcbertragen'}], browser.css('.listing').first.dicts()) @browsing def test_title_is_linked_to_resolve_notification_view(self, browser): browser.login().open(self.portal, view='tabbedview_view-mynotifications') row = browser.css('.listing tr')[1] link = row.css('a').first self.assertEquals(u'Kennzahlen 2014 \xfcbertragen', link.text) self.assertEquals( 'http://example.com/@@resolve_notification?notification_id=1', link.get('href'))
class TestDispatchers(ActivityTestCase): def setUp(self): super(TestDispatchers, self).setUp() self.dispatcher = FakeMailDispatcher() self.center = NotificationCenter([self.dispatcher]) hugo = create(Builder('watcher').having(actorid='hugo')) peter = create(Builder('watcher').having(actorid='peter')) resource = create(Builder('resource').oguid('fd:123')) create(Builder('subscription') .having(resource=resource, watcher=hugo, role=WATCHER_ROLE)) create(Builder('subscription') .having(resource=resource, watcher=peter, role=TASK_RESPONSIBLE_ROLE)) def test_check_for_notification_default(self): setting = create(Builder('notification_default_setting') .having(kind='task-added', mail_notification=False)) setting.set_mail_notification_roles( [WATCHER_ROLE, TASK_RESPONSIBLE_ROLE]) self.center.add_activity( Oguid('fd', '123'), 'task-added', {'en': 'Kennzahlen 2014 erfassen'}, {'en': 'Task added'}, {'en': 'Task bla accepted by Peter'}, 'hugo.boss', {'en': None}) self.assertEquals(0, len(self.dispatcher.notified)) setting.mail_notification = True self.center.add_activity( Oguid('fd', '123'), 'task-added', {'en': 'Kennzahlen 2014 erfassen'}, {'en': 'Task added'}, {'en': 'Task bla accepted by Peter'}, 'hugo.boss', {'en': None}) self.assertEquals(2, len(self.dispatcher.notified)) def test_only_watchers_with_configured_roles_are_dispatched(self): setting = create(Builder('notification_default_setting') .having(kind='task-added', mail_notification=True)) setting.set_mail_notification_roles([WATCHER_ROLE]) self.center.add_activity( Oguid('fd', '123'), 'task-added', {'en': 'Kennzahlen 2014 erfassen'}, {'en': 'Task added'}, {'en': 'Task bla accepted by Peter'}, 'hugo.boss', {'en': None}) self.assertEquals(1, len(self.dispatcher.notified)) self.assertEquals(u'hugo', self.dispatcher.notified[0].userid) def test_if_setting_for_kind_does_not_exist_dispatcher_is_ignored(self): self.center.add_activity( Oguid('fd', '123'), 'task-added', {'en': 'Kennzahlen 2014 erfassen'}, {'en': 'Task added'}, {'en': 'Task bla accepted by Peter'}, 'hugo.boss', {'en': None}) self.assertEquals(0, len(self.dispatcher.notified))
class TestAddActivity(ActivityTestCase): def setUp(self): super(TestAddActivity, self).setUp() self.center = NotificationCenter() def test_add_resource_if_not_exists(self): 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}) resource = self.center.fetch_resource(Oguid('fd', '123')) self.assertEquals('fd', resource.admin_unit_id) self.assertEquals(123, resource.int_id) def test_creates_notifications_for_each_resource_watcher(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) resource_a = create(Builder('resource').oguid('fd:123') .watchers([hugo, peter])) activity = self.center.add_activity( Oguid('fd', '123'), 'TASK_ADDED', {'en': 'Kennzahlen 2014 erfassen'}, {'en': 'Task bla added'}, {'en': 'Task bla added by Hugo'}, 'hugo.boss', {'en': None}).get('activity') notification = Notification.query.by_user('peter').first() self.assertEquals(activity, notification.activity) self.assertEquals(resource_a, notification.activity.resource) self.assertFalse(notification.is_read) notification = Notification.query.by_user('hugo').first() self.assertEquals(activity, notification.activity) self.assertEquals(resource_a, notification.activity.resource) self.assertFalse(notification.is_read) def test_does_not_create_an_notification_for_the_actor(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) create(Builder('resource').oguid('fd:123').watchers([hugo, peter])) self.center.add_activity( Oguid('fd', '123'), 'TASK_ADDED', {'en': 'Kennzahlen 2014 erfassen'}, {'en': 'Task accepted'}, {'en': 'Task bla added by Peter'}, 'peter', {'en': None}) self.assertEquals(1, Notification.query.by_user('hugo').count()) self.assertEquals(0, Notification.query.by_user('peter').count())
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')