diff --git a/common/lib/xmodule/xmodule/error_module.py b/common/lib/xmodule/xmodule/error_module.py
index 8014234f69b1..7f1537017611 100644
--- a/common/lib/xmodule/xmodule/error_module.py
+++ b/common/lib/xmodule/xmodule/error_module.py
@@ -121,7 +121,7 @@ def from_json(cls, json_data, system, error_msg='Error not available'):
def from_descriptor(cls, descriptor, error_msg='Error not available'):
return cls._construct(
descriptor.system,
- descriptor._model_data,
+ str(descriptor),
error_msg,
location=descriptor.location,
)
diff --git a/common/lib/xmodule/xmodule/tests/test_error_module.py b/common/lib/xmodule/xmodule/tests/test_error_module.py
index d6b6f77ae631..78e5b46a96a8 100644
--- a/common/lib/xmodule/xmodule/tests/test_error_module.py
+++ b/common/lib/xmodule/xmodule/tests/test_error_module.py
@@ -4,6 +4,9 @@
import unittest
from xmodule.tests import test_system
import xmodule.error_module as error_module
+from xmodule.modulestore import Location
+from xmodule.x_module import XModuleDescriptor
+from mock import MagicMock
class TestErrorModule(unittest.TestCase):
@@ -14,22 +17,33 @@ def setUp(self):
self.system = test_system()
self.org = "org"
self.course = "course"
- self.fake_xml = ""
+ self.location = Location(['i4x', self.org, self.course, None, None])
+ self.valid_xml = ""
self.broken_xml = ""
self.error_msg = "Error"
- def test_error_module_create(self):
+ def test_error_module_xml_rendering(self):
descriptor = error_module.ErrorDescriptor.from_xml(
- self.fake_xml, self.system, self.org, self.course)
+ self.valid_xml, self.system, self.org, self.course, self.error_msg)
self.assertTrue(isinstance(descriptor, error_module.ErrorDescriptor))
-
- def test_error_module_rendering(self):
- descriptor = error_module.ErrorDescriptor.from_xml(
- self.fake_xml, self.system, self.org, self.course, self.error_msg)
module = descriptor.xmodule(self.system)
rendered_html = module.get_html()
self.assertIn(self.error_msg, rendered_html)
- self.assertIn(self.fake_xml, rendered_html)
+ self.assertIn(self.valid_xml, rendered_html)
+
+ def test_error_module_from_descriptor(self):
+ descriptor = MagicMock([XModuleDescriptor],
+ system=self.system,
+ location=self.location,
+ _model_data=self.valid_xml)
+
+ error_descriptor = error_module.ErrorDescriptor.from_descriptor(
+ descriptor, self.error_msg)
+ self.assertTrue(isinstance(error_descriptor, error_module.ErrorDescriptor))
+ module = error_descriptor.xmodule(self.system)
+ rendered_html = module.get_html()
+ self.assertIn(self.error_msg, rendered_html)
+ self.assertIn(str(descriptor), rendered_html)
class TestNonStaffErrorModule(TestErrorModule):
@@ -39,13 +53,27 @@ class TestNonStaffErrorModule(TestErrorModule):
def test_non_staff_error_module_create(self):
descriptor = error_module.NonStaffErrorDescriptor.from_xml(
- self.fake_xml, self.system, self.org, self.course)
+ self.valid_xml, self.system, self.org, self.course)
self.assertTrue(isinstance(descriptor, error_module.NonStaffErrorDescriptor))
- def test_non_staff_error_module_rendering(self):
+ def test_from_xml_render(self):
descriptor = error_module.NonStaffErrorDescriptor.from_xml(
- self.fake_xml, self.system, self.org, self.course)
+ self.valid_xml, self.system, self.org, self.course)
module = descriptor.xmodule(self.system)
rendered_html = module.get_html()
self.assertNotIn(self.error_msg, rendered_html)
- self.assertNotIn(self.fake_xml, rendered_html)
+ self.assertNotIn(self.valid_xml, rendered_html)
+
+ def test_error_module_from_descriptor(self):
+ descriptor = MagicMock([XModuleDescriptor],
+ system=self.system,
+ location=self.location,
+ _model_data=self.valid_xml)
+
+ error_descriptor = error_module.NonStaffErrorDescriptor.from_descriptor(
+ descriptor, self.error_msg)
+ self.assertTrue(isinstance(error_descriptor, error_module.ErrorDescriptor))
+ module = error_descriptor.xmodule(self.system)
+ rendered_html = module.get_html()
+ self.assertNotIn(self.error_msg, rendered_html)
+ self.assertNotIn(str(descriptor), rendered_html)
diff --git a/lms/djangoapps/courseware/module_render.py b/lms/djangoapps/courseware/module_render.py
index 284b746249b1..2ae7bcdc1f28 100644
--- a/lms/djangoapps/courseware/module_render.py
+++ b/lms/djangoapps/courseware/module_render.py
@@ -335,9 +335,8 @@ def can_execute_unsafe_code():
else:
err_descriptor_class = NonStaffErrorDescriptor
- err_descriptor = err_descriptor_class.from_xml(
- str(descriptor), descriptor.system,
- org=descriptor.location.org, course=descriptor.location.course,
+ err_descriptor = err_descriptor_class.from_descriptor(
+ descriptor,
error_msg=exc_info_to_str(sys.exc_info())
)