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(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_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_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_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 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_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 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 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_comparison(self): self.assertEqual(Oguid('foo', 2), Oguid('foo', 2)) self.assertEqual('foo:2', Oguid('foo', 2)) self.assertNotEqual(None, Oguid('foo', 2)) self.assertNotEqual(Oguid('foo', 3), Oguid('foo', 2)) self.assertNotEqual(Oguid('bar', 2), Oguid('foo', 2))
def migrate_proposal_fields_to_plone_objects(self, sql_proposal): oguid = Oguid(sql_proposal.admin_unit_id, sql_proposal.int_id) proposal = oguid.resolve_object() for field_name in PROPOSAL_FIELDS: setattr(proposal, field_name, getattr(sql_proposal, field_name)) submitted_oguid = Oguid(sql_proposal.submitted_admin_unit_id, sql_proposal.submitted_int_id) submitted_proposal = submitted_oguid.resolve_object() if not submitted_proposal: return for field_name in SUBMITTED_PROPOSAL_FIELDS: setattr(submitted_proposal, field_name, getattr(sql_proposal, field_name))
def test_oguid_url_different_admin_unit(self): self.login(self.regular_user) oguid = Oguid('foo', 1234) self.assertEqual( 'http://nohost/plone/@@resolve_oguid?oguid=foo:1234', oguid.get_url())
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_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_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 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 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_proposal_by_oguid_returns_proposal_with_string_param(self): proposal = create(Builder('proposal_model').having( int_id=1, admin_unit_id='unita')) create(Builder('proposal_model').having( int_id=2, admin_unit_id='unitb')) create(Builder('proposal_model').having( int_id=1, admin_unit_id='unitb')) self.assertEqual(proposal, Proposal.query.get_by_oguid(Oguid('unita', 1)))
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_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_adding(self): person = create(Builder('person').having( firstname=u'peter', lastname=u'hans')) organization = create(Builder('organization').named('ACME')) orgrole = create(Builder('org_role').having( person=person, organization=organization, function=u'cheffe')) create(Builder('org_role_participation').having( org_role=orgrole, dossier_oguid=Oguid('foo', 1234)))
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 sync_title_to_meeting_dossier(self, meeting): dossier_oguid = Oguid(meeting.dossier_admin_unit_id, meeting.dossier_int_id) dossier = dossier_oguid.resolve_object() if not dossier: return dossier.title = meeting.title dossier.reindexObject(idxs=['Title', 'SearchableText'])
def test_copy_participation(self): peter = create(Builder('ogds_user').id('peter').as_contact_adapter()) participation = create(Builder('ogds_user_participation').having( ogds_user=peter, dossier_oguid=Oguid('foo', 1234))) copied_participation = participation.copy() self.assertEqual(peter, copied_participation.ogds_user) self.assertEqual('foo', copied_participation.dossier_admin_unit_id) self.assertEqual(1234, copied_participation.dossier_int_id) self.assertEqual(0, len(copied_participation.roles))
def test_participation_can_have_multiple_roles(self): participation = create(Builder('contact_participation').having( contact=self.contact, dossier_oguid=Oguid('foo', 1234))) role1 = create(Builder('participation_role').having( participation=participation, role=u'Sch\xf6ff')) role2 = create(Builder('participation_role').having( participation=participation, role=u'Hanswutscht')) self.assertEquals([role1, role2], participation.roles)
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)
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_update_roles_removes_existing_no_longer_used_roles(self): participation = create(Builder('contact_participation').having( contact=self.contact, dossier_oguid=Oguid('foo', 1234))) create(Builder('participation_role').having( participation=participation, role=u'final-drawing')) create(Builder('participation_role').having( participation=participation, role=u'regard')) participation.update_roles(['regard']) self.assertEquals(['regard'], [role.role for role in participation.roles])
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 test_copy_participation(self): participation = create(Builder('contact_participation').having( contact=self.contact, dossier_oguid=Oguid('foo', 1234))) role = create(Builder('participation_role').having( participation=participation, role=u'Sch\xf6ff')) copied_participation = participation.copy() self.assertEqual(self.contact, copied_participation.contact) self.assertEqual('foo', copied_participation.dossier_admin_unit_id) self.assertEqual(1234, copied_participation.dossier_int_id) self.assertEqual(1, len(copied_participation.roles)) copied_role = copied_participation.roles[0] self.assertEqual(u'Sch\xf6ff', copied_role.role)