Merge pull request #18808 from open-craft/opencraft/taranjeet/fix-child-course-display
Fix incorrect course name displayed for CCX courses.
This commit is contained in:
@@ -0,0 +1,65 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
# Generated by Django 1.11.15 on 2018-08-31 18:13
|
||||
from __future__ import unicode_literals
|
||||
|
||||
from django.db import migrations
|
||||
|
||||
import json
|
||||
import logging
|
||||
|
||||
from ccx_keys.locator import CCXLocator
|
||||
from courseware.courses import get_course_by_id
|
||||
from xmodule.modulestore.django import SignalHandler
|
||||
|
||||
log = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def save_display_name(apps, schema_editor):
|
||||
'''
|
||||
Add override for `display_name` for CCX courses that don't have one yet.
|
||||
'''
|
||||
CcxFieldOverride = apps.get_model('ccx', 'CcxFieldOverride')
|
||||
CustomCourseForEdX = apps.get_model('ccx', 'CustomCourseForEdX')
|
||||
|
||||
# Build list of CCX courses that don't have an override for `display_name` yet
|
||||
ccx_display_name_present_ids = list(CcxFieldOverride.objects.filter(
|
||||
field='display_name').values_list('ccx__id', flat=True))
|
||||
ccx_list = CustomCourseForEdX.objects.exclude(id__in=ccx_display_name_present_ids)
|
||||
|
||||
# Create `display_name` overrides for these CCX courses
|
||||
for ccx in ccx_list:
|
||||
course = get_course_by_id(ccx.course_id, depth=None)
|
||||
display_name = course.fields['display_name']
|
||||
display_name_json = display_name.to_json(ccx.display_name)
|
||||
serialized_display_name = json.dumps(display_name_json)
|
||||
|
||||
CcxFieldOverride.objects.get_or_create(
|
||||
ccx=ccx,
|
||||
location=course.location,
|
||||
field='display_name',
|
||||
defaults={'value': serialized_display_name},
|
||||
)
|
||||
|
||||
# Publish change
|
||||
responses = SignalHandler.course_published.send(
|
||||
sender=ccx,
|
||||
course_key=CCXLocator.from_course_locator(course.id, unicode(ccx.id))
|
||||
)
|
||||
for rec, response in responses:
|
||||
log.info(
|
||||
'Signal fired when course is published. Course %s. Receiver: %s. Response: %s',
|
||||
ccx.course_id,
|
||||
rec,
|
||||
response
|
||||
)
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('ccx', '0005_change_ccx_coach_to_staff'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RunPython(save_display_name, reverse_code=migrations.RunPython.noop)
|
||||
]
|
||||
@@ -283,6 +283,10 @@ class TestCCXProgressChanges(CcxTestCase, LoginEnrollmentTestCase):
|
||||
|
||||
|
||||
@attr(shard=7)
|
||||
@override_settings(
|
||||
XBLOCK_FIELD_DATA_WRAPPERS=['lms.djangoapps.courseware.field_overrides:OverrideModulestoreFieldData.wrap'],
|
||||
MODULESTORE_FIELD_OVERRIDE_PROVIDERS=['ccx.overrides.CustomCoursesForEdxOverrideProvider'],
|
||||
)
|
||||
@ddt.ddt
|
||||
class TestCoachDashboard(CcxTestCase, LoginEnrollmentTestCase):
|
||||
"""
|
||||
@@ -393,6 +397,13 @@ class TestCoachDashboard(CcxTestCase, LoginEnrollmentTestCase):
|
||||
ccx = CustomCourseForEdX.objects.get()
|
||||
course_enrollments = get_override_for_ccx(ccx, self.course, 'max_student_enrollments_allowed')
|
||||
self.assertEqual(course_enrollments, settings.CCX_MAX_STUDENTS_ALLOWED)
|
||||
# check if the course display name is properly set
|
||||
course_display_name = get_override_for_ccx(ccx, self.course, 'display_name')
|
||||
self.assertEqual(course_display_name, ccx_name)
|
||||
|
||||
# check if the course display name is properly set in modulestore
|
||||
course_display_name = self.mstore.get_course(ccx.locator).display_name
|
||||
self.assertEqual(course_display_name, ccx_name)
|
||||
|
||||
# assert ccx creator has role=staff
|
||||
role = CourseStaffRole(course_key)
|
||||
|
||||
@@ -199,6 +199,8 @@ def create_ccx(request, course, ccx=None):
|
||||
|
||||
# Enforce a static limit for the maximum amount of students that can be enrolled
|
||||
override_field_for_ccx(ccx, course, 'max_student_enrollments_allowed', settings.CCX_MAX_STUDENTS_ALLOWED)
|
||||
# Save display name explicitly
|
||||
override_field_for_ccx(ccx, course, 'display_name', name)
|
||||
|
||||
# Hide anything that can show up in the schedule
|
||||
hidden = 'visible_to_staff_only'
|
||||
|
||||
Reference in New Issue
Block a user