Пример #1
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)
    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'
        }])
Пример #4
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), [])
Пример #5
0
    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), [])
Пример #6
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), [])
Пример #7
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), [])
Пример #8
0
    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), [])
Пример #9
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'])])
Пример #10
0
    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'])])
Пример #11
0
    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'])])
Пример #12
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), [])
Пример #13
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), [])
Пример #14
0
    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']))
Пример #18
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)
Пример #19
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_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'
        }])