Example #1
0
 def test_invalid_email(self):
     order = Order()
     order.id = 43
     order.save()
     line_items = [{
         "properties": [{
             "name": "email",
             "value": "akjzcdfbgakugbfvkljzgh"
         }],
         "sku":
         "course-v1:org+course+run1"
     }]
     for line_item in line_items:
         with self.assertRaises(ValidationError):
             process_line_item(order, line_item)
Example #2
0
 def test_invalid_sku(self):
     order = Order()
     order.id = 42
     order.save()
     line_items = [{
         "properties": [{
             "name": "email",
             "value": "*****@*****.**"
         }],
         "sku":
         "course-v1:org+nosuchcourse+run1"
     }]
     for line_item in line_items:
         with self.assertRaises(Http404):
             process_line_item(order, line_item)
Example #3
0
    def test_valid_single_line_item(self):
        order = Order()
        order.id = 40
        order.save()
        line_item = {
            "properties": [{
                "name": "email",
                "value": "*****@*****.**"
            }],
            "sku": "course-v1:org+course+run1"
        }

        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)

            order_item = process_line_item(order, line_item)

            # Read back the order item (can't just use
            # refresh_from_db(), because of the FSM-protected status
            # field)
            order_item = OrderItem.objects.get(pk=order_item.id)

            self.assertEqual(order_item.order, order)
            self.assertEqual(order_item.sku, 'course-v1:org+course+run1')
            self.assertEqual(order_item.email, '*****@*****.**')
            self.assertEqual(order_item.status, OrderItem.PROCESSED)
Example #4
0
    def test_invalid_sku(self):
        order = Order()
        order.id = 42
        order.save()
        line_items = [{
            "properties": [{
                "name": "email",
                "value": "*****@*****.**"
            }],
            "sku":
            "course-v1:org+nosuchcourse+run1"
        }]
        for line_item in line_items:
            with requests_mock.Mocker() as m:
                # In the bulk enrollment API, an invalid course ID
                # results in an HTTP 400
                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):
                    process_line_item(order, line_item)
Example #5
0
    def test_valid_single_line_item(self):
        order = Order()
        order.id = 40
        order.save()
        line_items = [{
            "properties": [{
                "name": "email",
                "value": "*****@*****.**"
            }],
            "sku":
            "course-v1:org+course+run1"
        }]
        mock_get_course_by_id = Mock(return_value=self.course)
        mock_get_email_params = Mock(return_value=self.email_params)
        mock_enroll_email = Mock()
        for line_item in line_items:
            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):
                order_item = process_line_item(order, line_item)

                # Did we mock-fetch the course with the correct locator?
                mock_get_course_by_id.assert_called_once_with(self.ck)

                # Did we mock-fetch the email params for the course
                # identified by that locator?
                mock_get_email_params.assert_called_once_with(self.course,
                                                              True,
                                                              secure=True)

                # Did we mock-invoke enroll_email with the correct parameters?
                mock_enroll_email.assert_called_once_with(
                    self.ck,
                    '*****@*****.**',  # noqa: E501
                    auto_enroll=True,
                    email_students=True,
                    email_params=self.email_params,  # noqa: E501
                    language=None)

                # Read back the order item
                order_item.refresh_from_db()
                self.assertEqual(order_item.order, order)
                self.assertEqual(order_item.sku, 'course-v1:org+course+run1')
                self.assertEqual(order_item.email, '*****@*****.**')
                self.assertEqual(order_item.status, OrderItem.PROCESSED)