Ejemplo n.º 1
0
    def test_with_nested_initial_elements(self):
        fake = Fake.objects.create(nested=[
            Nested(name=faker.name(), sub=SubNested(name=faker.word())),
            Nested(name=faker.name(), sub=SubNested(name=faker.word())),
        ])
        order = [n.id for n in fake.nested]
        data = [
            {'id': str(fake.nested[0].id)},
            {'id': str(fake.nested[1].id)},
            {'name': faker.name(), 'sub': {'name': faker.name()}},
        ]
        form = self.factory({'nested': data}, fake, sub=True)

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), 3)
        for idx, id in enumerate(order):
            nested = fake.nested[idx]
            self.assertEqual(nested.id, id)
            self.assertIsNotNone(nested.sub)
            self.assertIsNotNone(nested.sub.name)
        self.assertIsNotNone(fake.nested[2].id)
        self.assertEqual(fake.nested[2].sub.name, data[2]['sub']['name'])
Ejemplo n.º 2
0
    def test_reorder_initial_elements_with_raw(self):
        fake = Fake.objects.create(nested=[
            Nested(name=faker.name(), raw={'test': 0}),
            Nested(name=faker.name(), raw={'test': 1}),
            Nested(name=faker.name(), raw={'test': 2}),
            Nested(name=faker.name(), raw={'test': 3}),
        ])
        initial = [(n.id, n.name) for n in fake.nested]

        new_order = [1, 2, 3, 0]
        form = self.factory({'nested': [
            {'id': str(fake.nested[i].id)} for i in new_order
        ]}, fake)

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), len(initial))
        for nested, old_idx in zip(fake.nested, new_order):
            id, name = initial[old_idx]
            self.assertEqual(nested.id, id)
            self.assertEqual(nested.name, name)
            self.assertEqual(nested.raw['test'], old_idx)
Ejemplo n.º 3
0
    def test_with_initial_elements(self):
        fake = Fake.objects.create(nested=Nested(name=faker.name()))
        new_name = faker.name()
        form = self.factory({'nested': {'name': new_name}}, fake)

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertIsNotNone(fake.nested.id)
        self.assertEqual(fake.nested.name, new_name)
Ejemplo n.º 4
0
    def test_non_submitted_subnested(self):
        form = self.factory({'nested': [
            {'name': faker.name()},
            {'name': faker.name(), 'sub': {'name': faker.name()}},
        ]}, sub=True)

        form.validate()
        self.assertEqual(form.errors, {})

        fake = form.save()

        self.assertEqual(len(fake.nested), 2)
        self.assertIsNone(fake.nested[0].sub)
        self.assertIsNotNone(fake.nested[1].sub)
Ejemplo n.º 5
0
    def feed(self,
             feed_title,
             title,
             content,
             url,
             published=None,
             summary=None,
             enclosure=None,
             media_thumbnail=None):
        feed = FeedGenerator()
        feed.title(feed_title)
        feed.description(faker.sentence())
        feed.link({'href': WP_FEED_URL})

        entry = feed.add_entry()
        entry.title(title)
        entry.link({'href': url})
        entry.author(name=faker.name())
        entry.content(content, type="cdata")
        if summary:
            entry.description(summary)
        if enclosure:
            entry.enclosure(url=enclosure['url'],
                            type=enclosure['type'],
                            length=str(faker.pyint()))
        if media_thumbnail:
            feed.load_extension('media')
            entry.media.thumbnail({'url': media_thumbnail})
        tz = pytz.timezone(faker.timezone())
        published = published or faker.date_time(tzinfo=tz)
        entry.published(published)
        entry.updated(faker.date_time_between(start_date=published, tzinfo=tz))

        return feed.rss_str().decode('utf8')
