def test_recreate_theme_previews(): xpi_path = os.path.join( settings.ROOT, 'src/olympia/devhub/tests/addons/mozilla_static_theme.zip' ) addon_without_previews = addon_factory(type=amo.ADDON_STATICTHEME) copy_stored_file(xpi_path, addon_without_previews.current_version.file.file_path) addon_with_previews = addon_factory(type=amo.ADDON_STATICTHEME) copy_stored_file(xpi_path, addon_with_previews.current_version.file.file_path) VersionPreview.objects.create( version=addon_with_previews.current_version, sizes={'image': [123, 456], 'thumbnail': [34, 45]}, ) assert addon_without_previews.current_previews.count() == 0 assert addon_with_previews.current_previews.count() == 1 recreate_theme_previews([addon_without_previews.id, addon_with_previews.id]) assert addon_without_previews.reload().current_previews.count() == 2 assert addon_with_previews.reload().current_previews.count() == 2 sizes = addon_without_previews.current_previews.values_list('sizes', flat=True) renderings = amo.THEME_PREVIEW_RENDERINGS assert list(sizes) == [ { 'image': list(renderings['firefox']['full']), 'thumbnail': list(renderings['firefox']['thumbnail']), 'image_format': renderings['firefox']['image_format'], 'thumbnail_format': renderings['firefox']['thumbnail_format'], }, { 'image': list(renderings['amo']['full']), 'thumbnail': list(renderings['amo']['thumbnail']), 'image_format': renderings['amo']['image_format'], 'thumbnail_format': renderings['amo']['thumbnail_format'], }, ]
def test_recreate_theme_previews(): xpi_path = os.path.join( settings.ROOT, 'src/olympia/devhub/tests/addons/mozilla_static_theme.zip') addon_without_previews = addon_factory(type=amo.ADDON_STATICTHEME) copy_stored_file( xpi_path, addon_without_previews.current_version.all_files[0].file_path) addon_with_previews = addon_factory(type=amo.ADDON_STATICTHEME) copy_stored_file( xpi_path, addon_with_previews.current_version.all_files[0].file_path) VersionPreview.objects.create( version=addon_with_previews.current_version, sizes={'image': [123, 456], 'thumbnail': [34, 45]}) assert addon_without_previews.current_previews.count() == 0 assert addon_with_previews.current_previews.count() == 1 recreate_theme_previews( [addon_without_previews.id, addon_with_previews.id]) assert addon_without_previews.reload().current_previews.count() == 3 assert addon_with_previews.reload().current_previews.count() == 3 sizes = addon_without_previews.current_previews.values_list( 'sizes', flat=True) assert list(sizes) == [ {'image': list(amo.THEME_PREVIEW_SIZES['header']['full']), 'thumbnail': list(amo.THEME_PREVIEW_SIZES['header']['thumbnail'])}, {'image': list(amo.THEME_PREVIEW_SIZES['list']['full']), 'thumbnail': list(amo.THEME_PREVIEW_SIZES['list']['thumbnail'])}, {'image': list(amo.THEME_PREVIEW_SIZES['single']['full']), 'thumbnail': list(amo.THEME_PREVIEW_SIZES['single']['thumbnail'])}]
def test_create_missing_theme_previews(parse_addon_mock): parse_addon_mock.return_value = {} theme = addon_factory(type=amo.ADDON_STATICTHEME) preview = VersionPreview.objects.create( version=theme.current_version, sizes={'image': [123, 456], 'thumbnail': [34, 45]}) VersionPreview.objects.create( version=theme.current_version, sizes={'image': [123, 456], 'thumbnail': [34, 45]}) VersionPreview.objects.create( version=theme.current_version, sizes={'image': [123, 456], 'thumbnail': [34, 45]}) # addon has 3 complete previews already so skip when only_missing=True with mock.patch('olympia.addons.tasks.generate_static_theme_preview') as p: recreate_theme_previews([theme.id], only_missing=True) assert p.call_count == 0 recreate_theme_previews([theme.id], only_missing=False) assert p.call_count == 1 # break one of the previews preview.update(sizes={}) with mock.patch('olympia.addons.tasks.generate_static_theme_preview') as p: recreate_theme_previews([theme.id], only_missing=True) assert p.call_count == 1 # And delete it so the addon only has 2 previews preview.delete() with mock.patch('olympia.addons.tasks.generate_static_theme_preview') as p: recreate_theme_previews([theme.id], only_missing=True) assert p.call_count == 1
def test_create_missing_theme_previews(parse_addon_mock): parse_addon_mock.return_value = {} theme = addon_factory(type=amo.ADDON_STATICTHEME) amo_preview = VersionPreview.objects.create( version=theme.current_version, sizes={ 'image': amo.THEME_PREVIEW_RENDERINGS['amo']['full'], 'thumbnail': amo.THEME_PREVIEW_RENDERINGS['amo']['thumbnail'], 'thumbnail_format': amo.THEME_PREVIEW_RENDERINGS['amo']['thumbnail_format'], 'image_format': amo.THEME_PREVIEW_RENDERINGS['amo']['image_format'], }, ) firefox_preview = VersionPreview.objects.create( version=theme.current_version, sizes={ 'image': amo.THEME_PREVIEW_RENDERINGS['firefox']['full'], 'thumbnail': amo.THEME_PREVIEW_RENDERINGS['firefox']['thumbnail'], }, ) # add another extra preview size that should be ignored extra_preview = VersionPreview.objects.create( version=theme.current_version, sizes={'image': [123, 456], 'thumbnail': [34, 45]}, ) # addon has all the complete previews already so skip when only_missing=True assert VersionPreview.objects.count() == 3 with mock.patch( f'{PATCH_PATH}.generate_static_theme_preview.apply_async' ) as gen_preview, mock.patch(f'{PATCH_PATH}.resize_image') as resize: recreate_theme_previews([theme.id], only_missing=True) assert gen_preview.call_count == 0 assert resize.call_count == 0 recreate_theme_previews([theme.id], only_missing=False) assert gen_preview.call_count == 1 assert resize.call_count == 0 # If the add-on is missing a preview, we call generate_static_theme_preview VersionPreview.objects.get(id=amo_preview.id).delete() firefox_preview.save() extra_preview.save() assert VersionPreview.objects.count() == 2 with mock.patch( f'{PATCH_PATH}.generate_static_theme_preview.apply_async' ) as gen_preview, mock.patch(f'{PATCH_PATH}.resize_image') as resize: recreate_theme_previews([theme.id], only_missing=True) assert gen_preview.call_count == 1 assert resize.call_count == 0 # Preview is correct dimensions but wrong format, call generate_static_theme_preview amo_preview.sizes['image_format'] = 'foo' amo_preview.save() firefox_preview.save() extra_preview.save() assert VersionPreview.objects.count() == 3 with mock.patch( f'{PATCH_PATH}.generate_static_theme_preview.apply_async' ) as gen_preview, mock.patch(f'{PATCH_PATH}.resize_image') as resize: recreate_theme_previews([theme.id], only_missing=True) assert gen_preview.call_count == 1 assert resize.call_count == 0 # But we don't do the full regeneration to just get new thumbnail sizes or formats amo_preview.sizes['thumbnail'] = [666, 444] amo_preview.sizes['image_format'] = 'svg' amo_preview.save() assert amo_preview.thumbnail_dimensions == [666, 444] firefox_preview.sizes['thumbnail_format'] = 'gif' firefox_preview.save() assert firefox_preview.get_format('thumbnail') == 'gif' extra_preview.save() assert VersionPreview.objects.count() == 3 with mock.patch( f'{PATCH_PATH}.generate_static_theme_preview.apply_async' ) as gen_preview, mock.patch(f'{PATCH_PATH}.resize_image') as resize: recreate_theme_previews([theme.id], only_missing=True) assert gen_preview.call_count == 0 # not called assert resize.call_count == 2 amo_preview.reload() assert amo_preview.thumbnail_dimensions == [720, 92] firefox_preview.reload() assert firefox_preview.get_format('thumbnail') == 'png' assert VersionPreview.objects.count() == 3