def test_enrollment_fails(self, mock_refresh, mock_edx_enr): # pylint: disable=unused-argument
"""
Test error when backend raises an exception
"""
error = HTTPError()
error.response = MagicMock()
error.response.status_code = status.HTTP_500_INTERNAL_SERVER_ERROR
mock_edx_enr.side_effect = error
resp = self.client.post(self.url, {'course_id': self.course_id}, format='json')
assert resp.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR
# the response has a structure like {"error": "<message>"}
assert isinstance(resp.data, dict)
assert 'error' in resp.data
assert mock_edx_enr.call_count == 1
# assert just the second argument, since the first is `self`
assert mock_edx_enr.call_args[0][1] == self.course_id
# if instead edX returns a 400 error, an exception is raised by
# the view and the user gets a different error message
error.response.status_code = status.HTTP_400_BAD_REQUEST
mock_edx_enr.side_effect = error
resp = self.client.post(self.url, {'course_id': self.course_id}, format='json')
assert resp.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR
assert isinstance(resp.data, list)
assert len(resp.data) == 1
assert PossiblyImproperlyConfigured.__name__ in resp.data[0]
# if the error from the call to edX is is not HTTPError, the user gets a normal json error
mock_edx_enr.side_effect = ValueError()
resp = self.client.post(self.url, {'course_id': self.course_id}, format='json')
assert resp.status_code == status.HTTP_500_INTERNAL_SERVER_ERROR
# the response has a structure like {"error": "<message>"}
assert isinstance(resp.data, dict)
assert 'error' in resp.data
评论列表
文章目录