Ejemplo n.º 6
0
    def test_with_multiple_valid_data(self):
        fake = Fake()
        form = self.factory(MultiDict([
            ('nested-0-name', faker.name()),
            ('nested-1-name', faker.name()),
            ('nested-2-name', faker.name()),
        ]))

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), 3)
        for nested in fake.nested:
            self.assertIsInstance(nested, Nested)
Ejemplo n.º 7
0
    def test_update_job_change_type(self):
        @job('a-job')
        def test_job():
            pass

        task = PeriodicTask.objects.create(
            name=faker.name(),
            description=faker.sentence(),
            task='a-job',
            crontab=PeriodicTask.Crontab(minute='5'))

        self.login(AdminFactory())
        response = self.put(
            url_for('api.job', id=task.id), {
                'name': task.name,
                'description': task.description,
                'task': task.task,
                'interval': {
                    'every': 5,
                    'period': 'minutes',
                }
            })
        self.assert200(response)

        self.assertEqual(response.json['id'], str(task.id))
        self.assertEqual(response.json['name'], task.name)
        self.assertEqual(response.json['task'], task.task)
        self.assertEqual(response.json['description'], task.description)
        self.assertEqual(response.json['interval']['every'], 5)
        self.assertEqual(response.json['interval']['period'], 'minutes')
        self.assertIsNone(response.json['crontab'])
Ejemplo n.º 8
0
    def feed(self, feed_title, title, content, url, published=None, summary=None,
             enclosure=None, media_thumbnail=None):
        feed = FeedGenerator()
        feed.title(feed_title)
        feed.description(faker.sentence())
        feed.link({'href': WP_FEED_URL})

        entry = feed.add_entry()
        entry.title(title)
        entry.link({'href': url})
        entry.author(name=faker.name())
        entry.content(content, type="cdata")
        if summary:
            entry.description(summary)
        if enclosure:
            entry.enclosure(url=enclosure['url'],
                            type=enclosure['type'],
                            length=str(faker.pyint()))
        if media_thumbnail:
            feed.load_extension('media')
            entry.media.thumbnail({'url': media_thumbnail})
        tz = pytz.timezone(faker.timezone())
        published = published or faker.date_time(tzinfo=tz)
        entry.published(published)
        entry.updated(faker.date_time_between(start_date=published, tzinfo=tz))

        return feed.rss_str().decode('utf8')
Ejemplo n.º 9
0
 def feed(self, feed_title, title, content, url, published=None, summary=None,
          enclosure=None, media_thumbnail=None):
     feed = AtomFeed(feed_title, feed_url=WP_FEED_URL)
     tz = pytz.timezone(faker.timezone())
     published = published or faker.date_time(tzinfo=tz)
     kwargs = {
         'content_type': 'html',
         'author': faker.name(),
         'url': url,
         'updated': faker.date_time_between(start_date=published, tzinfo=tz),
         'published': published
     }
     if summary:
         kwargs['summary'] = summary
     if enclosure:
         kwargs['links'] = [{
             'type': enclosure['type'],
             'href': enclosure['url'],
             'rel': 'enclosure',
             'length': faker.pyint(),
         }]
     feed.add(title, content, **kwargs)
     out = feed.to_string()
     if media_thumbnail:
         el = '<media:thumbnail url="{0}" />'.format(media_thumbnail)
         out = out.replace('<feed', '<feed xmlns:media="http://search.yahoo.com/mrss/"')
         out = out.replace('</entry>', '{0}</entry>'.format(el))
     return out
Ejemplo n.º 10
0
    def test_with_multiple_valid_json(self):
        fake = Fake()
        form = self.factory({'nested': [
            {'name': faker.name()},
            {'name': faker.name()},
            {'name': faker.name()},
        ]})

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), 3)
        for nested in fake.nested:
            self.assertIsInstance(nested, Nested)
