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_org(self): org, activity = factories.OrganizationActivity( timestamp=datetime.datetime.now() - datetime.timedelta(minutes=10), return_activity=True) # {subscription: [activity, ...], ...} subscription_activities = { factories.Subscription(organization_id=org['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 organization', 'dataset_href': u'', 'dataset_link': u'', 'timestamp': activity.timestamp }], 'object_link': 'http://test.ckan.net/organization/{}'.format(org['id']), 'object_name': org['name'], 'object_title': org['title'], 'object_type': u'organization' }])
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_daily_frequency_subscriptions_of_an_org_are_not_included(self): org = Organization() factories.Subscription(organization_id=org['id'], frequency='daily') Dataset(owner_org=org['id']) notifies = get_weekly_notifications() eq(_get_activities(notifies), [])
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_immediate_frequency_subscriptions_of_an_group_are_not_included( self): group = Group() factories.Subscription(group_id=group['id'], frequency='immediate') Dataset(groups=[{'id': group['id']}]) notifies = get_weekly_notifications() eq(_get_activities(notifies), [])
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_subscribe_to_an_group_and_its_dataset_has_activity(self): group = Group() subscription = factories.Subscription(group_id=group['id']) subscribe_model.Subscribe.set_emails_last_sent( Frequency.IMMEDIATE.value, datetime.datetime.now()) dataset = Dataset(groups=[{'id': group['id']}]) notifies = get_immediate_notifications() eq(notifies.keys(), [subscription['email']]) eq(_get_activities(notifies), [(u'*****@*****.**', u'new package', dataset['id'])])
def test_subscribe_to_an_org_and_its_dataset_has_activity(self): org = Organization() subscription = factories.Subscription(organization_id=org['id']) subscribe_model.Subscribe.set_emails_last_sent( Frequency.IMMEDIATE.value, datetime.datetime.now()) dataset = Dataset(owner_org=org['id']) notifies = get_immediate_notifications() eq(notifies.keys(), [subscription['email']]) eq(_get_activities(notifies), [(u'*****@*****.**', u'new package', dataset['id'])])
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 test_activity_before_the_subscription_is_not_notified(self): dataset = Dataset() factories.Activity(object_id=dataset['id'], activity_type='changed package') factories.Subscription(dataset_id=dataset['id'], created=datetime.datetime.now()) factories.Activity(object_id=dataset['id'], activity_type='changed package') notifies = get_immediate_notifications() eq(_get_activities(notifies), [(u'*****@*****.**', u'changed package', dataset['id'])])
def test_get_verification_email_contents(self): dataset = ckan_factories.Dataset() subscription = factories.Subscription(dataset_id=dataset['id'], return_object=True) subscription.verification_code = 'testcode' subject, body_plain_text, body_html = \ get_verification_email_contents(subscription) assert_equal(subject, 'Confirm your request for CKAN subscription') assert body_plain_text.strip().startswith( 'CKAN subscription requested'), body_plain_text.strip() assert body_html.strip().startswith( '<p>CKAN subscription requested'), body_html.strip()
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_get_verification_email_vars(self): dataset = ckan_factories.Dataset() subscription = factories.Subscription(dataset_id=dataset['id'], return_object=True) subscription.verification_code = 'testcode' email_vars = get_verification_email_vars(subscription) assert_equal(email_vars['site_title'], config['ckan.site_title']) assert_equal(email_vars['site_url'], 'http://test.ckan.net') assert_equal(email_vars['object_title'], 'Test Dataset') assert_equal(email_vars['object_type'], 'dataset') assert_equal(email_vars['email'], '*****@*****.**') assert_equal(email_vars['verification_link'], 'http://test.ckan.net/subscribe/verify?code=testcode') assert_equal(email_vars['object_link'], 'http://test.ckan.net/dataset/{}'.format(dataset['id']))
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_org(self): from ckan import model org = ckan_factories.Organization() subscribe_model.Subscribe.set_emails_last_sent( subscribe_model.Frequency.IMMEDIATE.value, datetime.datetime.now()) dataset = ckan_factories.Dataset(owner_org=org['id']) activity = model.Session.query(model.Activity) \ .filter_by(object_id=dataset['id']).first() subscription_activities = { factories.Subscription(organization_id=org['id'], return_object=True): [activity] } notifications = dictize_notifications(subscription_activities) email = get_notification_email_contents(code='the-code', email='*****@*****.**', notifications=notifications) # Check we link to the dataset, not just the org assert_in('http://test.ckan.net/dataset/{}'.format(dataset['name']), email[1]) assert_in( '<a href="http://test.ckan.net/dataset/{}">Test Dataset</a>'. format(dataset['name']), email[2])
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' }])