def test_validate_submission_limit(self): """ Test that validate_submission_limit works as it should with valid data """ instance = self._create_instance() task = instance.get_task() user = instance.user task.user_submission_target = 2 task.rrule = 'FREQ=DAILY;INTERVAL=1;UNTIL=20210729T210000Z' task.save() userprofile = instance.user.userprofile data = instance.json userprofile.expertise = '4' data['_submission_time'] = "2019-09-01T20:00:00" mommy.make('main.Bounty', task=task, amount=4000) mocked_location = mommy.make('main.Location', geopoint=Point(36.806852, -1.313721), radius=10) mommy.make('main.TaskLocation', task=task, location=mocked_location, start='09:00:00', end='19:00:00', timing_rule='RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5') create_submission(instance) status, comment = validate_submission_limit(task, user) self.assertEqual(Submission.PENDING, status) self.assertEqual("", comment)
def task_create_submission(instance_id: int): """ Takes an Instance and validates it and creates a Submission """ try: instance = Instance.objects.get(pk=instance_id) except Instance.DoesNotExist: # pylint: disable=no-member pass else: create_submission(ona_instance=instance)
def test_validate_submission_limit_with_invalid_data(self): """ Test that validate_submission_limit works as it should with invalid data """ instance = self._create_instance() task = instance.get_task() user = instance.user task.user_submission_target = 1 task.rrule = 'FREQ=DAILY;INTERVAL=1;UNTIL=20210729T210000Z' task.save() userprofile = instance.user.userprofile data = instance.json userprofile.expertise = '4' data['_submission_time'] = "2019-09-01T20:00:00" mommy.make('main.Bounty', task=task, amount=4000) mocked_location = mommy.make('main.Location', geopoint=Point(36.806852, -1.313721), radius=10) mommy.make('main.TaskLocation', task=task, location=mocked_location, start='09:00:00', end='19:00:00', timing_rule='RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5') # create two submissions create_submission(instance) # create another submission for this same user data = { "_xform_id_string": "aFEjJKzULJbQYsmQzKcpL9", "_geolocation": [36.776554, -1.294328], "_status": "submitted_via_web", "_review_status": settings.ONA_SUBMISSION_REVIEW_APPROVED, "_review_comment": "This is a review comment", "_submitted_by": "dave", "_xform_id": 25, "_submission_time": "2019-09-01T07:42:07", "_version": "vvadCJQ9XjXXSMmFSnKZqK", "_attachments": [], "_id": 20 } process_instance(data) instance2 = Instance.objects.get(ona_pk=20) create_submission(instance2) status, comment = validate_submission_limit(task, user) self.assertEqual(Submission.REJECTED, status) self.assertEqual(SUBMISSIONS_MORE_THAN_LIMIT, comment)
def test_create_submission(self): """ Test that create_submission works the way it should for valid data """ # Test it creates a Submission Object If Data is Valid instance = self._create_instance() userprofile = instance.user.userprofile data = instance.json userprofile.expertise = '4' data['_submission_time'] = "2019-09-01T20:00:00" rrule = 'FREQ=DAILY;INTERVAL=1;UNTIL=20210729T210000Z' task = instance.get_task() task.timing_rule = rrule task.save() mocked_bounty = mommy.make('main.Bounty', task=task, amount=4000) mocked_location = mommy.make('main.Location', geopoint=Point(36.806852, -1.313721), radius=10) mommy.make('main.TaskLocation', task=task, location=mocked_location, start='09:00:00', end='19:00:00', timing_rule='RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5') instance.refresh_from_db() submission = create_submission(instance) self.assertEqual(len(Submission.objects.all()), 1) self.assertEqual(Submission.APPROVED, submission.status) self.assertEqual(mocked_location, submission.location) self.assertEqual(mocked_bounty, submission.bounty) self.assertEqual(task, submission.task) self.assertEqual(instance.user, submission.user) self.assertTrue(submission.valid) # Test that a submission is not recreated if a Submission # tied to the instance exists submission = create_submission(instance) self.assertEqual(len(Submission.objects.all()), 1)
def test_create_reviewed_submission(self): """ Test that creation of submission based on review status - reviewed submissions don't go through time, location validation - update location fields for reviewed submissions """ instance = self._create_instance() userprofile = instance.user.userprofile data = instance.json userprofile.expertise = '4' data['_submission_time'] = "2019-09-01T20:00:00" rrule = 'FREQ=DAILY;INTERVAL=1;UNTIL=20210729T210000Z' task = instance.get_task() task.timing_rule = rrule task.required_expertise = Task.INTERMEDIATE task.save() mocked_bounty = mommy.make('main.Bounty', task=task, amount=4000) mocked_location = mommy.make('main.Location', geopoint=Point(36.806852, -1.313721), radius=10) mommy.make('main.TaskLocation', task=task, location=mocked_location, start='09:00:00', end='19:00:00', timing_rule='RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5') submission = create_submission(instance) self.assertEqual(Submission.APPROVED, submission.status) self.assertEqual(mocked_location, submission.location) self.assertEqual(mocked_bounty, submission.bounty) self.assertEqual(task, submission.task) self.assertEqual(instance.user, submission.user) self.assertTrue(submission.valid)
def test_create_submission_with_invalid_data(self): """ Test that create_submission works the way it should for invalid data """ # Test it creates a Submission Object with Rejected as status if # Data Fails a validation instance = self._create_instance(pending=True) userprofile = instance.user.userprofile data = instance.json userprofile.expertise = '1' data['_submission_time'] = "2018-07-18T21:00:00" rrule = 'FREQ=DAILY;INTERVAL=1;UNTIL=20210729T210000Z' task = instance.get_task() task.timing_rule = rrule task.required_expertise = Task.ADVANCED task.save() mommy.make('main.Bounty', task=task, amount=4000) mocked_location = mommy.make('main.Location', geopoint=Point(36.806852, -1.313721), radius=10) mommy.make('main.TaskLocation', task=task, location=mocked_location, start='09:00:00', end='19:00:00', timing_rule='RRULE:FREQ=DAILY;INTERVAL=10;COUNT=5') submission = create_submission(instance) self.assertEqual(Submission.REJECTED, submission.status) self.assertEqual(LACKING_EXPERTISE, submission.comments)