Ejemplo n.º 11
0
    def test_update_job(self):
        @job('a-job')
        def test_job():
            pass

        task = PeriodicTask.objects.create(
            name=faker.name(),
            description=faker.sentence(),
            task='a-job',
            crontab=PeriodicTask.Crontab(minute='5'))

        self.login(AdminFactory())
        response = self.put(
            url_for('api.job', id=task.id), {
                'name': task.name,
                'description': 'New description',
                'task': task.task,
                'crontab': task.crontab.to_json()
            })
        self.assert200(response)

        self.assertEqual(response.json['id'], str(task.id))
        self.assertEqual(response.json['name'], task.name)
        self.assertEqual(response.json['task'], task.task)
        self.assertEqual(response.json['description'], 'New description')
        self.assertIsNotNone(response.json['crontab'])
        self.assertIsNone(response.json['interval'])
Ejemplo n.º 12
0
    def test_update_job(self):
        @job('a-job')
        def test_job():
            pass

        task = PeriodicTask.objects.create(
            name=faker.name(),
            description=faker.sentence(),
            task='a-job',
            crontab=PeriodicTask.Crontab(minute='5')
        )

        self.login(AdminFactory())
        response = self.put(url_for('api.job', id=task.id), {
            'name': task.name,
            'description': 'New description',
            'task': task.task,
            'crontab': task.crontab.to_json()
        })
        self.assert200(response)

        self.assertEqual(response.json['id'], str(task.id))
        self.assertEqual(response.json['name'], task.name)
        self.assertEqual(response.json['task'], task.task)
        self.assertEqual(response.json['description'], 'New description')
        self.assertIsNotNone(response.json['crontab'])
        self.assertIsNone(response.json['interval'])
Ejemplo n.º 13
0
    def test_with_multiple_valid_json(self):
        fake = Fake()
        form = self.factory({'nested': [
            {'name': faker.name()},
            {'name': faker.name()},
            {'name': faker.name()},
        ]})

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), 3)
        for nested in fake.nested:
            self.assertIsInstance(nested, Nested)
Ejemplo n.º 14
0
    def test_update_job_change_type(self):
        @job('a-job')
        def test_job():
            pass

        task = PeriodicTask.objects.create(
            name=faker.name(),
            description=faker.sentence(),
            task='a-job',
            crontab=PeriodicTask.Crontab(minute='5')
        )

        self.login(AdminFactory())
        response = self.put(url_for('api.job', id=task.id), {
            'name': task.name,
            'description': task.description,
            'task': task.task,
            'interval': {
                'every': 5,
                'period': 'minutes',
            }
        })
        self.assert200(response)

        self.assertEqual(response.json['id'], str(task.id))
        self.assertEqual(response.json['name'], task.name)
        self.assertEqual(response.json['task'], task.task)
        self.assertEqual(response.json['description'], task.description)
        self.assertEqual(response.json['interval']['every'], 5)
        self.assertEqual(response.json['interval']['period'], 'minutes')
        self.assertIsNone(response.json['crontab'])
Ejemplo n.º 15
0
    def test_with_valid_json_data_id_only(self):
        nested = Nested.objects.create(name=faker.name())
        form = WithGenericChoicesForm.from_json({'nested': str(nested.id)})

        form.validate()
        self.assertIn('nested', form.errors)
        self.assertEqual(len(form.errors['nested']), 1)
Ejemplo n.º 16
0
    def test_with_invalid_id(self):
        Nested.objects.create(name=faker.name())
        form = WithReferenceForm.from_json({'nested': 'bad'})

        form.validate()
        self.assertIn('nested', form.errors)
        self.assertEqual(len(form.errors['nested']), 1)
