From eb1f83df58b22fc9ae81b4cfb0f7f15e3782373b Mon Sep 17 00:00:00 2001 From: Jonathan Piacenti Date: Fri, 18 Sep 2015 14:25:08 -0500 Subject: [PATCH] Make sure messages get jump_to_id URLs rewritten. --- problem_builder/mentoring.py | 7 ++++- problem_builder/tests/unit/test_mentoring.py | 32 +++++++++++++++++++- 2 files changed, 37 insertions(+), 2 deletions(-) diff --git a/problem_builder/mentoring.py b/problem_builder/mentoring.py index adf90442..4f82ebee 100644 --- a/problem_builder/mentoring.py +++ b/problem_builder/mentoring.py @@ -469,6 +469,8 @@ def review_tips(self): if result and result.get('status') != 'correct': # The student got this wrong. Check if there is a review tip to show. tip_html = child.get_review_tip() + if hasattr(self.runtime, 'replace_jump_to_id_urls'): + tip_html = self.runtime.replace_jump_to_id_urls(tip_html) if tip_html: review_tips.append(tip_html) return review_tips @@ -746,7 +748,10 @@ def get_message_content(self, message_type, or_default=False): if child_isinstance(self, child_id, MentoringMessageBlock): child = self.runtime.get_block(child_id) if child.type == message_type: - return child.content + content = child.content + if hasattr(self.runtime, 'replace_jump_to_id_urls'): + content = self.runtime.replace_jump_to_id_urls(content) + return content if or_default: # Return the default value since no custom message is set. # Note the WYSIWYG editor usually wraps the .content HTML in a

tag so we do the same here. diff --git a/problem_builder/tests/unit/test_mentoring.py b/problem_builder/tests/unit/test_mentoring.py index 659094c9..5f00619c 100644 --- a/problem_builder/tests/unit/test_mentoring.py +++ b/problem_builder/tests/unit/test_mentoring.py @@ -2,7 +2,7 @@ import ddt from mock import MagicMock, Mock, patch from xblock.field_data import DictFieldData -from problem_builder import MentoringBlock +from problem_builder import MentoringBlock, MentoringMessageBlock, MCQBlock from problem_builder.mentoring import _default_theme_config @@ -139,3 +139,33 @@ def test_author_preview_view_calls_include_theme_files(self): with patch.object(self.block, 'include_theme_files') as patched_include_theme_files: fragment = self.block.author_preview_view({}) patched_include_theme_files.assert_called_with(fragment) + + +class TestMentoringBlockJumpToIds(unittest.TestCase): + def setUp(self): + self.service_mock = Mock() + self.runtime_mock = Mock() + self.runtime_mock.service = Mock(return_value=self.service_mock) + self.block = MentoringBlock(self.runtime_mock, DictFieldData({'mode': 'assessment'}), Mock()) + self.block.children = ['dummy_id'] + self.message_block = MentoringMessageBlock( + self.runtime_mock, DictFieldData({'type': 'bogus', 'content': 'test'}), Mock() + ) + self.block.runtime.replace_jump_to_id_urls = lambda x: x.replace('test', 'replaced-url') + + def test_get_message_content(self): + with patch('problem_builder.mentoring.child_isinstance') as mock_child_isinstance: + mock_child_isinstance.return_value = True + self.runtime_mock.get_block = Mock() + self.runtime_mock.get_block.return_value = self.message_block + self.assertEqual(self.block.get_message_content('bogus'), 'replaced-url') + + def test_get_tip_content(self): + self.mcq_block = MCQBlock(self.runtime_mock, DictFieldData({'name': 'test_mcq'}), Mock()) + self.mcq_block.get_review_tip = Mock() + self.mcq_block.get_review_tip.return_value = self.message_block.content + self.block.steps = [] + self.block.get_steps = Mock() + self.block.get_steps.return_value = [self.mcq_block] + self.block.student_results = {'test_mcq': {'status': 'incorrect'}} + self.assertEqual(self.block.review_tips, ['replaced-url'])