Example #1
0
    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)
Example #2
0
    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)
Example #3
0
    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)
Example #4
0
    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)
Example #5
0
    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)
Example #6
0
    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()
        )
Example #7
0
    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)
Example #8
0
    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)