Ejemplo n.º 17
0
 def feed(self, feed_title, title, content, url, published=None, summary=None,
          enclosure=None, media_thumbnail=None):
     feed = AtomFeed(feed_title, feed_url=WP_FEED_URL)
     tz = pytz.timezone(faker.timezone())
     published = published or faker.date_time(tzinfo=tz)
     kwargs = {
         'content_type': 'html',
         'author': faker.name(),
         'url': url,
         'updated': faker.date_time_between(start_date=published, tzinfo=tz),
         'published': published
     }
     if summary:
         kwargs['summary'] = summary
     if enclosure:
         kwargs['links'] = [{
             'type': enclosure['type'],
             'href': enclosure['url'],
             'rel': 'enclosure',
             'length': faker.pyint(),
         }]
     feed.add(title, content, **kwargs)
     out = feed.to_string()
     if media_thumbnail:
         el = '<media:thumbnail url="{0}" />'.format(media_thumbnail)
         out = out.replace('<feed', '<feed xmlns:media="http://search.yahoo.com/mrss/"')
         out = out.replace('</entry>', '{0}</entry>'.format(el))
     return out
Ejemplo n.º 18
0
    def test_with_multiple_valid_data(self):
        fake = Fake()
        form = self.factory(MultiDict([
            ('nested-0-name', faker.name()),
            ('nested-1-name', faker.name()),
            ('nested-2-name', faker.name()),
        ]))

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), 3)
        for nested in fake.nested:
            self.assertIsInstance(nested, Nested)
Ejemplo n.º 19
0
    def test_with_non_submitted_initial_elements(self):
        fake = Fake.objects.create(nested=[
            Nested(name=faker.name()),
            Nested(name=faker.name()),
        ])
        initial = [(n.id, n.name) for n in fake.nested]
        form = self.factory({'name': faker.word()}, fake)

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), len(initial))
        for idx, (id, name) in enumerate(initial):
            nested = fake.nested[idx]
            self.assertEqual(nested.id, id)
            self.assertEqual(nested.name, name)
Ejemplo n.º 20
0
    def test_with_valid_form_data_id_only(self):
        nested = Nested.objects.create(name=faker.name())
        form = WithGenericForm(MultiDict({
            'nested': str(nested.id)
        }))

        form.validate()
        self.assertIn('nested', form.errors)
        self.assertEqual(len(form.errors['nested']), 1)
Ejemplo n.º 21
0
    def test_with_non_submitted_initial_elements(self):
        fake = Fake.objects.create(nested=[
            Nested(name=faker.name()),
            Nested(name=faker.name()),
        ])
        initial = [(n.id, n.name) for n in fake.nested]
        form = self.factory({'name': faker.word()}, fake)

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), len(initial))
        for idx, (id, name) in enumerate(initial):
            nested = fake.nested[idx]
            self.assertEqual(nested.id, id)
            self.assertEqual(nested.name, name)
Ejemplo n.º 22
0
    def test_with_invalid_ref_id(self):
        Nested.objects.create(name=faker.name())
        form = self.form.from_json({'nested': {
            'class': 'Nested',
            'id': 'bad'
        }})

        form.validate()
        self.assertIn('nested', form.errors)
        self.assertEqual(len(form.errors['nested']), 1)
Ejemplo n.º 23
0
    def test_with_ref_class_not_in_choices(self):
        nested = Nested.objects.create(name=faker.name())
        form = self.form.from_json({'nested': {
            'class': 'Nested3',
            'id': str(nested.id)
        }})

        form.validate()
        self.assertIn('nested', form.errors)
        self.assertEqual(len(form.errors['nested']), 1)
Ejemplo n.º 24
0
    def test_initial_data(self):
        nested = Nested.objects.create(name=faker.name())
        model = self.model(nested=nested)
        form = self.form(obj=model)

        self.assertEqual(form.nested.data, nested)

        form.populate_obj(model)

        self.assertEqual(model.nested, nested)
Ejemplo n.º 25
0
    def test_with_initial_elements_as_ids(self):
        fake = Fake.objects.create(nested=[
            Nested(name=faker.name()),
            Nested(name=faker.name()),
        ])
        order = [n.id for n in fake.nested]
        form = self.factory({'nested': [
            str(fake.nested[0].id),
            str(fake.nested[1].id),
            {'name': faker.name()},
        ]}, fake)

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), 3)
        for idx, id in enumerate(order):
            self.assertEqual(fake.nested[idx].id, id)
        self.assertIsNotNone(fake.nested[2].id)
Ejemplo n.º 26
0
    def test_with_initial_elements_as_ids(self):
        fake = Fake.objects.create(nested=[
            Nested(name=faker.name()),
            Nested(name=faker.name()),
        ])
        order = [n.id for n in fake.nested]
        form = self.factory({'nested': [
            str(fake.nested[0].id),
            str(fake.nested[1].id),
            {'name': faker.name()},
        ]}, fake)

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), 3)
        for idx, id in enumerate(order):
            self.assertEqual(fake.nested[idx].id, id)
        self.assertIsNotNone(fake.nested[2].id)
Ejemplo n.º 27
0
    def test_with_one_valid_json_object(self):
        nested = Nested.objects.create(name=faker.name())
        fake = Fake()
        form = FakeForm.from_json({'nested': [{'id': str(nested.id)}]})

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), 1)
        self.assertIsInstance(fake.nested[0], Nested)
        self.assertEqual(fake.nested[0], nested)
Ejemplo n.º 28
0
    def test_with_valid_json_data_id_only(self):
        nested = Nested.objects.create(name=faker.name())
        model = WithReference()
        form = WithReferenceForm.from_json({'nested': str(nested.id)})

        form.validate()
        self.assertEqual(form.errors, {})
        self.assertEqual(form.nested.data, nested)

        form.populate_obj(model)

        self.assertIsInstance(model.nested, Nested)
        self.assertEqual(model.nested, nested)
Ejemplo n.º 29
0
    def test_with_non_submitted_initial_elements(self):
        fake = Fake.objects.create(nested=Nested(name=faker.name()))
        initial_id = fake.nested.id
        initial_name = fake.nested.name
        form = self.factory({'name': faker.word()}, fake)

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(fake.nested.id, initial_id)
        self.assertEqual(fake.nested.name, initial_name)
Ejemplo n.º 30
0
    def test_with_multiple_valid_data(self):
        nesteds = [Nested.objects.create(name=faker.name()) for _ in range(3)]
        ids = [str(n.id) for n in nesteds]
        fake = Fake()
        form = FakeForm(MultiDict({'nested': ','.join(ids)}))

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), len(nesteds))
        self.assertIsInstance(fake.nested[0], Nested)
        self.assertEqual(fake.nested, nesteds)
    def test_delete_job_need_admin(self):
        @job('a-job')
        def test_job():
            pass

        task = PeriodicTask.objects.create(
            name=faker.name(),
            description=faker.sentence(),
            task='a-job',
            crontab=PeriodicTask.Crontab(minute='5'))

        self.login()
        response = self.delete(url_for('api.job', id=task.id))
        self.assert403(response)
Ejemplo n.º 32
0
    def test_with_multiple_valid_json_id(self):
        nested = [Nested.objects.create(name=faker.name()) for _ in range(3)]
        ids = [str(n.id) for n in nested]
        fake = Fake()
        form = FakeForm.from_json({'nested': ids})

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), len(nested))
        self.assertIsInstance(fake.nested[0], Nested)
        self.assertEqual(fake.nested, nested)
Ejemplo n.º 33
0
    def test_reorder_initial_elements(self):
        fake = Fake.objects.create(nested=[
            Nested(name=faker.name()),
            Nested(name=faker.name()),
            Nested(name=faker.name()),
            Nested(name=faker.name()),
        ])
        initial = [(n.id, n.name) for n in fake.nested]
        new_order = [1, 2, 3, 0]
        form = self.factory({'nested': [
            {'id': str(fake.nested[i].id)} for i in new_order
        ]}, fake)

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), len(initial))
        for nested, old_idx in zip(fake.nested, new_order):
            id, name = initial[old_idx]
            self.assertEqual(nested.id, id)
            self.assertEqual(nested.name, name)
Ejemplo n.º 34
0
    def test_unschedule(self):
        periodic_task = PeriodicTask.objects.create(
            task='harvest',
            name=faker.name(),
            description=faker.sentence(),
            enabled=True,
            crontab=PeriodicTask.Crontab())
        source = HarvestSourceFactory(periodic_task=periodic_task)
        with assert_emit(signals.harvest_source_unscheduled):
            actions.unschedule(str(source.id))

        source.reload()
        self.assertEqual(len(PeriodicTask.objects), 0)
        self.assertIsNone(source.periodic_task)
Ejemplo n.º 35
0
    def test_update_initial_elements(self):
        fake = Fake.objects.create(nested=[
            Nested(name=faker.name()),
            Nested(name=faker.name()),
        ])
        initial = [n.id for n in fake.nested]
        form = self.factory({'nested': [
            {'id': str(fake.nested[0].id), 'name': faker.name()},
            {'id': str(fake.nested[1].id), 'name': faker.name()},
            {'name': faker.name()},
        ]}, fake)
        names = [n['name'] for n in form.data['nested']]

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), 3)
        for idx, id in enumerate(initial):
            nested = fake.nested[idx]
            self.assertEqual(nested.id, id)
            self.assertEqual(nested.name, names[idx])
        self.assertIsNotNone(fake.nested[2].id)
Ejemplo n.º 36
0
    def test_unschedule(self):
        periodic_task = PeriodicTask.objects.create(
            task='harvest',
            name=faker.name(),
            description=faker.sentence(),
            enabled=True,
            crontab=PeriodicTask.Crontab()
        )
        source = HarvestSourceFactory(periodic_task=periodic_task)
        with assert_emit(signals.harvest_source_unscheduled):
            actions.unschedule(str(source.id))

        source.reload()
        assert len(PeriodicTask.objects) == 0
        assert source.periodic_task is None
Ejemplo n.º 37
0
    def test_delete_job_need_admin(self):
        @job('a-job')
        def test_job():
            pass

        task = PeriodicTask.objects.create(
            name=faker.name(),
            description=faker.sentence(),
            task='a-job',
            crontab=PeriodicTask.Crontab(minute='5')
        )

        self.login()
        response = self.delete(url_for('api.job', id=task.id))
        self.assert403(response)
Ejemplo n.º 38
0
 def test_render_home_with_blog_without_thumbnail(self, home):
     '''It should render the home page with the latest blog article'''
     post = {
         'title': faker.name(),
         'link': faker.uri(),
         'summary': faker.sentence(),
         'date': faker.date_time(),
     }
     response = home(post)
     assert200(response)
     page = response.data.decode('utf8')
     assert post['title'] in page
     assert post['link'] in page
     assert post['summary'] in page
     assert 'blog-thumbnail' not in page
Ejemplo n.º 39
0
 def test_render_home_with_blog_without_thumbnail(self, home):
     '''It should render the home page with the latest blog article'''
     post = {
         'title': faker.name(),
         'link': faker.uri(),
         'summary': faker.sentence(),
         'date': faker.date_time(),
     }
     response = home(post)
     assert200(response)
     page = response.data.decode('utf8')
     assert post['title'] in page
     assert post['link'] in page
     assert post['summary'] in page
     assert 'blog-thumbnail' not in page
Ejemplo n.º 40
0
    def test_update_initial_elements(self):
        fake = Fake.objects.create(nested=[
            Nested(name=faker.name()),
            Nested(name=faker.name()),
        ])
        initial = [n.id for n in fake.nested]
        form = self.factory({'nested': [
            {'id': str(fake.nested[0].id), 'name': faker.name()},
            {'id': str(fake.nested[1].id), 'name': faker.name()},
            {'name': faker.name()},
        ]}, fake)
        names = [n['name'] for n in form.data['nested']]

        form.validate()
        self.assertEqual(form.errors, {})

        form.populate_obj(fake)

        self.assertEqual(len(fake.nested), 3)
        for idx, id in enumerate(initial):
            nested = fake.nested[idx]
            self.assertEqual(nested.id, id)
            self.assertEqual(nested.name, names[idx])
        self.assertIsNotNone(fake.nested[2].id)
Ejemplo n.º 41
0
def test_minimal_ckan_response(rmock):
    '''CKAN Harvester should accept the minimum dataset payload'''
    CKAN_URL = 'https://harvest.me/'
    API_URL = '{}api/3/action/'.format(CKAN_URL)
    PACKAGE_LIST_URL = '{}package_list'.format(API_URL)
    PACKAGE_SHOW_URL = '{}package_show'.format(API_URL)

    name = faker.unique_string()
    json = {
        'success': True,
        'result': {
            'id': faker.uuid4(),
            'name': name,
            'title': faker.sentence(),
            'maintainer': faker.name(),
            'tags': [],
            'private': False,
            'maintainer_email': faker.email(),
            'license_id': None,
            'metadata_created': faker.iso8601(),
            'organization': None,
            'metadata_modified': faker.iso8601(),
            'author': None,
            'author_email': None,
            'notes': faker.paragraph(),
            'license_title': None,
            'state': None,
            'revision_id': faker.unique_string(),
            'type': 'dataset',
            'resources': [],
            # extras is not always present so we exclude it from the minimal payload
        }
    }
    source = HarvestSourceFactory(backend='ckan', url=CKAN_URL)
    rmock.get(PACKAGE_LIST_URL,
              json={
                  'success': True,
                  'result': [name]
              },
              status_code=200,
              headers={'Content-Type': 'application/json'})
    rmock.get(PACKAGE_SHOW_URL,
              json=json,
              status_code=200,
              headers={'Content-Type': 'application/json'})
    actions.run(source.slug)
    source.reload()
    assert source.get_last_job().status == 'done'
Ejemplo n.º 42
0
    def test_with_valid_json_data_ref(self):
        nested = Nested.objects.create(name=faker.name())
        model = self.model()
        form = self.form.from_json({'nested': {
            'class': 'Nested',
            'id': str(nested.id)
        }})

        form.validate()
        self.assertEqual(form.errors, {})
        self.assertEqual(form.nested.data, nested)

        form.populate_obj(model)

        self.assertIsInstance(model.nested, Nested)
        self.assertEqual(model.nested, nested)
    def test_delete_job(self):
        @job('a-job')
        def test_job():
            pass

        task = PeriodicTask.objects.create(
            name=faker.name(),
            description=faker.sentence(),
            task='a-job',
            crontab=PeriodicTask.Crontab(minute='5'))

        self.login(AdminFactory())
        response = self.delete(url_for('api.job', id=task.id))
        self.assert204(response)

        self.assertIsNone(PeriodicTask.objects(id=task.id).first())
    def test_get_job(self):
        @job('a-job')
        def test_job():
            pass

        task = PeriodicTask.objects.create(
            name=faker.name(),
            description=faker.sentence(),
            task='a-job',
            crontab=PeriodicTask.Crontab(minute='5'))

        response = self.get(url_for('api.job', id=task.id))
        self.assert200(response)
        self.assertEqual(response.json['id'], str(task.id))
        self.assertEqual(response.json['name'], task.name)
        self.assertEqual(response.json['description'], task.description)
        self.assertEqual(response.json['task'], task.task)
Ejemplo n.º 45
0
    def test_delete_job(self):
        @job('a-job')
        def test_job():
            pass

        task = PeriodicTask.objects.create(
            name=faker.name(),
            description=faker.sentence(),
            task='a-job',
            crontab=PeriodicTask.Crontab(minute='5')
        )

        self.login(AdminFactory())
        response = self.delete(url_for('api.job', id=task.id))
        self.assert204(response)

        self.assertIsNone(PeriodicTask.objects(id=task.id).first())
