diff --git a/openedx/core/djangoapps/content/course_overviews/models.py b/openedx/core/djangoapps/content/course_overviews/models.py index 50ed256a3aba0a5211482902778f0c575f59960a..60031d879aa0f7caea06ec07f947c77031194f76 100644 --- a/openedx/core/djangoapps/content/course_overviews/models.py +++ b/openedx/core/djangoapps/content/course_overviews/models.py @@ -387,14 +387,8 @@ class CourseOverview(TimeStampedModel): # Regenerate the thumbnail images if they're missing (either because # they were never generated, or because they were flushed out after # a change to CourseOverviewImageConfig. - if course_overview: - if hasattr(course_overview, 'image_set'): - image_set = course_overview.image_set - if not image_set.small_url or not image_set.large_url: - CourseOverviewImageSet.objects.filter(course_overview=course_overview).delete() - CourseOverviewImageSet.create(course_overview) - else: - CourseOverviewImageSet.create(course_overview) + if course_overview and not hasattr(course_overview, 'image_set'): + CourseOverviewImageSet.create(course_overview) return course_overview or cls.load_from_module_store(course_id) diff --git a/openedx/core/djangoapps/content/course_overviews/tests/test_course_overviews.py b/openedx/core/djangoapps/content/course_overviews/tests/test_course_overviews.py index ff6f597de4bb236d53a14c3c45805a380231d51a..3511fd802f648661b55c1f9415938e336bcfc6c7 100644 --- a/openedx/core/djangoapps/content/course_overviews/tests/test_course_overviews.py +++ b/openedx/core/djangoapps/content/course_overviews/tests/test_course_overviews.py @@ -601,6 +601,11 @@ class CourseOverviewImageSetTestCase(ModuleStoreTestCase): course_image_content = StaticContent(course_image_asset_key, image_name, 'image/png', image_buff) contentstore().save(course_image_content) + def get_from_id(self, course_id): + """Get course overview, but makes sure that we are actually calling the method by wiping cache""" + self.clear_caches() # wipe out the request cache so that get_from_id is actually run each time + return CourseOverview.get_from_id(course_id) + def set_config(self, enabled): """ Enable or disable thumbnail generation config. @@ -682,7 +687,7 @@ class CourseOverviewImageSetTestCase(ModuleStoreTestCase): course = CourseFactory.create( default_store=modulestore_type, course_image=course_image ) - course_overview_before = CourseOverview.get_from_id(course.id) + course_overview_before = self.get_from_id(course.id) # This initial seeding should create an entry for the image_set. assert hasattr(course_overview_before, 'image_set') @@ -697,7 +702,7 @@ class CourseOverviewImageSetTestCase(ModuleStoreTestCase): self.set_config(False) # Fetch a new CourseOverview - course_overview_after = CourseOverview.get_from_id(course.id) + course_overview_after = self.get_from_id(course.id) # Assert that the data still exists for debugging purposes assert hasattr(course_overview_after, 'image_set') @@ -717,7 +722,7 @@ class CourseOverviewImageSetTestCase(ModuleStoreTestCase): """ with self.store.default_store(modulestore_type): course = CourseFactory.create(default_store=modulestore_type) - overview = CourseOverview.get_from_id(course.id) + overview = self.get_from_id(course.id) # First the behavior when there's no CDN enabled... AssetBaseUrlConfig.objects.all().delete() @@ -743,7 +748,7 @@ class CourseOverviewImageSetTestCase(ModuleStoreTestCase): """ with self.store.default_store(modulestore_type): course = CourseFactory.create(default_store=modulestore_type) - overview = CourseOverview.get_from_id(course.id) + overview = self.get_from_id(course.id) # Now enable the CDN... AssetBaseUrlConfig.objects.create(enabled=True, base_url='fakecdn.edx.org') @@ -771,7 +776,7 @@ class CourseOverviewImageSetTestCase(ModuleStoreTestCase): """ with self.store.default_store(modulestore_type): course = CourseFactory.create(default_store=modulestore_type) - overview = CourseOverview.get_from_id(course.id) + overview = self.get_from_id(course.id) # Now enable the CDN... AssetBaseUrlConfig.objects.create(enabled=True, base_url='fakecdn.edx.org') @@ -818,7 +823,7 @@ class CourseOverviewImageSetTestCase(ModuleStoreTestCase): # The next time we create a CourseOverview, the images are explicitly # *not* regenerated. with mock.patch('openedx.core.lib.courses.create_course_image_thumbnail') as patched_create_thumbnail: - course_overview = CourseOverview.get_from_id(course_overview.id) + self.get_from_id(course_overview.id) patched_create_thumbnail.assert_not_called() @ddt.data( @@ -862,7 +867,7 @@ class CourseOverviewImageSetTestCase(ModuleStoreTestCase): self.set_config(enabled=False) # Now generate the CourseOverview... - course_overview = CourseOverview.get_from_id(course.id) + course_overview = self.get_from_id(course.id) # If create_after_overview is True, no image_set exists yet. Verify # that, then switch config back over to True and it should lazily @@ -870,7 +875,7 @@ class CourseOverviewImageSetTestCase(ModuleStoreTestCase): if create_after_overview: assert not hasattr(course_overview, 'image_set') self.set_config(enabled=True) - course_overview = CourseOverview.get_from_id(course.id) + course_overview = self.get_from_id(course.id) assert hasattr(course_overview, 'image_set') image_urls = course_overview.image_urls @@ -931,7 +936,7 @@ class CourseOverviewImageSetTestCase(ModuleStoreTestCase): # Now generate the CourseOverview... config = CourseOverviewImageConfig.current() - course_overview = CourseOverview.get_from_id(course.id) + course_overview = self.get_from_id(course.id) image_urls = course_overview.image_urls for image_url, target in [(image_urls['small'], config.small), (image_urls['large'], config.large)]: @@ -972,7 +977,7 @@ class CourseOverviewImageSetTestCase(ModuleStoreTestCase): course = CourseFactory.create() # First create our CourseOverview - overview = CourseOverview.get_from_id(course.id) + overview = self.get_from_id(course.id) assert not hasattr(overview, 'image_set') # Now create an ImageSet by hand... @@ -1012,7 +1017,7 @@ class CourseOverviewImageSetTestCase(ModuleStoreTestCase): self._create_course_image(course, course_image) # Create course overview with image set. - overview = CourseOverview.get_from_id(course.id) + overview = self.get_from_id(course.id) assert hasattr(overview, 'image_set') # Make sure the thumbnail names come out as expected... @@ -1053,7 +1058,7 @@ class CourseOverviewImageSetTestCase(ModuleStoreTestCase): if expected_url is None: expected_url = course_image_url(course) - course_overview = CourseOverview.get_from_id(course.id) + course_overview = self.get_from_id(course.id) # All the URLs that come back should be for the expected_url assert course_overview.image_urls == {'raw': expected_url, 'small': expected_url, 'large': expected_url}