class TestResourceHandling(ActivityTestCase): def setUp(self): super(TestResourceHandling, self).setUp() self.center = NotificationCenter() def test_add_watcher_to_a_resource(self): hugo = create(Builder('watcher').having(actorid='hugo')) create(Builder('watcher').having(actorid='peter')) res = create(Builder('resource').oguid('fd:1234')) res.add_watcher('hugo', TASK_ISSUER_ROLE) self.assertEquals([hugo], res.watchers) def test_fetch_return_resource_by_means_of_oguid(self): resource_a = create(Builder('resource').oguid('fd:123')) resource_b = create(Builder('resource').oguid('fd:456')) self.assertEquals(resource_a, self.center.fetch_resource(Oguid('fd', '123'))) self.assertEquals(resource_b, self.center.fetch_resource(Oguid('fd', '456'))) def test_fetch_return_none_when_resource_not_exists(self): self.assertEquals(None, self.center.fetch_resource(Oguid('fd', '123'))) def test_adding(self): resource = self.center.add_resource(Oguid('fd', '123')) self.assertEquals(1, len(Resource.query.all())) resource = Resource.query.first() self.assertEquals(Oguid('fd', '123'), resource.oguid) self.assertEquals('fd', resource.admin_unit_id) self.assertEquals(123, resource.int_id)
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 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)
class TestResourceHandling(ActivityTestCase): def setUp(self): super(TestResourceHandling, self).setUp() self.center = NotificationCenter() def test_add_watcher_to_a_resource(self): hugo = create(Builder('watcher').having(actorid='hugo')) peter = create(Builder('watcher').having(actorid='peter')) res = create(Builder('resource').oguid('fd:1234')) res.add_watcher('hugo', TASK_ISSUER_ROLE) self.assertEquals([hugo], res.watchers) def test_fetch_return_resource_by_means_of_oguid(self): resource_a = create(Builder('resource').oguid('fd:123')) resource_b = create(Builder('resource').oguid('fd:456')) self.assertEquals(resource_a, self.center.fetch_resource(Oguid('fd', '123'))) self.assertEquals(resource_b, self.center.fetch_resource(Oguid('fd', '456'))) def test_fetch_return_none_when_resource_not_exists(self): self.assertEquals(None, self.center.fetch_resource(Oguid('fd', '123'))) def test_adding(self): resource = self.center.add_resource(Oguid('fd', '123')) self.assertEquals(1, len(Resource.query.all())) resource = Resource.query.first() self.assertEquals(Oguid('fd', '123'), resource.oguid) self.assertEquals('fd', resource.admin_unit_id) self.assertEquals(123, resource.int_id)
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)
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')
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 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)
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()
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 setUp(self): super(TestListNotifications, self).setUp() with self.login(self.regular_user), freeze(FREEZE_TIME): 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])) self.activity = create( Builder('activity').having(resource=self.resource, created=FREEZE_TIME))
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())
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)
def setUp(self): super(TestListNotifications, 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])) created = pytz.UTC.localize(datetime(2014, 5, 7, 12, 30)) self.activity = create( Builder('activity').having(resource=self.resource_a, created=created, actor_id='hugo.boss', kind='task-added', title=u'Kennzahlen 2014 erfassen', label=u'Task added', summary=u'Task bla added by Hugo'))
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')
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')
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 TestWatcherHandling(ActivityTestCase): def setUp(self): super(TestWatcherHandling, self).setUp() self.center = NotificationCenter() def test_fetch_returns_watcher_by_means_of_actor_id(self): hugo = create(Builder('watcher').having(actorid='hugo')) peter = create(Builder('watcher').having(actorid='peter')) self.assertEquals(hugo, self.center.fetch_watcher('hugo')) self.assertEquals(peter, self.center.fetch_watcher('peter')) def test_return_none_when_watcher_not_exists(self): self.assertEquals(None, self.center.fetch_watcher('peter')) def test_adding(self): self.center.add_watcher('peter') self.assertEquals(1, len(Watcher.query.all())) self.assertEquals('peter', Watcher.query.first().actorid) def test_add_watcher_twice_raise_integrity_error(self): self.center.add_watcher('peter') with self.assertRaises(IntegrityError): self.center.add_watcher('peter') transaction.commit() transaction.abort() def test_add_watcher_to_resource(self): peter = create(Builder('watcher').having(actorid='peter')) resource = create(Builder('resource').oguid('fd:123')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') self.assertEquals([peter], list(resource.watchers)) def test_adding_watcher_twice_to_resource_is_ignored(self): peter = create(Builder('watcher').having(actorid='peter')) resource = create(Builder('resource').oguid('fd:123')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') self.assertEquals([peter], list(resource.watchers)) def test_add_watcher_to_resource_creates_resource_when_not_exitst(self): peter = create(Builder('watcher').having(actorid='peter')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') resource = peter.resources[0] self.assertEquals('fd:123', resource.oguid) def test_add_watcher_to_resource_creates_watcher_when_not_exitst(self): resource = create(Builder('resource').oguid('fd:123')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') watcher = list(resource.watchers)[0] self.assertEquals('peter', watcher.actorid) def test_get_watchers_returns_a_list_of_resource_watchers(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) fritz = create(Builder('watcher').having(actorid='fritz')) resource_1 = create(Builder('resource') .oguid('fd:123').watchers([hugo, fritz])) resource_2 = create(Builder('resource') .oguid('fd:456').watchers([peter])) # A weakref gets reaped unless we keep a reference to the resources. # https://stackoverflow.com/questions/30044069/stale-association-proxy-parent-object-has-gone-out-of-scope-with-flask-sqlalc # So to squelch pyflakes we do trivial asserts on them here. self.assertEquals(123, resource_1.int_id) self.assertEquals(456, resource_2.int_id) self.assertEquals((hugo, fritz), self.center.get_watchers(Oguid('fd', '123'))) self.assertEquals((peter,), self.center.get_watchers(Oguid('fd', '456'))) def test_get_watchers_returns_empty_list_when_resource_not_exists(self): self.assertEquals((), self.center.get_watchers(Oguid('fd', '123'))) def test_remove_watcher_from_resource_will_be_ignored_when_watcher_not_exists(self): create(Builder('resource').oguid('fd:123')) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) def test_remove_watcher_from_resource_will_remove_subscription_if_no_roles_left(self): resource = create(Builder('resource').oguid('fd:123')) watcher = create(Builder('watcher').having(actorid=u'peter')) create(Builder('subscription') .having(resource=resource, watcher=watcher, role=WATCHER_ROLE)) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) self.assertEquals([], resource.watchers) def test_remove_watcher_from_resource_will_be_ignored_when_resource_not_exists(self): create(Builder('watcher').having(actorid='peter')) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) def test_remove_watcher_from_resource(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) resource = create(Builder('resource') .oguid('fd:123') .watchers([hugo, peter])) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) self.assertEquals([hugo], resource.watchers) def test_remove_watchers_from_resource_by_role(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) marie = create(Builder('watcher').having(actorid='marie')) resource = create(Builder('resource').oguid('fd:123')) create(Builder('subscription') .having(resource=resource, watcher=peter, role=WATCHER_ROLE)) create(Builder('subscription') .having(resource=resource, watcher=marie, role=WATCHER_ROLE)) create(Builder('subscription') .having(resource=resource, watcher=peter, role=TASK_ISSUER_ROLE)) create(Builder('subscription') .having(resource=resource, watcher=hugo, role=TASK_ISSUER_ROLE)) self.center.remove_watchers_from_resource_by_role( Oguid('fd', '123'), WATCHER_ROLE) self.assertEqual( set([TASK_ISSUER_ROLE]), set([subscription.role for subscription in Subscription.query.all()])) self.assertEquals([peter, hugo], resource.watchers) def test_remove_watchers_from_resource_by_role_does_not_affect_other_resources(self): hugo = create(Builder('watcher').having(actorid='hugo')) create(Builder('resource').oguid('fd:123').watchers([hugo])) create(Builder('resource').oguid('fd:234').watchers([hugo])) self.assertEqual(2, Subscription.query.count()) self.assertEqual( ['fd:123', 'fd:234'], [subscription.resource.oguid.id for subscription in Subscription.query.all()]) self.center.remove_watchers_from_resource_by_role( Oguid('fd', '234'), WATCHER_ROLE)
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') @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 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 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')
def setUp(self): super(TestResourceHandling, self).setUp() self.center = NotificationCenter()
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())
def setUp(self): super(TestAddActivity, self).setUp() self.center = NotificationCenter()
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, 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 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 TestWatcherHandling(ActivityTestCase): def setUp(self): super(TestWatcherHandling, self).setUp() self.center = NotificationCenter() def test_fetch_returns_watcher_by_means_of_actor_id(self): hugo = create(Builder('watcher').having(actorid='hugo')) peter = create(Builder('watcher').having(actorid='peter')) self.assertEquals(hugo, self.center.fetch_watcher('hugo')) self.assertEquals(peter, self.center.fetch_watcher('peter')) def test_return_none_when_watcher_not_exists(self): self.assertEquals(None, self.center.fetch_watcher('peter')) def test_adding(self): self.center.add_watcher('peter') self.assertEquals(1, len(Watcher.query.all())) self.assertEquals('peter', Watcher.query.first().actorid) def test_add_watcher_twice_raise_integrity_error(self): self.center.add_watcher('peter') with self.assertRaises(IntegrityError): self.center.add_watcher('peter') transaction.commit() transaction.abort() def test_add_watcher_to_resource(self): peter = create(Builder('watcher').having(actorid='peter')) resource = create(Builder('resource').oguid('fd:123')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') self.assertEquals([peter], list(resource.watchers)) def test_adding_watcher_twice_to_resource_is_ignored(self): peter = create(Builder('watcher').having(actorid='peter')) resource = create(Builder('resource').oguid('fd:123')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') self.assertEquals([peter], list(resource.watchers)) def test_add_watcher_to_resource_creates_resource_when_not_exitst(self): peter = create(Builder('watcher').having(actorid='peter')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') resource = peter.resources[0] self.assertEquals('fd:123', resource.oguid) def test_add_watcher_to_resource_creates_watcher_when_not_exitst(self): resource = create(Builder('resource').oguid('fd:123')) self.center.add_watcher_to_resource(Oguid('fd', '123'), 'peter') watcher = list(resource.watchers)[0] self.assertEquals('peter', watcher.actorid) def test_get_watchers_returns_a_list_of_resource_watchers(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) fritz = create(Builder('watcher').having(actorid='fritz')) resource_1 = create(Builder('resource') .oguid('fd:123').watchers([hugo, fritz])) resource_2 = create(Builder('resource') .oguid('fd:456').watchers([peter])) self.assertEquals([hugo, fritz], self.center.get_watchers(Oguid('fd', '123'))) self.assertEquals([peter], self.center.get_watchers(Oguid('fd', '456'))) def test_get_watchers_returns_empty_list_when_resource_not_exists(self): self.assertEquals([], self.center.get_watchers(Oguid('fd', '123'))) def test_remove_watcher_from_resource_will_be_ignored_when_watcher_not_exists(self): create(Builder('resource').oguid('fd:123')) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) def test_remove_watcher_from_resource_will_remove_subscription_if_no_roles_left(self): resource = create(Builder('resource').oguid('fd:123')) watcher = create(Builder('watcher').having(actorid=u'peter')) create(Builder('subscription') .having(resource=resource, watcher=watcher, role=WATCHER_ROLE)) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) self.assertEquals([], resource.watchers) def test_remove_watcher_from_resource_will_be_ignored_when_resource_not_exists(self): create(Builder('watcher').having(actorid='peter')) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) def test_remove_watcher_from_resource(self): peter = create(Builder('watcher').having(actorid='peter')) hugo = create(Builder('watcher').having(actorid='hugo')) resource = create(Builder('resource') .oguid('fd:123') .watchers([hugo, peter])) self.center.remove_watcher_from_resource( Oguid('fd', '123'), 'peter', WATCHER_ROLE) self.assertEquals([hugo], resource.watchers)
def setUp(self): super(TestWatcherHandling, self).setUp() self.center = NotificationCenter()
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')
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))