Ejemplo n.º 1
0
 def test_record_order(self):
     # Make sure the order gets created, and that its ID matches
     # that in the payload
     order1, created1 = record_order(self.json_payload)
     self.assertTrue(created1)
     self.assertEqual(order1.id, self.json_payload['id'])
     # Try to create the order again, make sure we get a reference
     # instead
     order2, created2 = record_order(self.json_payload)
     self.assertFalse(created2)
     self.assertEqual(order1, order2)
Ejemplo n.º 2
0
    def test_invalid_sku(self):
        fixup_payload = self.raw_payload.decode('utf-8').replace(
            "course-v1:org+course+run1",  # noqa: E501
            "course-v1:org+nosuchcourse+run1")  # noqa: E501
        fixup_json_payload = json.loads(fixup_payload)
        order, created = record_order(fixup_json_payload)

        result = None
        with requests_mock.Mocker() as m:
            m.register_uri('POST', self.token_uri, json=self.token_response)
            m.register_uri('POST', self.enroll_uri, status_code=400)
            with self.assertRaises(HTTPError):
                result = process.delay(fixup_json_payload)
                result.get(5)

        self.assertEqual(result.state, 'FAILURE')

        # Even with the exception raised, it's the task failure
        # handler's job to set the status to ERROR. Given the async
        # nature of the task, though, the object reference doesn't
        # learn of the update until we read back the order. This can't
        # just use refresh_from_db(), because of the FSM-protected
        # status field.
        order = Order.objects.get(pk=order.id)
        self.assertEqual(order.status, Order.ERROR)
Ejemplo n.º 3
0
    def test_valid_order(self):
        order, created = record_order(self.json_payload)

        mock_get_course_by_id = Mock(return_value=self.course)
        mock_get_email_params = Mock(return_value=self.email_params)
        mock_enroll_email = Mock()
        with patch.multiple(utils,
                            get_course_by_id=mock_get_course_by_id,
                            get_email_params=mock_get_email_params,
                            enroll_email=mock_enroll_email):
            process_order(order, self.json_payload)

        self.assertEqual(order.status, Order.PROCESSED)
Ejemplo n.º 4
0
    def test_order_collision(self):
        order, created = record_order(self.json_payload)

        enrollment_response = {
            'action': 'enroll',
            'courses': {
                'course-v1:org+course+run1': {
                    'action':
                    'enroll',
                    'results': [{
                        'identifier': '*****@*****.**',
                        'after': {
                            'enrollment': False,
                            'allowed': True,
                            'user': False,
                            'auto_enroll': True
                        },
                        'before': {
                            'enrollment': False,
                            'allowed': False,
                            'user': False,
                            'auto_enroll': False
                        }
                    }],
                    'auto_enroll':
                    True
                }
            },
            'email_students': True,
            'auto_enroll': True
        }

        with requests_mock.Mocker() as m:
            m.register_uri('POST', self.token_uri, json=self.token_response)
            m.register_uri('POST', self.enroll_uri, json=enrollment_response)
            result1 = process.delay(self.json_payload)
            result2 = process.delay(self.json_payload)
            result3 = process.delay(self.json_payload)
            result1.get(5)
            result2.get(5)
            result3.get(5)

        self.assertEqual(result1.state, 'SUCCESS')
        self.assertEqual(result2.state, 'SUCCESS')
        self.assertEqual(result3.state, 'SUCCESS')

        # Read back the order (can't just use refresh_from_db(),
        # because of the FSM-protected status field)
        order = Order.objects.get(pk=order.id)
        self.assertEqual(order.status, Order.PROCESSED)
Ejemplo n.º 5
0
    def test_invalid_sku(self):
        # Make sure the order gets created, and that its ID matches
        # that in the payload
        fixup_payload = self.raw_payload.replace(
            "course-v1:org+course+run1",
            "course-v1:org+nosuchcourse+run1")  # noqa: E501
        fixup_json_payload = json.loads(fixup_payload)
        order, created = record_order(fixup_json_payload)

        # Non-existent course should raise a 404
        with self.assertRaises(Http404):
            process_order(order, fixup_json_payload)

        # At this stage, the order is still PROCESSING -- it's the
        # task failure handler's job to set the status to ERROR
        self.assertEqual(order.status, Order.PROCESSING)
Ejemplo n.º 6
0
    def test_invalid_sku(self):
        fixup_payload = self.raw_payload.decode('utf-8').replace(
            "course-v1:org+course+run1",  # noqa: E501
            "course-v1:org+nosuchcourse+run1")  # noqa: E501
        fixup_json_payload = json.loads(fixup_payload)
        order, created = record_order(fixup_json_payload)

        with requests_mock.Mocker() as m:
            m.register_uri('POST', self.token_uri, json=self.token_response)
            m.register_uri('POST', self.enroll_uri, status_code=400)
            # Non-existent course should raise a 400
            with self.assertRaises(HTTPError):
                process_order(order, fixup_json_payload)

        # At this stage, the order is still PROCESSING -- it's the
        # task failure handler's job to set the status to ERROR
        self.assertEqual(order.status, Order.PROCESSING)
Ejemplo n.º 7
0
    def test_invalid_sku(self):
        fixup_payload = self.raw_payload.replace("course-v1:org+course+run1",
                                                 "course-v1:org+nosuchcourse+run1")  # noqa: E501
        fixup_json_payload = json.loads(fixup_payload)
        order, created = record_order(fixup_json_payload)

        result = None
        with self.assertRaises(Http404):
            result = process.delay(fixup_json_payload)
            result.get(5)

        self.assertEqual(result.state, 'FAILURE')

        # Even with the exception raised, it's the task failure
        # handler's job to set the status to ERROR. Given the async
        # nature of the task, though, the object reference doesn't
        # learn of the update until we refresh from the database.
        order.refresh_from_db()
        self.assertEqual(order.status, Order.ERROR)
Ejemplo n.º 8
0
    def test_valid_order(self):
        order, created = record_order(self.json_payload)

        enrollment_response = {
            'action': 'enroll',
            'courses': {
                'course-v1:org+course+run1': {
                    'action':
                    'enroll',
                    'results': [{
                        'identifier': '*****@*****.**',
                        'after': {
                            'enrollment': False,
                            'allowed': True,
                            'user': False,
                            'auto_enroll': True
                        },
                        'before': {
                            'enrollment': False,
                            'allowed': False,
                            'user': False,
                            'auto_enroll': False
                        }
                    }],
                    'auto_enroll':
                    True
                }
            },
            'email_students': True,
            'auto_enroll': True
        }

        with requests_mock.Mocker() as m:
            m.register_uri('POST', self.token_uri, json=self.token_response)
            m.register_uri('POST', self.enroll_uri, json=enrollment_response)
            process_order(order, self.json_payload)

        self.assertEqual(order.status, Order.PROCESSED)