From e9ec189e9620cd489db3e0f15a829b10fd71f98e Mon Sep 17 00:00:00 2001 From: ruzniaievdm <ruzniaievdm@gmail.com> Date: Fri, 2 Feb 2024 12:38:54 +0200 Subject: [PATCH] fix: [AXIMST-432] 500 error appears if user adds a Content Experiment --- .../views/tests/test_container_page.py | 15 +-------------- .../xblock_storage_handlers/view_handlers.py | 11 ++++++++++- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/cms/djangoapps/contentstore/views/tests/test_container_page.py b/cms/djangoapps/contentstore/views/tests/test_container_page.py index 2f5183e086a5..21e9a1b2763a 100644 --- a/cms/djangoapps/contentstore/views/tests/test_container_page.py +++ b/cms/djangoapps/contentstore/views/tests/test_container_page.py @@ -14,18 +14,15 @@ from urllib.parse import quote import cms.djangoapps.contentstore.views.component as views -from common.djangoapps.xblock_django.user_service import DjangoXBlockUserService from cms.djangoapps.contentstore.tests.test_libraries import LibraryTestCase from xmodule.modulestore import ModuleStoreEnum # lint-amnesty, pylint: disable=wrong-import-order from xmodule.modulestore.django import modulestore # lint-amnesty, pylint: disable=wrong-import-order from xmodule.modulestore.tests.factories import CourseFactory, BlockFactory # lint-amnesty, pylint: disable=wrong-import-order -from xmodule.partitions.partitions import ENROLLMENT_TRACK_PARTITION_ID, UserPartition -from xmodule.partitions.tests.test_partitions import PartitionTestCase from .utils import StudioPageTestCase -class ContainerPageTestCase(StudioPageTestCase, LibraryTestCase, PartitionTestCase): +class ContainerPageTestCase(StudioPageTestCase, LibraryTestCase): """ Unit tests for the container page. """ @@ -37,24 +34,14 @@ def setUp(self): super().setUp() self.vertical = self._create_block(self.sequential, 'vertical', 'Unit') self.html = self._create_block(self.vertical, "html", "HTML") - self.user_partition = UserPartition( - ENROLLMENT_TRACK_PARTITION_ID, - self.TEST_NAME, - self.TEST_DESCRIPTION, - self.TEST_GROUPS - ) self.child_container = self._create_block( self.vertical, 'split_test', 'Split Test', - user_partition_id=ENROLLMENT_TRACK_PARTITION_ID, - user_partitions=[self.user_partition] ) self.child_vertical = self._create_block(self.child_container, 'vertical', 'Child Vertical') self.video = self._create_block(self.child_vertical, "video", "My Video") self.store = modulestore() - user_service = DjangoXBlockUserService(self.user) - self.child_container.runtime._services['user'] = user_service # pylint: disable=protected-access past = datetime.datetime(1970, 1, 1, tzinfo=UTC) future = datetime.datetime.now(UTC) + datetime.timedelta(days=1) diff --git a/cms/djangoapps/contentstore/xblock_storage_handlers/view_handlers.py b/cms/djangoapps/contentstore/xblock_storage_handlers/view_handlers.py index eb4438a5b1d8..9788c34cc2d4 100644 --- a/cms/djangoapps/contentstore/xblock_storage_handlers/view_handlers.py +++ b/cms/djangoapps/contentstore/xblock_storage_handlers/view_handlers.py @@ -88,6 +88,11 @@ CREATE_IF_NOT_FOUND = ["course_info"] +# List of categories to check for presence in the children of the XBlock. +# This list is used to determine if all of the specified categories are absent +# in the categories of the children XBlock instances otherwise icon class variable will be set to `None`. +CATEGORIES_WITH_ABSENT_ICON = ["split_test"] + # Useful constants for defining predicates NEVER = lambda x: False ALWAYS = lambda x: True @@ -1064,6 +1069,10 @@ def create_xblock_info( # lint-amnesty, pylint: disable=too-many-statements ) else: user_partitions = get_user_partition_info(xblock, course=course) + all_excluded_categories_absent = all( + category not in [child.category for child in xblock.get_children()] + for category in CATEGORIES_WITH_ABSENT_ICON + ) xblock_info.update( { "edited_on": get_default_time_display(xblock.subtree_edited_on) @@ -1091,7 +1100,7 @@ def create_xblock_info( # lint-amnesty, pylint: disable=too-many-statements "group_access": xblock.group_access, "user_partitions": user_partitions, "show_correctness": xblock.show_correctness, - "xblock_type": get_icon(xblock) if is_xblock_unit else None, + "xblock_type": get_icon(xblock) if is_xblock_unit and all_excluded_categories_absent else None, } )