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)
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'])
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)
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)
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)
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)
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'])
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'])
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)
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'])
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'])
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)
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)
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_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)
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)
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)
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)
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_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)
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)
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)
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)
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)
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)
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)
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)
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)
class GeoLevelFactory(MongoEngineFactory): class Meta: model = GeoLevel id = factory.LazyAttribute(lambda o: unique_string()) name = factory.LazyAttribute(lambda o: faker.name())