def test_generate_course_structure(self): blocks = {} def add_block(block): children = block.get_children() if block.has_children else [] blocks[unicode(block.location)] = { "usage_key": unicode(block.location), "block_type": block.category, "display_name": block.display_name, "graded": block.graded, "format": block.format, "children": [unicode(child.location) for child in children] } for child in children: add_block(child) add_block(self.course) expected = { 'root': unicode(self.course.location), 'blocks': blocks } self.maxDiff = None actual = _generate_course_structure(self.course.id) self.assertDictEqual(actual, expected)
def test_generate_course_structure(self): blocks = {} def add_block(block): """ Inserts new child XBlocks into the existing course tree """ children = block.get_children() if block.has_children else [] blocks[unicode(block.location)] = { "usage_key": unicode(block.location), "block_type": block.category, "display_name": block.display_name, "graded": block.graded, "format": block.format, "children": [unicode(child.location) for child in children] } for child in children: add_block(child) add_block(self.course) expected = { 'root': unicode(self.course.location), 'blocks': blocks } self.maxDiff = None actual = _generate_course_structure(self.course.id) self.assertDictEqual(actual['structure'], expected)
def test_update_course_structure(self): """ Test the actual task that orchestrates data generation and updating the database. """ # Method requires string input course_id = self.course.id self.assertRaises(ValueError, update_course_structure, course_id) # Ensure a CourseStructure object is created structure = _generate_course_structure(course_id) update_course_structure(unicode(course_id)) cs = CourseStructure.objects.get(course_id=course_id) self.assertEqual(cs.course_id, course_id) self.assertEqual(cs.structure, structure)
def test_update_course_structure(self): """ Test the actual task that orchestrates data generation and updating the database. """ # Method requires string input course_id = self.course.id self.assertRaises(ValueError, update_course_structure, course_id) # Ensure a CourseStructure object is created structure = _generate_course_structure(course_id) update_course_structure(unicode(course_id)) cs = CourseStructure.objects.get(course_id=course_id) self.assertEqual(cs.course_id, course_id) self.assertEqual(cs.structure, structure)
def test_generate_discussion_id_map(self): id_map = {} def add_block(block): """Adds the given block and all of its children to the expected discussion id map""" children = block.get_children() if block.has_children else [] if block.category == 'discussion': id_map[block.discussion_id] = unicode(block.location) for child in children: add_block(child) add_block(self.course) actual = _generate_course_structure(self.course.id) self.assertEqual(actual['discussion_id_map'], id_map)
def test_update_course_structure(self): """ Test the actual task that orchestrates data generation and updating the database. """ # Method requires string input course_id = self.course.id self.assertRaises(ValueError, update_course_structure, course_id) # Ensure a CourseStructure object is created expected_structure = _generate_course_structure(course_id) update_course_structure(unicode(course_id)) structure = CourseStructure.objects.get(course_id=course_id) self.assertEqual(structure.course_id, course_id) self.assertEqual(structure.structure, expected_structure['structure']) self.assertEqual(structure.discussion_id_map.keys(), expected_structure['discussion_id_map'].keys()) self.assertEqual( [unicode(value) for value in structure.discussion_id_map.values()], expected_structure['discussion_id_map'].values() )
def test_block_with_missing_fields(self): """ The generator should continue to operate on blocks/XModule that do not have graded or format fields. """ # TODO In the future, test logging using testfixtures.LogCapture # (https://pythonhosted.org/testfixtures/logging.html). Talk to TestEng before adding that library. category = 'peergrading' display_name = 'Testing Module' module = ItemFactory.create(parent=self.section, category=category, display_name=display_name) structure = _generate_course_structure(self.course.id) usage_key = unicode(module.location) actual = structure['blocks'][usage_key] expected = { "usage_key": usage_key, "block_type": category, "display_name": display_name, "graded": False, "format": None, "children": [] } self.assertEqual(actual, expected)
def test_block_with_missing_fields(self): """ The generator should continue to operate on blocks/XModule that do not have graded or format fields. """ # TODO In the future, test logging using testfixtures.LogCapture # (https://pythonhosted.org/testfixtures/logging.html). Talk to TestEng before adding that library. category = 'peergrading' display_name = 'Testing Module' module = ItemFactory.create(parent=self.section, category=category, display_name=display_name) structure = _generate_course_structure(self.course.id) usage_key = unicode(module.location) actual = structure['structure']['blocks'][usage_key] expected = { "usage_key": usage_key, "block_type": category, "display_name": display_name, "graded": False, "format": None, "children": [] } self.assertEqual(actual, expected)