|
13 | 13 |
|
14 | 14 | import ddt
|
15 | 15 | import pytest
|
| 16 | +from lxml import etree |
16 | 17 | from opaque_keys.edx.locator import LibraryUsageLocatorV2, LibraryLocatorV2
|
17 | 18 | from webob import Response
|
18 | 19 |
|
19 | 20 | from xblock.core import Blocklike, XBlock
|
| 21 | +from xblock.core import ( |
| 22 | + name_to_pathname, |
| 23 | + is_pointer_tag, |
| 24 | + load_definition_xml, |
| 25 | + format_filepath, |
| 26 | +) |
20 | 27 | from xblock.exceptions import (
|
21 | 28 | XBlockSaveError,
|
22 | 29 | KeyValueMultiSaveError,
|
@@ -1163,3 +1170,51 @@ def test_key_properties_when_usage_is_not_an_opaque_key(self):
|
1163 | 1170 | block = XBlock(Mock(spec=Runtime), scope_ids=scope_ids)
|
1164 | 1171 | self.assertEqual(block.usage_key, "myWeirdOldUsageId")
|
1165 | 1172 | self.assertIsNone(block.context_key)
|
| 1173 | + |
| 1174 | + |
| 1175 | +class TestCoreFunctions(unittest.TestCase): |
| 1176 | + """ |
| 1177 | + Tests for core functions in XBlock. |
| 1178 | + """ |
| 1179 | + def test_name_to_pathname(self): |
| 1180 | + self.assertEqual(name_to_pathname("course:subcourse"), "course/subcourse") |
| 1181 | + self.assertEqual(name_to_pathname("module:lesson:part"), "module/lesson/part") |
| 1182 | + self.assertEqual(name_to_pathname("no_colon"), "no_colon") |
| 1183 | + |
| 1184 | + def test_is_pointer_tag(self): |
| 1185 | + # Case 1: Valid pointer tag |
| 1186 | + xml_obj = etree.Element("some_tag", url_name="test_url") |
| 1187 | + self.assertTrue(is_pointer_tag(xml_obj)) |
| 1188 | + |
| 1189 | + # Case 2: Valid course pointer tag |
| 1190 | + xml_obj = etree.Element("course", url_name="test_url", course="test_course", org="test_org") |
| 1191 | + self.assertTrue(is_pointer_tag(xml_obj)) |
| 1192 | + |
| 1193 | + # Case 3: Invalid case - extra attribute |
| 1194 | + xml_obj = etree.Element("some_tag", url_name="test_url", extra_attr="invalid") |
| 1195 | + self.assertFalse(is_pointer_tag(xml_obj)) |
| 1196 | + |
| 1197 | + # Case 4: Invalid case - has text |
| 1198 | + xml_obj = etree.Element("some_tag", url_name="test_url") |
| 1199 | + xml_obj.text = "invalid_text" |
| 1200 | + self.assertFalse(is_pointer_tag(xml_obj)) |
| 1201 | + |
| 1202 | + # Case 5: Invalid case - has children |
| 1203 | + xml_obj = etree.Element("some_tag", url_name="test_url") |
| 1204 | + _ = etree.SubElement(xml_obj, "child") |
| 1205 | + self.assertFalse(is_pointer_tag(xml_obj)) |
| 1206 | + |
| 1207 | + @patch("xblock.core.load_file") |
| 1208 | + def test_load_definition_xml(self, mock_load_file): |
| 1209 | + mock_load_file.return_value = "<mock_xml />" |
| 1210 | + node = etree.Element("course", url_name="test_url") |
| 1211 | + runtime = Mock() |
| 1212 | + def_id = "mock_id" |
| 1213 | + |
| 1214 | + definition_xml, filepath = load_definition_xml(node, runtime, def_id) |
| 1215 | + self.assertEqual(filepath, "course/test_url.xml") |
| 1216 | + self.assertEqual(definition_xml, "<mock_xml />") |
| 1217 | + mock_load_file.assert_called_once() |
| 1218 | + |
| 1219 | + def test_format_filepath(self): |
| 1220 | + self.assertEqual(format_filepath("course", "test_url"), "course/test_url.xml") |
0 commit comments