Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions futurex_openedx_extensions/dashboard/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -845,6 +845,9 @@ def create(self, validated_data: dict) -> Any:
fields = {
field_name: validated_data.get(field_name) for field_name in field_names if field_name in validated_data
}
# This path bypasses Studio, so it must apply the platform's catalog visibility for new courses itself
if catalog_visibility := getattr(settings, 'NEW_COURSE_CATALOG_VISIBILITY', None):
fields['catalog_visibility'] = catalog_visibility

try:
org_data = ensure_organization(org)
Expand Down
38 changes: 38 additions & 0 deletions tests/test_dashboard/test_serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -1672,6 +1672,44 @@ def test_create_success(
assert result == created_course, 'new course returned'


@pytest.mark.django_db
@pytest.mark.parametrize('setting_overrides, expected_fields', [
({'NEW_COURSE_CATALOG_VISIBILITY': 'none'}, {'catalog_visibility': 'none'}),
({'NEW_COURSE_CATALOG_VISIBILITY': None}, {}),
({}, {}),
], ids=['set', 'set to None', 'not defined'])
@patch('futurex_openedx_extensions.dashboard.serializers.get_all_tenants_info')
@patch('futurex_openedx_extensions.dashboard.serializers.ensure_organization')
@patch('futurex_openedx_extensions.dashboard.serializers.add_organization_course')
@patch('futurex_openedx_extensions.dashboard.serializers.modulestore')
@patch('futurex_openedx_extensions.dashboard.serializers.CourseCreateSerializer.add_roles_and_permissions')
@patch('futurex_openedx_extensions.dashboard.serializers.CourseCreateSerializer.update_course_discussions_settings')
def test_create_catalog_visibility_setting(
_,
__,
mock_modulestore,
___,
____,
mock_get_all_tenants_info,
setting_overrides,
expected_fields,
course_data,
valid_tenants,
settings,
): # pylint: disable=too-many-arguments,redefined-outer-name
"""Verify create() writes NEW_COURSE_CATALOG_VISIBILITY into the course fields only when it is set."""
for name, value in setting_overrides.items():
setattr(settings, name, value)
mock_get_all_tenants_info.return_value = valid_tenants

serializer = serializers.CourseCreateSerializer(context={'request': MagicMock(user=MagicMock(id=123))})
serializer.create(course_data)

fields = mock_modulestore.return_value.create_course.call_args.kwargs['fields']
assert {key: value for key, value in fields.items() if key == 'catalog_visibility'} == expected_fields
assert fields['display_name'] == course_data['display_name'], 'other fields are untouched'


@pytest.mark.django_db
@patch('futurex_openedx_extensions.dashboard.serializers.get_all_tenants_info')
@patch('futurex_openedx_extensions.dashboard.serializers.ensure_organization')
Expand Down
Loading