Commit 9a5a00bb by Bill DeRusha Committed by GitHub

Merge pull request #315 from edx/bderusha/title-override

Drupal data loader fixes
parents 601b43f8 a759ad84
...@@ -369,7 +369,7 @@ class CourseMarketingSiteDataLoader(AbstractMarketingSiteDataLoader): ...@@ -369,7 +369,7 @@ class CourseMarketingSiteDataLoader(AbstractMarketingSiteDataLoader):
defaults = { defaults = {
'key': key, 'key': key,
'title': data['field_course_course_title']['value'], 'title': self.clean_html(data['field_course_course_title']['value']),
'number': data['field_course_code'], 'number': data['field_course_code'],
'full_description': self.get_description(data), 'full_description': self.get_description(data),
'video': self.get_video(data), 'video': self.get_video(data),
...@@ -377,7 +377,16 @@ class CourseMarketingSiteDataLoader(AbstractMarketingSiteDataLoader): ...@@ -377,7 +377,16 @@ class CourseMarketingSiteDataLoader(AbstractMarketingSiteDataLoader):
'level_type': self.get_level_type(data['field_course_level']), 'level_type': self.get_level_type(data['field_course_level']),
'card_image_url': self._get_nested_url(data.get('field_course_image_promoted')), 'card_image_url': self._get_nested_url(data.get('field_course_image_promoted')),
} }
course, __ = Course.objects.update_or_create(key__iexact=key, partner=self.partner, defaults=defaults) course, created = Course.objects.get_or_create(key__iexact=key, partner=self.partner, defaults=defaults)
# If the course already exists update the fields only if the course_run we got from drupal is published.
# People often put temp data into required drupal fields for unpublished courses. We don't want to overwrite
# the course info with this data, so we only update course info from published sources.
published = self.get_course_run_status(data) == CourseRun.Status.Published
if not created and published:
for attr, value in defaults.items():
setattr(course, attr, value)
course.save()
self.set_subjects(course, data) self.set_subjects(course, data)
self.set_authoring_organizations(course, data) self.set_authoring_organizations(course, data)
......
...@@ -325,6 +325,8 @@ class PersonMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi ...@@ -325,6 +325,8 @@ class PersonMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi
class CourseMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixin, TestCase): class CourseMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixin, TestCase):
loader_class = CourseMarketingSiteDataLoader loader_class = CourseMarketingSiteDataLoader
mocked_data = mock_data.MARKETING_SITE_API_COURSE_BODIES mocked_data = mock_data.MARKETING_SITE_API_COURSE_BODIES
mocked_data.append(mock_data.MARKETING_SITE_API_UNPUBLISHED_COPY_COURSE_BODY)
mocked_data.append(mock_data.MARKETING_SITE_API_PUBLISHED_COPY_COURSE_BODY)
def _get_uuids(self, items): def _get_uuids(self, items):
return [item['uuid'] for item in items] return [item['uuid'] for item in items]
...@@ -425,6 +427,19 @@ class CourseMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi ...@@ -425,6 +427,19 @@ class CourseMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi
self.validate_relationships(data, data_map) self.validate_relationships(data, data_map)
def assert_no_override_unpublished_course_fields(self, data):
course = self._get_course(data)
expected_values = {
'title': data['field_course_course_title']['value'],
'full_description': self.loader.get_description(data),
'short_description': self.loader.clean_html(data['field_course_sub_title_short']),
'card_image_url': (data.get('field_course_image_promoted') or {}).get('url'),
}
for field, value in expected_values.items():
self.assertNotEqual(getattr(course, field), value)
def validate_relationships(self, data, data_map): def validate_relationships(self, data, data_map):
for relationship, field in data_map.items(): for relationship, field in data_map.items():
expected = sorted(self._get_uuids(data.get(field, []))) expected = sorted(self._get_uuids(data.get(field, [])))
...@@ -469,9 +484,20 @@ class CourseMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi ...@@ -469,9 +484,20 @@ class CourseMarketingSiteDataLoaderTests(AbstractMarketingSiteDataLoaderTestMixi
def test_ingest(self): def test_ingest(self):
self.mock_login_response() self.mock_login_response()
data = self.mock_api() data = self.mock_api()
published_course_run_key = mock_data.MARKETING_SITE_API_PUBLISHED_COPY_COURSE_BODY['field_course_id']
self.loader.ingest() self.loader.ingest()
for datum in data: for datum in data:
self.assert_course_run_loaded(datum) self.assert_course_run_loaded(datum)
if datum['field_course_code'] == mock_data.MULTI_COURSE_RUN_COURSE_NUMBER:
# For the original course and the unpublished course ensure course fields are not present.
if datum['field_course_id'] != published_course_run_key:
self.assert_no_override_unpublished_course_fields(datum)
# For the latest published course ensure course fields match the latest saved course.
else:
self.assert_course_loaded(datum)
else:
self.assert_course_loaded(datum) self.assert_course_loaded(datum)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment