Commit a9f7743d by Tim Krones

Merge pull request #50 from open-craft/instructor-tool-unit-tests

Add unit tests for instructor tool
parents 36cd10b9 66e67621
...@@ -134,6 +134,26 @@ class InstructorToolBlock(XBlock): ...@@ -134,6 +134,26 @@ class InstructorToolBlock(XBlock):
_('Rating Question'): 'RatingBlock', _('Rating Question'): 'RatingBlock',
_('Long Answer'): 'AnswerBlock', _('Long Answer'): 'AnswerBlock',
} }
flat_block_tree = self._build_course_tree()
html = loader.render_template(
'templates/html/instructor_tool.html',
{'block_choices': block_choices, 'block_tree': flat_block_tree}
)
fragment = Fragment(html)
fragment.add_css_url(self.runtime.local_resource_url(self, 'public/css/instructor_tool.css'))
fragment.add_javascript_url(self.runtime.local_resource_url(self, 'public/js/instructor_tool.js'))
fragment.add_javascript_url(self.runtime.local_resource_url(self, 'public/js/vendor/underscore-min.js'))
fragment.add_javascript_url(self.runtime.local_resource_url(self, 'public/js/vendor/backbone-min.js'))
fragment.add_javascript_url(self.runtime.local_resource_url(self, 'public/js/vendor/backbone.paginator.min.js'))
fragment.initialize_js('InstructorToolBlock')
return fragment
def _build_course_tree(self):
"""
Return flat tree of blocks belonging to this block's parent course.
"""
eligible_block_types = ('pb-mcq', 'pb-rating', 'pb-answer') eligible_block_types = ('pb-mcq', 'pb-rating', 'pb-answer')
flat_block_tree = [] flat_block_tree = []
...@@ -172,7 +192,7 @@ class InstructorToolBlock(XBlock): ...@@ -172,7 +192,7 @@ class InstructorToolBlock(XBlock):
def build_tree(block, ancestors): def build_tree(block, ancestors):
""" """
Build up a tree of information about the XBlocks descending from root_block Build up a tree of information about the XBlocks descending from `block`.
""" """
block_id = get_block_id(block) block_id = get_block_id(block)
block_name = get_block_name(block) block_name = get_block_name(block)
...@@ -205,6 +225,7 @@ class InstructorToolBlock(XBlock): ...@@ -205,6 +225,7 @@ class InstructorToolBlock(XBlock):
"depth": 0, "depth": 0,
"id": root_block_id, "id": root_block_id,
"name": "All", "name": "All",
"eligible": False,
} }
flat_block_tree.append(root_entry) flat_block_tree.append(root_entry)
...@@ -212,18 +233,7 @@ class InstructorToolBlock(XBlock): ...@@ -212,18 +233,7 @@ class InstructorToolBlock(XBlock):
child_block = root_block.runtime.get_block(child_id) child_block = root_block.runtime.get_block(child_id)
build_tree(child_block, [root_entry]) build_tree(child_block, [root_entry])
html = loader.render_template( return flat_block_tree
'templates/html/instructor_tool.html',
{'block_choices': block_choices, 'block_tree': flat_block_tree}
)
fragment = Fragment(html)
fragment.add_css_url(self.runtime.local_resource_url(self, 'public/css/instructor_tool.css'))
fragment.add_javascript_url(self.runtime.local_resource_url(self, 'public/js/instructor_tool.js'))
fragment.add_javascript_url(self.runtime.local_resource_url(self, 'public/js/vendor/underscore-min.js'))
fragment.add_javascript_url(self.runtime.local_resource_url(self, 'public/js/vendor/backbone-min.js'))
fragment.add_javascript_url(self.runtime.local_resource_url(self, 'public/js/vendor/backbone.paginator.min.js'))
fragment.initialize_js('InstructorToolBlock')
return fragment
@property @property
def download_url_for_last_report(self): def download_url_for_last_report(self):
......
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
import math
import re import re
import time import time
...@@ -49,6 +50,9 @@ class InstructorToolTest(SeleniumXBlockTest): ...@@ -49,6 +50,9 @@ class InstructorToolTest(SeleniumXBlockTest):
self.set_scenario_xml(""" self.set_scenario_xml("""
<vertical_demo> <vertical_demo>
<pb-instructor-tool url_name="data_export"/> <pb-instructor-tool url_name="data_export"/>
<problem-builder mode="standard">
<pb-answer name="answer" question="Is this a long long long long long long long long long long question?" />
</problem-builder>
</vertical_demo> </vertical_demo>
""") """)
...@@ -62,6 +66,40 @@ class InstructorToolTest(SeleniumXBlockTest): ...@@ -62,6 +66,40 @@ class InstructorToolTest(SeleniumXBlockTest):
'instructor_task.models': MockInstructorTaskModelsModule(), 'instructor_task.models': MockInstructorTaskModelsModule(),
}) })
@patch.object(InstructorToolBlock, 'user_is_staff', Mock(return_value=True)) @patch.object(InstructorToolBlock, 'user_is_staff', Mock(return_value=True))
def test_export_field_container_width(self):
instructor_tool = self.go_to_view()
export_field_container = instructor_tool.find_element_by_class_name('data-export-field-container')
parent_div = export_field_container.find_element_by_xpath('..')
export_field_container_width = export_field_container.size['width']
parent_div_width = parent_div.size['width']
self.assertTrue(export_field_container_width <= math.ceil(0.43 * parent_div_width))
@patch.dict('sys.modules', {
'problem_builder.tasks': MockTasksModule(successful=True),
'instructor_task': True,
'instructor_task.models': MockInstructorTaskModelsModule(),
})
@patch.object(InstructorToolBlock, 'user_is_staff', Mock(return_value=True))
def test_root_block_select_width(self):
instructor_tool = self.go_to_view()
root_block_select = instructor_tool.find_element_by_name('root_block_id')
parent_div = root_block_select.find_element_by_xpath('../..')
root_block_select_width = root_block_select.size['width']
parent_div_width = parent_div.size['width']
self.assertTrue(root_block_select_width <= math.ceil(0.55 * parent_div_width))
@patch.dict('sys.modules', {
'problem_builder.tasks': MockTasksModule(successful=True),
'instructor_task': True,
'instructor_task.models': MockInstructorTaskModelsModule(),
})
@patch.object(InstructorToolBlock, 'user_is_staff', Mock(return_value=True))
def test_data_export_delete(self): def test_data_export_delete(self):
instructor_tool = self.go_to_view() instructor_tool = self.go_to_view()
start_button = instructor_tool.find_element_by_class_name('data-export-start') start_button = instructor_tool.find_element_by_class_name('data-export-start')
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment