def test_basic(self): dataset = factories.DatasetActivity() _ = factories.DatasetActivity() # decoy subscription = factories.Subscription(dataset_id=dataset['id']) notifies = get_immediate_notifications() eq(notifies.keys(), [subscription['email']]) eq(_get_activities(notifies), [(u'*****@*****.**', u'new package', dataset['id'])])
def test_immediate_frequency_subscriptions_are_not_included(self): dataset = factories.DatasetActivity() factories.Subscription(dataset_id=dataset['id'], frequency='immediate') notifies = get_daily_notifications() eq(_get_activities(notifies), [])
def test_lots_of_users_and_datasets(self): datasetx = _create_dataset_and_activity([70, 50, 10]) datasety = _create_dataset_and_activity([40, 20]) _ = factories.DatasetActivity() # decoy factories.Subscription(email='*****@*****.**', dataset_id=datasetx['id'], created=datetime.datetime.now() - datetime.timedelta(hours=2)) factories.Subscription(email='*****@*****.**', dataset_id=datasetx['id'], created=datetime.datetime.now() - datetime.timedelta(hours=2)) factories.Subscription(email='*****@*****.**', dataset_id=datasety['id'], created=datetime.datetime.now() - datetime.timedelta(hours=2)) notifies = get_immediate_notifications() eq(set(notifies.keys()), set( ('*****@*****.**', '*****@*****.**', '*****@*****.**'))) from pprint import pprint pprint(_get_activities(notifies)) eq( set(_get_activities(notifies)), set(( (u'*****@*****.**', u'new package', datasetx['id']), (u'*****@*****.**', u'changed package', datasetx['id']), (u'*****@*****.**', u'changed package', datasetx['id']), (u'*****@*****.**', u'new package', datasetx['id']), (u'*****@*****.**', u'changed package', datasetx['id']), (u'*****@*****.**', u'changed package', datasetx['id']), (u'*****@*****.**', u'new package', datasety['id']), (u'*****@*****.**', u'changed package', datasety['id']), )))
def test_basic(self, mail_recipient): dataset, activity = factories.DatasetActivity( timestamp=datetime.datetime.now() - datetime.timedelta(minutes=10), return_activity=True) # {subscription: [activity, ...], ...} subscription_activities = { factories.Subscription(dataset_id=dataset['id'], return_object=True): [activity] } notifications = dictize_notifications(subscription_activities) send_notification_email(code='the-code', email='*****@*****.**', notifications=notifications) mail_recipient.assert_called_once() body = mail_recipient.call_args[1]['body'] print(body) assert_in(dataset['title'], body) assert_in('http://test.ckan.net/dataset/{}'.format(dataset['id']), body) assert_in('new dataset', body) body = mail_recipient.call_args[1]['body_html'] print(body) assert_in(dataset['title'], body) assert_in('http://test.ckan.net/dataset/{}'.format(dataset['id']), body) assert_in('new dataset', body)
def test_old_activity_not_notified(self): dataset = factories.DatasetActivity(timestamp=datetime.datetime.now() - datetime.timedelta(hours=49)) factories.Subscription(dataset_id=dataset['id']) notifies = get_immediate_notifications() eq(_get_activities(notifies), [])
def test_activities_older_than_a_day_are_not_notified(self): dataset = factories.DatasetActivity(timestamp=datetime.datetime.now() - datetime.timedelta(hours=25)) factories.Subscription(dataset_id=dataset['id'], frequency='daily') notifies = get_daily_notifications() eq(_get_activities(notifies), [])
def test_activities_already_notified_are_not_notified_again(self): dataset = factories.DatasetActivity(timestamp=datetime.datetime.now() - datetime.timedelta(hours=1)) factories.Subscription(dataset_id=dataset['id'], frequency='daily') subscribe_model.Subscribe.set_emails_last_sent( frequency=Frequency.DAILY.value, emails_last_sent=datetime.datetime.now()) model.Session.commit() notifies = get_daily_notifications() eq(_get_activities(notifies), [])
def test_activity_already_notified_not_notified_again(self): dataset = factories.DatasetActivity(timestamp=datetime.datetime.now() - datetime.timedelta(minutes=10)) subscribe_model.Subscribe.set_emails_last_sent( Frequency.IMMEDIATE.value, datetime.datetime.now() - datetime.timedelta(minutes=5)) model.Session.commit() factories.Subscription(dataset_id=dataset['id']) notifies = get_immediate_notifications() eq(_get_activities(notifies), [])
def _create_dataset_and_activity(activity_in_minutes_ago=[]): minutes_ago = activity_in_minutes_ago.pop(0) dataset = factories.DatasetActivity( timestamp=datetime.datetime.now() - datetime.timedelta(minutes=minutes_ago)) while activity_in_minutes_ago: minutes_ago = activity_in_minutes_ago.pop(0) factories.Activity(object_id=dataset['id'], activity_type='changed package', timestamp=datetime.datetime.now() - datetime.timedelta(minutes=50)) return dataset
def test_basic(self): dataset, activity = factories.DatasetActivity( timestamp=datetime.datetime.now() - datetime.timedelta(minutes=10), return_activity=True) # {subscription: [activity, ...], ...} subscription_activities = { factories.Subscription(dataset_id=dataset['id'], return_object=True): [activity] } notifications = dictize_notifications(subscription_activities) get_notification_email_contents(code='the-code', email='*****@*****.**', notifications=notifications)
def test_basic(self, send_notification_email): dataset = factories.DatasetActivity() subscription = factories.Subscription(dataset_id=dataset['id']) send_any_immediate_notifications() send_notification_email.assert_called_once() code, email, notifications = send_notification_email.call_args[0] eq(type(code), type(u'')) eq(email, '*****@*****.**') eq(len(notifications), 1) eq([(a['activity_type'], a['data']['package']['id']) for a in notifications[0]['activities']], [('new package', dataset['id'])]) eq(notifications[0]['subscription']['id'], subscription['id']) assert time_since_emails_last_sent(Frequency.IMMEDIATE.value) \ < datetime.timedelta(seconds=1)
def test_basic(self, mail_recipient): dataset, activity = factories.DatasetActivity( timestamp=datetime.datetime.now() - datetime.timedelta(minutes=10), return_activity=True) # {subscription: [activity, ...], ...} subscription_activities = { factories.Subscription(dataset_id=dataset['id'], return_object=True): [activity] } notifications_by_email = { '*****@*****.**': dictize_notifications(subscription_activities) } send_emails(notifications_by_email) mail_recipient.assert_called_once() body = mail_recipient.call_args[1]['body'] print(body) assert_in('new dataset', body)
def test_basic(self): dataset, activity = factories.DatasetActivity( timestamp=datetime.datetime.now() - datetime.timedelta(minutes=10), return_activity=True) # {subscription: [activity, ...], ...} subscription_activities = { factories.Subscription(dataset_id=dataset['id'], return_object=True): [activity] } notifications = dictize_notifications(subscription_activities) email_vars = get_notification_email_vars(email='*****@*****.**', notifications=notifications) eq(email_vars['notifications'], [{ 'activities': [{ 'activity_type': u'new dataset', 'dataset_href': 'http://test.ckan.net/dataset/{}'.format(dataset['name']), 'dataset_link': literal( u'<a href="http://test.ckan.net/dataset/{}">{}</a>'.format( dataset['name'], dataset['title'])), 'timestamp': activity.timestamp }], 'object_link': 'http://test.ckan.net/dataset/{}'.format(dataset['id']), 'object_name': dataset['name'], 'object_title': dataset['title'], 'object_type': u'dataset' }])