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)
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)
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)
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)
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)