Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion problem_builder/mentoring.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 <p> tag so we do the same here.
Expand Down
32 changes: 31 additions & 1 deletion problem_builder/tests/unit/test_mentoring.py
Original file line number Diff line number Diff line change
Expand Up @@ -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


Expand Down Expand Up @@ -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'])