diff --git a/common/lib/capa/capa/inputtypes.py b/common/lib/capa/capa/inputtypes.py index b4e9fe1654..18bc92f0a3 100644 --- a/common/lib/capa/capa/inputtypes.py +++ b/common/lib/capa/capa/inputtypes.py @@ -655,9 +655,9 @@ class MatlabInput(CodeInput): # Check if problem has been queued self.queuename = 'matlab' self.queue_msg = '' - if 'queue_msg' in self.input_state and self.status in ['queued','incomplete', 'unsubmitted']: + if 'queue_msg' in self.input_state and self.status in ['queued', 'incomplete', 'unsubmitted']: self.queue_msg = self.input_state['queue_msg'] - if 'queued' in self.input_state and self.input_state['queuestate'] is not None: + if 'queuestate' in self.input_state and self.input_state['queuestate'] == 'queued': self.status = 'queued' self.queue_len = 1 self.msg = self.plot_submitted_msg @@ -702,7 +702,7 @@ class MatlabInput(CodeInput): def _extra_context(self): ''' Set up additional context variables''' extra_context = { - 'queue_len': self.queue_len, + 'queue_len': str(self.queue_len), 'queue_msg': self.queue_msg } return extra_context diff --git a/common/lib/capa/capa/tests/test_inputtypes.py b/common/lib/capa/capa/tests/test_inputtypes.py index 250cedd549..e7f0b784bc 100644 --- a/common/lib/capa/capa/tests/test_inputtypes.py +++ b/common/lib/capa/capa/tests/test_inputtypes.py @@ -361,7 +361,6 @@ class MatlabTest(unittest.TestCase): 'feedback': {'message': '3'}, } elt = etree.fromstring(self.xml) - input_class = lookup_tag('matlabinput') the_input = self.input_class(test_system, elt, state) context = the_input._get_render_context() @@ -381,6 +380,31 @@ class MatlabTest(unittest.TestCase): self.assertEqual(context, expected) + def test_rendering_while_queued(self): + state = {'value': 'print "good evening"', + 'status': 'incomplete', + 'input_state': {'queuestate': 'queued'}, + } + elt = etree.fromstring(self.xml) + + the_input = self.input_class(test_system, elt, state) + context = the_input._get_render_context() + expected = {'id': 'prob_1_2', + 'value': 'print "good evening"', + 'status': 'queued', + 'msg': self.input_class.plot_submitted_msg, + 'mode': self.mode, + 'rows': self.rows, + 'cols': self.cols, + 'queue_msg': '', + 'linenumbers': 'true', + 'hidden': '', + 'tabsize': int(self.tabsize), + 'queue_len': '1', + } + + self.assertEqual(context, expected) + def test_plot_data(self): get = {'submission': 'x = 1234;'} response = self.the_input.handle_ajax("plot", get) @@ -391,6 +415,43 @@ class MatlabTest(unittest.TestCase): self.assertTrue(self.the_input.input_state['queuekey'] is not None) self.assertEqual(self.the_input.input_state['queuestate'], 'queued') + def test_ungraded_response_success(self): + queuekey = 'abcd' + input_state = {'queuekey': queuekey, 'queuestate': 'queued'} + state = {'value': 'print "good evening"', + 'status': 'incomplete', + 'input_state': input_state, + 'feedback': {'message': '3'}, } + elt = etree.fromstring(self.xml) + + the_input = self.input_class(test_system, elt, state) + inner_msg = 'hello!' + queue_msg = json.dumps({'msg': inner_msg}) + + the_input.ungraded_response(queue_msg, queuekey) + self.assertTrue(input_state['queuekey'] is None) + self.assertTrue(input_state['queuestate'] is None) + self.assertEqual(input_state['queue_msg'], inner_msg) + + def test_ungraded_response_key_mismatch(self): + queuekey = 'abcd' + input_state = {'queuekey': queuekey, 'queuestate': 'queued'} + state = {'value': 'print "good evening"', + 'status': 'incomplete', + 'input_state': input_state, + 'feedback': {'message': '3'}, } + elt = etree.fromstring(self.xml) + + the_input = self.input_class(test_system, elt, state) + inner_msg = 'hello!' + queue_msg = json.dumps({'msg': inner_msg}) + + the_input.ungraded_response(queue_msg, 'abc') + self.assertEqual(input_state['queuekey'], queuekey) + self.assertEqual(input_state['queuestate'], 'queued') + self.assertFalse('queue_msg' in input_state) + + diff --git a/common/lib/xmodule/xmodule/capa_module.py b/common/lib/xmodule/xmodule/capa_module.py index ca7e052e7e..2097e4d4ee 100644 --- a/common/lib/xmodule/xmodule/capa_module.py +++ b/common/lib/xmodule/xmodule/capa_module.py @@ -108,11 +108,10 @@ class CapaModule(CapaFields, XModule): ''' icon_class = 'problem' - js = {'coffee': [resource_string(__name__, 'js/src/capa/display.coffee'), resource_string(__name__, 'js/src/collapsible.coffee'), resource_string(__name__, 'js/src/javascript_loader.coffee'), - ], + ], 'js': [resource_string(__name__, 'js/src/capa/imageinput.js'), resource_string(__name__, 'js/src/capa/schematic.js') ]} @@ -367,11 +366,11 @@ class CapaModule(CapaFields, XModule): self.set_state_from_lcp() # Prepend a scary warning to the student - warning = '
'\ - '

Warning: The problem has been reset to its initial state!

'\ - 'The problem\'s state was corrupted by an invalid submission. ' \ - 'The submission consisted of:'\ - '