Exemplo n.º 1
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)
    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)
Exemplo n.º 3
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'])
Exemplo n.º 4
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)
Exemplo n.º 5
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)
Exemplo n.º 6
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)
Exemplo n.º 7
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)
    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)
Exemplo n.º 9
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'])
Exemplo n.º 10
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'])
Exemplo n.º 11
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)
Exemplo 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'])
Exemplo n.º 13
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'])
Exemplo n.º 14
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)
Exemplo n.º 15
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)
Exemplo n.º 16
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)
Exemplo n.º 17
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)
Exemplo n.º 18
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)
Exemplo n.º 19
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)
Exemplo n.º 20
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 self.assert_emit(signals.harvest_source_unscheduled):
            actions.unschedule(str(source.id))

        source.reload()
        self.assertEqual(len(PeriodicTask.objects), 0)
        self.assertIsNone(source.periodic_task)
Exemplo n.º 21
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)
Exemplo n.º 22
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)
Exemplo n.º 23
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)
Exemplo n.º 24
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)
Exemplo n.º 25
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)
Exemplo n.º 26
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)
Exemplo n.º 27
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 self.assert_emit(signals.harvest_source_unscheduled):
            actions.unschedule(str(source.id))

        source.reload()
        self.assertEqual(len(PeriodicTask.objects), 0)
        self.assertIsNone(source.periodic_task)
Exemplo n.º 28
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)
Exemplo n.º 29
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())
Exemplo n.º 30
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)
Exemplo n.º 31
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())
Exemplo n.º 32
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)
Exemplo n.º 33
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)
Exemplo n.º 34
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)
Exemplo n.º 35
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)
Exemplo n.º 36
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)
Exemplo n.º 37
0
class GeoLevelFactory(MongoEngineFactory):
    class Meta:
        model = GeoLevel

    id = factory.LazyAttribute(lambda o: unique_string())
    name = factory.LazyAttribute(lambda o: faker.name())