diff --git a/common/lib/capa/capa/tests/__init__.py b/common/lib/capa/capa/tests/__init__.py
index 1997e4d055..d989405951 100644
--- a/common/lib/capa/capa/tests/__init__.py
+++ b/common/lib/capa/capa/tests/__init__.py
@@ -22,21 +22,27 @@ def calledback_url(dispatch = 'score_update'):
xqueue_interface = MagicMock()
xqueue_interface.send_to_queue.return_value = (0, 'Success!')
-test_system = Mock(
- ajax_url='courses/course_id/modx/a_location',
- track_function=Mock(),
- get_module=Mock(),
- render_template=tst_render_template,
- replace_urls=Mock(),
- user=Mock(),
- filestore=fs.osfs.OSFS(os.path.join(TEST_DIR, "test_files")),
- debug=True,
- xqueue={'interface': xqueue_interface, 'construct_callback': calledback_url, 'default_queuename': 'testqueue', 'waittime': 10},
- node_path=os.environ.get("NODE_PATH", "/usr/local/lib/node_modules"),
- anonymous_student_id='student',
- cache=None,
-)
+def test_system():
+ """
+ Construct a mock ModuleSystem instance.
-def new_loncapa_problem(xml):
+ """
+ the_system = Mock(
+ ajax_url='courses/course_id/modx/a_location',
+ track_function=Mock(),
+ get_module=Mock(),
+ render_template=tst_render_template,
+ replace_urls=Mock(),
+ user=Mock(),
+ filestore=fs.osfs.OSFS(os.path.join(TEST_DIR, "test_files")),
+ debug=True,
+ xqueue={'interface': xqueue_interface, 'construct_callback': calledback_url, 'default_queuename': 'testqueue', 'waittime': 10},
+ node_path=os.environ.get("NODE_PATH", "/usr/local/lib/node_modules"),
+ anonymous_student_id='student',
+ cache=None,
+ )
+ return the_system
+
+def new_loncapa_problem(xml, system=None):
"""Construct a `LoncapaProblem` suitable for unit tests."""
- return LoncapaProblem(xml, id='1', seed=723, system=test_system)
+ return LoncapaProblem(xml, id='1', seed=723, system=system or test_system())
diff --git a/common/lib/capa/capa/tests/test_customrender.py b/common/lib/capa/capa/tests/test_customrender.py
index eece275b05..8012804a40 100644
--- a/common/lib/capa/capa/tests/test_customrender.py
+++ b/common/lib/capa/capa/tests/test_customrender.py
@@ -26,7 +26,7 @@ class HelperTest(unittest.TestCase):
Make sure that our helper function works!
'''
def check(self, d):
- xml = etree.XML(test_system.render_template('blah', d))
+ xml = etree.XML(test_system().render_template('blah', d))
self.assertEqual(d, extract_context(xml))
def test_extract_context(self):
@@ -46,11 +46,11 @@ class SolutionRenderTest(unittest.TestCase):
xml_str = """{s}""".format(s=solution)
element = etree.fromstring(xml_str)
- renderer = lookup_tag('solution')(test_system, element)
+ renderer = lookup_tag('solution')(test_system(), element)
self.assertEqual(renderer.id, 'solution_12')
- # our test_system "renders" templates to a div with the repr of the context
+ # Our test_system "renders" templates to a div with the repr of the context.
xml = renderer.get_html()
context = extract_context(xml)
self.assertEqual(context, {'id': 'solution_12'})
@@ -65,7 +65,7 @@ class MathRenderTest(unittest.TestCase):
xml_str = """""".format(tex=latex_in)
element = etree.fromstring(xml_str)
- renderer = lookup_tag('math')(test_system, element)
+ renderer = lookup_tag('math')(test_system(), element)
self.assertEqual(renderer.mathstr, mathjax_out)
diff --git a/common/lib/capa/capa/tests/test_html_render.py b/common/lib/capa/capa/tests/test_html_render.py
index e0edf344f2..62605b48f5 100644
--- a/common/lib/capa/capa/tests/test_html_render.py
+++ b/common/lib/capa/capa/tests/test_html_render.py
@@ -11,6 +11,10 @@ from . import test_system, new_loncapa_problem
class CapaHtmlRenderTest(unittest.TestCase):
+ def setUp(self):
+ super(CapaHtmlRenderTest, self).setUp()
+ self.system = test_system()
+
def test_blank_problem(self):
"""
It's important that blank problems don't break, since that's
@@ -38,7 +42,7 @@ class CapaHtmlRenderTest(unittest.TestCase):
""")
# Create the problem
- problem = new_loncapa_problem(xml_str)
+ problem = new_loncapa_problem(xml_str, system=self.system)
# Render the HTML
rendered_html = etree.XML(problem.get_html())
@@ -48,9 +52,6 @@ class CapaHtmlRenderTest(unittest.TestCase):
self.assertEqual(test_element.tag, "test")
self.assertEqual(test_element.text, "Test include")
-
-
-
def test_process_outtext(self):
# Generate some XML with and
xml_str = textwrap.dedent("""
@@ -116,11 +117,12 @@ class CapaHtmlRenderTest(unittest.TestCase):
xml_str = StringResponseXMLFactory().build_xml(**kwargs)
# Mock out the template renderer
- test_system.render_template = mock.Mock()
- test_system.render_template.return_value = "
Input Template Render
"
+ the_system = test_system()
+ the_system.render_template = mock.Mock()
+ the_system.render_template.return_value = "Input Template Render
"
# Create the problem and render the HTML
- problem = new_loncapa_problem(xml_str)
+ problem = new_loncapa_problem(xml_str, system=the_system)
rendered_html = etree.XML(problem.get_html())
# Expect problem has been turned into a
@@ -165,7 +167,7 @@ class CapaHtmlRenderTest(unittest.TestCase):
mock.call('textline.html', expected_textline_context),
mock.call('solutionspan.html', expected_solution_context)]
- self.assertEqual(test_system.render_template.call_args_list,
+ self.assertEqual(the_system.render_template.call_args_list,
expected_calls)
@@ -226,7 +228,7 @@ class CapaHtmlRenderTest(unittest.TestCase):
self.assertEqual(span_element.get('attr'), "TEST")
def _create_test_file(self, path, content_str):
- test_fp = test_system.filestore.open(path, "w")
+ test_fp = self.system.filestore.open(path, "w")
test_fp.write(content_str)
test_fp.close()
diff --git a/common/lib/capa/capa/tests/test_inputtypes.py b/common/lib/capa/capa/tests/test_inputtypes.py
index 54edb5bf9f..313eb28249 100644
--- a/common/lib/capa/capa/tests/test_inputtypes.py
+++ b/common/lib/capa/capa/tests/test_inputtypes.py
@@ -45,7 +45,7 @@ class OptionInputTest(unittest.TestCase):
state = {'value': 'Down',
'id': 'sky_input',
'status': 'answered'}
- option_input = lookup_tag('optioninput')(test_system, element, state)
+ option_input = lookup_tag('optioninput')(test_system(), element, state)
context = option_input._get_render_context()
@@ -92,7 +92,7 @@ class ChoiceGroupTest(unittest.TestCase):
'id': 'sky_input',
'status': 'answered'}
- the_input = lookup_tag(tag)(test_system, element, state)
+ the_input = lookup_tag(tag)(test_system(), element, state)
context = the_input._get_render_context()
@@ -142,7 +142,7 @@ class JavascriptInputTest(unittest.TestCase):
element = etree.fromstring(xml_str)
state = {'value': '3', }
- the_input = lookup_tag('javascriptinput')(test_system, element, state)
+ the_input = lookup_tag('javascriptinput')(test_system(), element, state)
context = the_input._get_render_context()
@@ -170,7 +170,7 @@ class TextLineTest(unittest.TestCase):
element = etree.fromstring(xml_str)
state = {'value': 'BumbleBee', }
- the_input = lookup_tag('textline')(test_system, element, state)
+ the_input = lookup_tag('textline')(test_system(), element, state)
context = the_input._get_render_context()
@@ -198,7 +198,7 @@ class TextLineTest(unittest.TestCase):
element = etree.fromstring(xml_str)
state = {'value': 'BumbleBee', }
- the_input = lookup_tag('textline')(test_system, element, state)
+ the_input = lookup_tag('textline')(test_system(), element, state)
context = the_input._get_render_context()
@@ -236,7 +236,7 @@ class TextLineTest(unittest.TestCase):
element = etree.fromstring(xml_str)
state = {'value': 'BumbleBee', }
- the_input = lookup_tag('textline')(test_system, element, state)
+ the_input = lookup_tag('textline')(test_system(), element, state)
context = the_input._get_render_context()
@@ -274,7 +274,7 @@ class FileSubmissionTest(unittest.TestCase):
'status': 'incomplete',
'feedback': {'message': '3'}, }
input_class = lookup_tag('filesubmission')
- the_input = input_class(test_system, element, state)
+ the_input = input_class(test_system(), element, state)
context = the_input._get_render_context()
@@ -319,7 +319,7 @@ class CodeInputTest(unittest.TestCase):
'feedback': {'message': '3'}, }
input_class = lookup_tag('codeinput')
- the_input = input_class(test_system, element, state)
+ the_input = input_class(test_system(), element, state)
context = the_input._get_render_context()
@@ -368,7 +368,7 @@ class MatlabTest(unittest.TestCase):
'feedback': {'message': '3'}, }
self.input_class = lookup_tag('matlabinput')
- self.the_input = self.input_class(test_system, elt, state)
+ self.the_input = self.input_class(test_system(), elt, state)
def test_rendering(self):
context = self.the_input._get_render_context()
@@ -396,7 +396,7 @@ class MatlabTest(unittest.TestCase):
'feedback': {'message': '3'}, }
elt = etree.fromstring(self.xml)
- the_input = self.input_class(test_system, elt, state)
+ the_input = self.input_class(test_system(), elt, state)
context = the_input._get_render_context()
expected = {'id': 'prob_1_2',
@@ -423,7 +423,7 @@ class MatlabTest(unittest.TestCase):
}
elt = etree.fromstring(self.xml)
- the_input = self.input_class(test_system, elt, state)
+ the_input = self.input_class(test_system(), elt, state)
context = the_input._get_render_context()
expected = {'id': 'prob_1_2',
'value': 'print "good evening"',
@@ -448,7 +448,7 @@ class MatlabTest(unittest.TestCase):
}
elt = etree.fromstring(self.xml)
- the_input = self.input_class(test_system, elt, state)
+ the_input = self.input_class(test_system(), elt, state)
context = the_input._get_render_context()
expected = {'id': 'prob_1_2',
'value': 'print "good evening"',
@@ -470,7 +470,7 @@ class MatlabTest(unittest.TestCase):
get = {'submission': 'x = 1234;'}
response = self.the_input.handle_ajax("plot", get)
- test_system.xqueue['interface'].send_to_queue.assert_called_with(header=ANY, body=ANY)
+ test_system().xqueue['interface'].send_to_queue.assert_called_with(header=ANY, body=ANY)
self.assertTrue(response['success'])
self.assertTrue(self.the_input.input_state['queuekey'] is not None)
@@ -479,13 +479,12 @@ class MatlabTest(unittest.TestCase):
def test_plot_data_failure(self):
get = {'submission': 'x = 1234;'}
error_message = 'Error message!'
- test_system.xqueue['interface'].send_to_queue.return_value = (1, error_message)
+ test_system().xqueue['interface'].send_to_queue.return_value = (1, error_message)
response = self.the_input.handle_ajax("plot", get)
self.assertFalse(response['success'])
self.assertEqual(response['message'], error_message)
self.assertTrue('queuekey' not in self.the_input.input_state)
self.assertTrue('queuestate' not in self.the_input.input_state)
- test_system.xqueue['interface'].send_to_queue.return_value = (0, 'Success!')
def test_ungraded_response_success(self):
queuekey = 'abcd'
@@ -496,7 +495,7 @@ class MatlabTest(unittest.TestCase):
'feedback': {'message': '3'}, }
elt = etree.fromstring(self.xml)
- the_input = self.input_class(test_system, elt, state)
+ the_input = self.input_class(test_system(), elt, state)
inner_msg = 'hello!'
queue_msg = json.dumps({'msg': inner_msg})
@@ -514,7 +513,7 @@ class MatlabTest(unittest.TestCase):
'feedback': {'message': '3'}, }
elt = etree.fromstring(self.xml)
- the_input = self.input_class(test_system, elt, state)
+ the_input = self.input_class(test_system(), elt, state)
inner_msg = 'hello!'
queue_msg = json.dumps({'msg': inner_msg})
@@ -553,7 +552,7 @@ class SchematicTest(unittest.TestCase):
state = {'value': value,
'status': 'unsubmitted'}
- the_input = lookup_tag('schematic')(test_system, element, state)
+ the_input = lookup_tag('schematic')(test_system(), element, state)
context = the_input._get_render_context()
@@ -592,7 +591,7 @@ class ImageInputTest(unittest.TestCase):
state = {'value': value,
'status': 'unsubmitted'}
- the_input = lookup_tag('imageinput')(test_system, element, state)
+ the_input = lookup_tag('imageinput')(test_system(), element, state)
context = the_input._get_render_context()
@@ -643,7 +642,7 @@ class CrystallographyTest(unittest.TestCase):
state = {'value': value,
'status': 'unsubmitted'}
- the_input = lookup_tag('crystallography')(test_system, element, state)
+ the_input = lookup_tag('crystallography')(test_system(), element, state)
context = the_input._get_render_context()
@@ -681,7 +680,7 @@ class VseprTest(unittest.TestCase):
state = {'value': value,
'status': 'unsubmitted'}
- the_input = lookup_tag('vsepr_input')(test_system, element, state)
+ the_input = lookup_tag('vsepr_input')(test_system(), element, state)
context = the_input._get_render_context()
@@ -708,7 +707,7 @@ class ChemicalEquationTest(unittest.TestCase):
element = etree.fromstring(xml_str)
state = {'value': 'H2OYeah', }
- self.the_input = lookup_tag('chemicalequationinput')(test_system, element, state)
+ self.the_input = lookup_tag('chemicalequationinput')(test_system(), element, state)
def test_rendering(self):
''' Verify that the render context matches the expected render context'''
@@ -783,7 +782,7 @@ class DragAndDropTest(unittest.TestCase):
]
}
- the_input = lookup_tag('drag_and_drop_input')(test_system, element, state)
+ the_input = lookup_tag('drag_and_drop_input')(test_system(), element, state)
context = the_input._get_render_context()
expected = {'id': 'prob_1_2',
@@ -832,7 +831,7 @@ class AnnotationInputTest(unittest.TestCase):
tag = 'annotationinput'
- the_input = lookup_tag(tag)(test_system, element, state)
+ the_input = lookup_tag(tag)(test_system(), element, state)
context = the_input._get_render_context()
diff --git a/common/lib/xmodule/xmodule/tests/__init__.py b/common/lib/xmodule/xmodule/tests/__init__.py
index 79e1fec0f0..bcf333d7d9 100644
--- a/common/lib/xmodule/xmodule/tests/__init__.py
+++ b/common/lib/xmodule/xmodule/tests/__init__.py
@@ -33,15 +33,14 @@ def test_system():
"""
Construct a test ModuleSystem instance.
- By default, the render_template() method simply returns
- the context it is passed as a string.
- You can override this behavior by monkey patching:
+ By default, the render_template() method simply returns the context it is
+ passed as a string. You can override this behavior by monkey patching::
- system = test_system()
- system.render_template = my_render_func
+ system = test_system()
+ system.render_template = my_render_func
+
+ where `my_render_func` is a function of the form my_render_func(template, context).
- where my_render_func is a function of the form
- my_render_func(template, context)
"""
return ModuleSystem(
ajax_url='courses/course_id/modx/a_location',