Пример #1
0
    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'])])
Пример #2
0
    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), [])
Пример #3
0
    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)
Пример #5
0
    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), [])
Пример #6
0
    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), [])
Пример #7
0
    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), [])
Пример #8
0
    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), [])
Пример #9
0
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)
Пример #11
0
    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)
Пример #12
0
    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'
        }])