Beispiel #1
0
    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)
Beispiel #2
0
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)
Beispiel #3
0
    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)
Beispiel #4
0
    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)
Beispiel #5
0
    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)
Beispiel #6
0
    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)