Ejemplo n.º 46
0
    def test_unschedule_source_is_admin_only(self, api):
        '''It should only allow admins to unschedule a source'''
        api.login()
        periodic_task = PeriodicTask.objects.create(
            task='harvest',
            name=faker.name(),
            description=faker.sentence(),
            enabled=True,
            crontab=PeriodicTask.Crontab())
        source = HarvestSourceFactory(periodic_task=periodic_task)

        url = url_for('api.schedule_harvest_source', ident=str(source.id))
        response = api.delete(url)
        assert403(response)

        source.reload()
        assert source.periodic_task is not None
Ejemplo n.º 47
0
    def test_unschedule_source(self):
        '''It should allow to unschedule a source if admin'''
        self.login(AdminFactory())
        periodic_task = PeriodicTask.objects.create(
            task='harvest',
            name=faker.name(),
            description=faker.sentence(),
            enabled=True,
            crontab=PeriodicTask.Crontab())
        source = HarvestSourceFactory(periodic_task=periodic_task)

        url = url_for('api.schedule_harvest_source', ident=str(source.id))
        response = self.delete(url)
        self.assert204(response)

        source.reload()
        self.assertIsNone(source.periodic_task)
Ejemplo n.º 48
0
 def test_render_home_with_blog(self):
     '''It should render the home page with the latest blog article'''
     post_url = faker.uri()
     feed = AtomFeed('Some blog', feed_url=WP_ATOM_URL)
     feed.add('Some post',
              '<div>Some content</div>',
              content_type='html',
              author=faker.name(),
              url=post_url,
              updated=faker.date_time(),
              published=faker.date_time())
     httpretty.register_uri(httpretty.GET, WP_ATOM_URL,
                            body=feed.to_string(),
                            content_type='application/atom+xml')
     response = self.get(url_for('site.home'))
     self.assert200(response)
     self.assertIn('Some post', response.data.decode('utf8'))
     self.assertIn(post_url, response.data.decode('utf8'))
Ejemplo n.º 49
0
    def test_get_job(self):
        @job('a-job')
        def test_job():
            pass

        task = PeriodicTask.objects.create(
            name=faker.name(),
            description=faker.sentence(),
            task='a-job',
            crontab=PeriodicTask.Crontab(minute='5')
        )

        response = self.get(url_for('api.job', id=task.id))
        self.assert200(response)
        self.assertEqual(response.json['id'], str(task.id))
        self.assertEqual(response.json['name'], task.name)
        self.assertEqual(response.json['description'], task.description)
        self.assertEqual(response.json['task'], task.task)
Ejemplo n.º 50
0
    def test_update_job_need_admin(self):
        @job('a-job')
        def test_job():
            pass

        task = PeriodicTask.objects.create(
            name=faker.name(),
            description=faker.sentence(),
            task='a-job',
            crontab=PeriodicTask.Crontab(minute='5')
        )

        self.login()
        response = self.put(url_for('api.job', id=task.id), {
            'name': task.name,
            'description': 'New description',
            'task': task.task,
            'crontab': task.crontab.to_json()
        })
        self.assert403(response)
Ejemplo n.º 51
0
    def test_scheduled_jobs_list(self):
        @job('a-job')
        def test_job():
            pass

        for i in range(6):
            params = {
                'name': faker.name(),
                'description': faker.sentence(),
                'task': 'a-job'
            }
            if i % 2:
                params['crontab'] = PeriodicTask.Crontab(minute=str(i))
            else:
                params['interval'] = PeriodicTask.Interval(every=i,
                                                           period='minutes')
            PeriodicTask.objects.create(**params)

        response = self.get(url_for('api.jobs'))
        self.assert200(response)