def test_localize_name_description(self): data = self.get_dict(name_de='name_de', description_de='description_de') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid(), self.form.errors self.form.save()
def test_reupload(self, save_persona_image_mock, create_persona_preview_images_mock, make_checksum_mock): make_checksum_mock.return_value = 'checksumbeforeyouwrecksome' data = self.get_dict(header_hash='y0l0', footer_hash='abab') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() dst = os.path.join(user_media_path('addons'), str(self.instance.id)) header_src = os.path.join(settings.TMP_PATH, 'persona_header', u'y0l0') footer_src = os.path.join(settings.TMP_PATH, 'persona_footer', u'abab') assert save_persona_image_mock.mock_calls == ([ mock.call(src=header_src, full_dst=os.path.join(dst, 'pending_header.png')), mock.call(src=footer_src, full_dst=os.path.join(dst, 'pending_footer.png')) ]) rqt = RereviewQueueTheme.objects.filter(theme=self.instance.persona) assert rqt.count() == 1 assert rqt[0].header == 'pending_header.png' assert rqt[0].footer == 'pending_footer.png' assert not rqt[0].dupe_persona
def test_reupload_legacy_header_only(self): """ STR the bug this test fixes: - Reupload a legacy theme (/w footer == leg.png) legacy, header only. - The header would get saved as 'pending_header.png'. - The footer would get saved as 'footer.png'. - On approving, it would see 'footer.png' !== 'leg.png' - It run move_stored_file('footer.png', 'leg.png'). - But footer.png does not exist. BAM BUG. """ self.theme.header = 'Legacy-header3H.png' self.theme.footer = 'Legacy-footer3H-Copy.jpg' self.theme.save() data = self.get_dict(header_hash='arthro') self.form = EditThemeForm(data, request=self.request, instance=self.instance) eq_(self.form.is_valid(), True) self.form.save() rqt = RereviewQueueTheme.objects.get() eq_(rqt.header, 'pending_header.png') eq_(rqt.footer, 'Legacy-footer3H-Copy.jpg')
def save_success(self): other_cat = Category.objects.create(type=amo.ADDON_PERSONA) self.data = { 'accentcolor': '#EFF0FF', 'category': other_cat.id, 'license': amo.LICENSE_CC_BY_NC_SA.id, 'slug': 'swag-lifestyle', 'tags': 'ag', 'textcolor': '#CACACA', 'name_en-us': 'All Day I Dream About Swag', 'description_en-us': 'ADIDAS', } self.form = EditThemeForm(self.data, request=self.request, instance=self.instance) # Compare form initial data with post data. eq_data = self.get_dict() for k in [ k for k in self.form.initial.keys() if k not in ['name', 'description'] ]: assert self.form.initial[k] == eq_data[k] assert self.form.data == self.data assert self.form.is_valid(), self.form.errors self.form.save()
def test_reupload_legacy_header_only(self, make_checksum_mock): """ STR the bug this test fixes: - Reupload a legacy theme (/w footer == leg.png) legacy, header only. - The header would get saved as 'pending_header.png'. - The footer would get saved as 'footer.png'. - On approving, it would see 'footer.png' !== 'leg.png' - It run move_stored_file('footer.png', 'leg.png'). - But footer.png does not exist. BAM BUG. Footer has been removed in Issue #5379 https://github.com/mozilla/addons-server/issues/5379 """ make_checksum_mock.return_value = 'comechecksome' self.theme.header = 'Legacy-header3H.png' self.theme.save() data = self.get_dict(header_hash='arthro') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() rqt = RereviewQueueTheme.objects.get() assert rqt.header == 'pending_header.png'
def test_initial(self): self.form = EditThemeForm(None, request=self.request, instance=self.instance) # Compare form initial data with post data. eq_data = self.get_dict() for k in [k for k in self.form.initial.keys() if k not in ['name', 'description']]: assert self.form.initial[k] == eq_data[k]
def test_name_unique(self): data = self.get_dict(**{'name_en-us': 'Bands Make You Dance'}) Addon.objects.create(type=amo.ADDON_PERSONA, status=amo.STATUS_PUBLIC, name=data['name_en-us']) self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert not self.form.is_valid() assert self.form.errors == { 'name': ['This name is already in use. Please choose another.'] }
def test_reupload_duplicate(self, make_checksum_mock): make_checksum_mock.return_value = 'checksumbeforeyouwrecksome' theme = amo.tests.addon_factory(type=amo.ADDON_PERSONA) theme.persona.checksum = 'checksumbeforeyouwrecksome' theme.persona.save() data = self.get_dict(header_hash='head', footer_hash='foot') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() rqt = RereviewQueueTheme.objects.get(theme=self.instance.persona) assert rqt.dupe_persona == theme.persona
def test_reupload_legacy_header_only(self, make_checksum_mock): """ STR the bug this test fixes: - Reupload a legacy theme (/w footer == leg.png) legacy, header only. - The header would get saved as 'pending_header.png'. - The footer would get saved as 'footer.png'. - On approving, it would see 'footer.png' !== 'leg.png' - It run move_stored_file('footer.png', 'leg.png'). - But footer.png does not exist. BAM BUG. """ make_checksum_mock.return_value = 'comechecksome' self.theme.header = 'Legacy-header3H.png' self.theme.footer = 'Legacy-footer3H-Copy.jpg' self.theme.save() data = self.get_dict(header_hash='arthro') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() rqt = RereviewQueueTheme.objects.get() assert rqt.header == 'pending_header.png' assert rqt.footer == 'Legacy-footer3H-Copy.jpg'
def test_reupload(self, save_persona_image_mock, create_persona_preview_images_mock, make_checksum_mock): make_checksum_mock.return_value = 'checksumbeforeyouwrecksome' data = self.get_dict(header_hash='y0l0', footer_hash='abab') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() dst = os.path.join(user_media_path('addons'), str(self.instance.id)) header_src = os.path.join(settings.TMP_PATH, 'persona_header', u'y0l0') footer_src = os.path.join(settings.TMP_PATH, 'persona_footer', u'abab') assert save_persona_image_mock.mock_calls == ( [mock.call(src=header_src, full_dst=os.path.join(dst, 'pending_header.png')), mock.call(src=footer_src, full_dst=os.path.join(dst, 'pending_footer.png'))]) rqt = RereviewQueueTheme.objects.filter(theme=self.instance.persona) assert rqt.count() == 1 assert rqt[0].header == 'pending_header.png' assert rqt[0].footer == 'pending_footer.png' assert not rqt[0].dupe_persona
def save_success(self): other_cat = Category.objects.create(type=amo.ADDON_PERSONA) self.data = { 'accentcolor': '#EFF0FF', 'category': other_cat.id, 'license': amo.LICENSE_CC_BY_NC_SA.id, 'slug': 'swag-lifestyle', 'tags': 'ag', 'textcolor': '#CACACA', 'name_en-us': 'All Day I Dream About Swag', 'description_en-us': 'ADIDAS', } self.form = EditThemeForm(self.data, request=self.request, instance=self.instance) # Compare form initial data with post data. eq_data = self.get_dict() for k in [k for k in self.form.initial.keys() if k not in ['name', 'description']]: assert self.form.initial[k] == eq_data[k] assert self.form.data == self.data assert self.form.is_valid(), self.form.errors self.form.save()
def test_initial(self): self.form = EditThemeForm(None, request=self.request, instance=self.instance) # Compare form initial data with post data. eq_data = self.get_dict() for k in [k for k in self.form.initial.keys() if k not in ["name", "description"]]: assert self.form.initial[k] == eq_data[k]
def test_initial(self): self.form = EditThemeForm(None, request=self.request, instance=self.instance) # Compare form initial data with post data. eq_data = self.get_dict() for k in [k for k in self.form.initial.keys() if k not in ['name', 'description']]: eq_(self.form.initial[k], eq_data[k])
def test_name_unique(self): data = self.get_dict(**{'name_en-us': 'Bands Make You Dance'}) Addon.objects.create(type=amo.ADDON_PERSONA, status=amo.STATUS_PUBLIC, name=data['name_en-us']) self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert not self.form.is_valid() assert self.form.errors == { 'name': [('en-us', 'This name is already in use. Please choose another.')]}
def test_name_unique_multiple_locale_conflicts(self): name = {'name_en-us': 'English', 'name_es': u'Español'} data = self.get_dict(**name) Addon.objects.create(type=amo.ADDON_PERSONA, status=amo.STATUS_PUBLIC, name={ 'en-us': 'English', 'es': u'Español' }) self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert not self.form.is_valid() assert self.form.errors == { 'name': ['This name is already in use. Please choose another.'] }
def test_reupload_duplicate(self, make_checksum_mock): make_checksum_mock.return_value = "checksumbeforeyouwrecksome" theme = amo.tests.addon_factory(type=amo.ADDON_PERSONA) theme.persona.checksum = "checksumbeforeyouwrecksome" theme.persona.save() data = self.get_dict(header_hash="head", footer_hash="foot") self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() rqt = RereviewQueueTheme.objects.get(theme=self.instance.persona) assert rqt.dupe_persona == theme.persona
def test_reupload_duplicate(self, make_checksum_mock): make_checksum_mock.return_value = 'checksumbeforeyouwrecksome' theme = amo.tests.addon_factory(type=amo.ADDON_PERSONA) theme.persona.checksum = 'checksumbeforeyouwrecksome' theme.persona.save() data = self.get_dict(header_hash='head', footer_hash='foot') self.form = EditThemeForm(data, request=self.request, instance=self.instance) eq_(self.form.is_valid(), True) self.form.save() rqt = RereviewQueueTheme.objects.get(theme=self.instance.persona) eq_(rqt.dupe_persona, theme.persona)
def test_name_unique_multiple_locale_conflicts(self): name = {'name_en-us': 'English', 'name_es': u'Español'} data = self.get_dict(**name) Addon.objects.create( type=amo.ADDON_PERSONA, status=amo.STATUS_PUBLIC, name={'en-us': 'English', 'es': u'Español'}) self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert not self.form.is_valid() assert self.form.errors == { 'name': [ 'This name is already in use. Please choose another.' ] }
def test_reupload_no_footer(self, save_persona_image_mock, create_persona_preview_images_mock, make_checksum_mock): make_checksum_mock.return_value = "checksumbeforeyouwrecksome" data = self.get_dict(header_hash="y0l0", footer_hash="") self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() dst = os.path.join(user_media_path("addons"), str(self.instance.id)) header_src = os.path.join(settings.TMP_PATH, "persona_header", u"y0l0") assert save_persona_image_mock.mock_calls == ( [mock.call(src=header_src, full_dst=os.path.join(dst, "pending_header.png"))] ) rqt = RereviewQueueTheme.objects.filter(theme=self.instance.persona) assert rqt.count() == 1 assert rqt[0].header == "pending_header.png" assert rqt[0].footer == "" assert not rqt[0].dupe_persona
def save_success(self): other_cat = Category.objects.create(type=amo.ADDON_PERSONA) self.data = { "accentcolor": "#EFF0FF", "category": other_cat.id, "license": amo.LICENSE_CC_BY_NC_SA.id, "slug": "swag-lifestyle", "tags": "ag", "textcolor": "#CACACA", "name_en-us": "All Day I Dream About Swag", "description_en-us": "ADIDAS", } self.form = EditThemeForm(self.data, request=self.request, instance=self.instance) # Compare form initial data with post data. eq_data = self.get_dict() for k in [k for k in self.form.initial.keys() if k not in ["name", "description"]]: assert self.form.initial[k] == eq_data[k] assert self.form.data == self.data assert self.form.is_valid(), self.form.errors self.form.save()
class TestEditThemeForm(TestCase): fixtures = ['base/user_2519'] def setUp(self): super(TestEditThemeForm, self).setUp() self.populate() self.request = mock.Mock() self.request.user = mock.Mock() self.request.user.groups_list = [] self.request.user.username = '******' self.request.user.name = 'Sir Swag A Lot' self.request.user.is_authenticated.return_value = True def populate(self): self.instance = Addon.objects.create(type=amo.ADDON_PERSONA, status=amo.STATUS_PUBLIC, slug='swag-overload', name='Bands Make Me Dance', description='tha description') self.cat = Category.objects.create(type=amo.ADDON_PERSONA, db_name='xxxx') self.instance.addoncategory_set.create(category=self.cat) self.license = amo.LICENSE_CC_BY.id self.theme = Persona.objects.create(persona_id=0, addon_id=self.instance.id, license=self.license, accentcolor='C0FFEE', textcolor='EFFFFF') Tag(tag_text='sw').save_tag(self.instance) Tag(tag_text='ag').save_tag(self.instance) def get_dict(self, **kw): data = { 'accentcolor': '#C0FFEE', 'category': self.cat.id, 'license': self.license, 'slug': self.instance.slug, 'tags': 'ag, sw', 'textcolor': '#EFFFFF', 'name_en-us': unicode(self.instance.name), 'description_en-us': unicode(self.instance.description), } data.update(**kw) return data def test_initial(self): self.form = EditThemeForm(None, request=self.request, instance=self.instance) # Compare form initial data with post data. eq_data = self.get_dict() for k in [ k for k in self.form.initial.keys() if k not in ['name', 'description'] ]: assert self.form.initial[k] == eq_data[k] def save_success(self): other_cat = Category.objects.create(type=amo.ADDON_PERSONA) self.data = { 'accentcolor': '#EFF0FF', 'category': other_cat.id, 'license': amo.LICENSE_CC_BY_NC_SA.id, 'slug': 'swag-lifestyle', 'tags': 'ag', 'textcolor': '#CACACA', 'name_en-us': 'All Day I Dream About Swag', 'description_en-us': 'ADIDAS', } self.form = EditThemeForm(self.data, request=self.request, instance=self.instance) # Compare form initial data with post data. eq_data = self.get_dict() for k in [ k for k in self.form.initial.keys() if k not in ['name', 'description'] ]: assert self.form.initial[k] == eq_data[k] assert self.form.data == self.data assert self.form.is_valid(), self.form.errors self.form.save() def test_success(self): self.save_success() self.instance = self.instance.reload() assert unicode(self.instance.persona.accentcolor) == ( self.data['accentcolor'].lstrip('#')) assert self.instance.categories.all()[0].id == self.data['category'] assert self.instance.persona.license == self.data['license'] assert unicode(self.instance.name) == self.data['name_en-us'] assert unicode( self.instance.description) == (self.data['description_en-us']) self.assertSetEqual( set(self.instance.tags.values_list('tag_text', flat=True)), {self.data['tags']}) assert unicode(self.instance.persona.textcolor) == ( self.data['textcolor'].lstrip('#')) def test_success_twice(self): """Form should be just fine when POSTing twice.""" self.save_success() self.form.save() def test_localize_name_description(self): data = self.get_dict(name_de='name_de', description_de='description_de') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid(), self.form.errors self.form.save() @mock.patch('olympia.addons.tasks.make_checksum') @mock.patch('olympia.addons.tasks.create_persona_preview_images') @mock.patch('olympia.addons.tasks.save_persona_image') def test_reupload(self, save_persona_image_mock, create_persona_preview_images_mock, make_checksum_mock): make_checksum_mock.return_value = 'checksumbeforeyouwrecksome' data = self.get_dict(header_hash='y0l0') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() dst = os.path.join(user_media_path('addons'), str(self.instance.id)) header_src = os.path.join(settings.TMP_PATH, 'persona_header', u'y0l0') assert save_persona_image_mock.mock_calls == ([ mock.call(src=header_src, full_dst=os.path.join(dst, 'pending_header.png')) ]) rqt = RereviewQueueTheme.objects.filter(theme=self.instance.persona) assert rqt.count() == 1 assert rqt[0].header == 'pending_header.png' assert not rqt[0].dupe_persona @mock.patch('olympia.addons.tasks.create_persona_preview_images', new=mock.Mock) @mock.patch('olympia.addons.tasks.save_persona_image', new=mock.Mock) @mock.patch('olympia.addons.tasks.make_checksum') def test_reupload_duplicate(self, make_checksum_mock): make_checksum_mock.return_value = 'checksumbeforeyouwrecksome' theme = amo.tests.addon_factory(type=amo.ADDON_PERSONA) theme.persona.checksum = 'checksumbeforeyouwrecksome' theme.persona.save() data = self.get_dict(header_hash='head') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() rqt = RereviewQueueTheme.objects.get(theme=self.instance.persona) assert rqt.dupe_persona == theme.persona @mock.patch('olympia.addons.tasks.make_checksum') @mock.patch('olympia.addons.tasks.create_persona_preview_images', new=mock.Mock) @mock.patch('olympia.addons.tasks.save_persona_image', new=mock.Mock) def test_reupload_legacy_header_only(self, make_checksum_mock): """ STR the bug this test fixes: - Reupload a legacy theme (/w footer == leg.png) legacy, header only. - The header would get saved as 'pending_header.png'. - The footer would get saved as 'footer.png'. - On approving, it would see 'footer.png' !== 'leg.png' - It run move_stored_file('footer.png', 'leg.png'). - But footer.png does not exist. BAM BUG. Footer has been removed in Issue #5379 https://github.com/mozilla/addons-server/issues/5379 """ make_checksum_mock.return_value = 'comechecksome' self.theme.header = 'Legacy-header3H.png' self.theme.save() data = self.get_dict(header_hash='arthro') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() rqt = RereviewQueueTheme.objects.get() assert rqt.header == 'pending_header.png'
class TestEditThemeForm(TestCase): fixtures = ["base/user_2519"] def setUp(self): super(TestEditThemeForm, self).setUp() self.populate() self.request = mock.Mock() self.request.user = mock.Mock() self.request.user.groups_list = [] self.request.user.username = "******" self.request.user.name = "Sir Swag A Lot" self.request.user.is_authenticated.return_value = True def populate(self): self.instance = Addon.objects.create( type=amo.ADDON_PERSONA, status=amo.STATUS_PUBLIC, slug="swag-overload", name="Bands Make Me Dance", description="tha description", ) self.cat = Category.objects.create(type=amo.ADDON_PERSONA, name="xxxx") self.instance.addoncategory_set.create(category=self.cat) self.license = amo.LICENSE_CC_BY.id self.theme = Persona.objects.create( persona_id=0, addon_id=self.instance.id, license=self.license, accentcolor="C0FFEE", textcolor="EFFFFF" ) Tag(tag_text="sw").save_tag(self.instance) Tag(tag_text="ag").save_tag(self.instance) def get_dict(self, **kw): data = { "accentcolor": "#C0FFEE", "category": self.cat.id, "license": self.license, "slug": self.instance.slug, "tags": "ag, sw", "textcolor": "#EFFFFF", "name_en-us": unicode(self.instance.name), "description_en-us": unicode(self.instance.description), } data.update(**kw) return data def test_initial(self): self.form = EditThemeForm(None, request=self.request, instance=self.instance) # Compare form initial data with post data. eq_data = self.get_dict() for k in [k for k in self.form.initial.keys() if k not in ["name", "description"]]: assert self.form.initial[k] == eq_data[k] def save_success(self): other_cat = Category.objects.create(type=amo.ADDON_PERSONA) self.data = { "accentcolor": "#EFF0FF", "category": other_cat.id, "license": amo.LICENSE_CC_BY_NC_SA.id, "slug": "swag-lifestyle", "tags": "ag", "textcolor": "#CACACA", "name_en-us": "All Day I Dream About Swag", "description_en-us": "ADIDAS", } self.form = EditThemeForm(self.data, request=self.request, instance=self.instance) # Compare form initial data with post data. eq_data = self.get_dict() for k in [k for k in self.form.initial.keys() if k not in ["name", "description"]]: assert self.form.initial[k] == eq_data[k] assert self.form.data == self.data assert self.form.is_valid(), self.form.errors self.form.save() def test_success(self): self.save_success() self.instance = self.instance.reload() assert unicode(self.instance.persona.accentcolor) == (self.data["accentcolor"].lstrip("#")) assert self.instance.categories.all()[0].id == self.data["category"] assert self.instance.persona.license == self.data["license"] assert unicode(self.instance.name) == self.data["name_en-us"] assert unicode(self.instance.description) == (self.data["description_en-us"]) self.assertSetEqual(self.instance.tags.values_list("tag_text", flat=True), [self.data["tags"]]) assert unicode(self.instance.persona.textcolor) == (self.data["textcolor"].lstrip("#")) def test_success_twice(self): """Form should be just fine when POSTing twice.""" self.save_success() self.form.save() def test_name_unique(self): data = self.get_dict(**{"name_en-us": "Bands Make You Dance"}) Addon.objects.create(type=amo.ADDON_PERSONA, status=amo.STATUS_PUBLIC, name=data["name_en-us"]) self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert not self.form.is_valid() assert self.form.errors == {"name": [("en-us", "This name is already in use. Please choose another.")]} def test_localize_name_description(self): data = self.get_dict(name_de="name_de", description_de="description_de") self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid(), self.form.errors self.form.save() @mock.patch("olympia.addons.tasks.make_checksum") @mock.patch("olympia.addons.tasks.create_persona_preview_images") @mock.patch("olympia.addons.tasks.save_persona_image") def test_reupload(self, save_persona_image_mock, create_persona_preview_images_mock, make_checksum_mock): make_checksum_mock.return_value = "checksumbeforeyouwrecksome" data = self.get_dict(header_hash="y0l0", footer_hash="abab") self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() dst = os.path.join(user_media_path("addons"), str(self.instance.id)) header_src = os.path.join(settings.TMP_PATH, "persona_header", u"y0l0") footer_src = os.path.join(settings.TMP_PATH, "persona_footer", u"abab") assert save_persona_image_mock.mock_calls == ( [ mock.call(src=header_src, full_dst=os.path.join(dst, "pending_header.png")), mock.call(src=footer_src, full_dst=os.path.join(dst, "pending_footer.png")), ] ) rqt = RereviewQueueTheme.objects.filter(theme=self.instance.persona) assert rqt.count() == 1 assert rqt[0].header == "pending_header.png" assert rqt[0].footer == "pending_footer.png" assert not rqt[0].dupe_persona @mock.patch("olympia.addons.tasks.create_persona_preview_images", new=mock.Mock) @mock.patch("olympia.addons.tasks.save_persona_image", new=mock.Mock) @mock.patch("olympia.addons.tasks.make_checksum") def test_reupload_duplicate(self, make_checksum_mock): make_checksum_mock.return_value = "checksumbeforeyouwrecksome" theme = amo.tests.addon_factory(type=amo.ADDON_PERSONA) theme.persona.checksum = "checksumbeforeyouwrecksome" theme.persona.save() data = self.get_dict(header_hash="head", footer_hash="foot") self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() rqt = RereviewQueueTheme.objects.get(theme=self.instance.persona) assert rqt.dupe_persona == theme.persona @mock.patch("olympia.addons.tasks.make_checksum", new=mock.Mock) @mock.patch("olympia.addons.tasks.create_persona_preview_images", new=mock.Mock) @mock.patch("olympia.addons.tasks.save_persona_image", new=mock.Mock) def test_reupload_legacy_header_only(self): """ STR the bug this test fixes: - Reupload a legacy theme (/w footer == leg.png) legacy, header only. - The header would get saved as 'pending_header.png'. - The footer would get saved as 'footer.png'. - On approving, it would see 'footer.png' !== 'leg.png' - It run move_stored_file('footer.png', 'leg.png'). - But footer.png does not exist. BAM BUG. """ self.theme.header = "Legacy-header3H.png" self.theme.footer = "Legacy-footer3H-Copy.jpg" self.theme.save() data = self.get_dict(header_hash="arthro") self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() rqt = RereviewQueueTheme.objects.get() assert rqt.header == "pending_header.png" assert rqt.footer == "Legacy-footer3H-Copy.jpg" @mock.patch("olympia.addons.tasks.make_checksum") @mock.patch("olympia.addons.tasks.create_persona_preview_images") @mock.patch("olympia.addons.tasks.save_persona_image") def test_reupload_no_footer(self, save_persona_image_mock, create_persona_preview_images_mock, make_checksum_mock): make_checksum_mock.return_value = "checksumbeforeyouwrecksome" data = self.get_dict(header_hash="y0l0", footer_hash="") self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() dst = os.path.join(user_media_path("addons"), str(self.instance.id)) header_src = os.path.join(settings.TMP_PATH, "persona_header", u"y0l0") assert save_persona_image_mock.mock_calls == ( [mock.call(src=header_src, full_dst=os.path.join(dst, "pending_header.png"))] ) rqt = RereviewQueueTheme.objects.filter(theme=self.instance.persona) assert rqt.count() == 1 assert rqt[0].header == "pending_header.png" assert rqt[0].footer == "" assert not rqt[0].dupe_persona
class TestEditThemeForm(TestCase): fixtures = ['base/user_2519'] def setUp(self): super(TestEditThemeForm, self).setUp() self.populate() self.request = mock.Mock() self.request.user = mock.Mock() self.request.user.groups_list = [] self.request.user.username = '******' self.request.user.name = 'Sir Swag A Lot' self.request.user.is_authenticated.return_value = True def populate(self): self.instance = Addon.objects.create( type=amo.ADDON_PERSONA, status=amo.STATUS_PUBLIC, slug='swag-overload', name='Bands Make Me Dance', description='tha description') self.cat = Category.objects.create( type=amo.ADDON_PERSONA, name='xxxx') self.instance.addoncategory_set.create(category=self.cat) self.license = amo.LICENSE_CC_BY.id self.theme = Persona.objects.create( persona_id=0, addon_id=self.instance.id, license=self.license, accentcolor='C0FFEE', textcolor='EFFFFF') Tag(tag_text='sw').save_tag(self.instance) Tag(tag_text='ag').save_tag(self.instance) def get_dict(self, **kw): data = { 'accentcolor': '#C0FFEE', 'category': self.cat.id, 'license': self.license, 'slug': self.instance.slug, 'tags': 'ag, sw', 'textcolor': '#EFFFFF', 'name_en-us': unicode(self.instance.name), 'description_en-us': unicode(self.instance.description), } data.update(**kw) return data def test_initial(self): self.form = EditThemeForm(None, request=self.request, instance=self.instance) # Compare form initial data with post data. eq_data = self.get_dict() for k in [k for k in self.form.initial.keys() if k not in ['name', 'description']]: assert self.form.initial[k] == eq_data[k] def save_success(self): other_cat = Category.objects.create(type=amo.ADDON_PERSONA) self.data = { 'accentcolor': '#EFF0FF', 'category': other_cat.id, 'license': amo.LICENSE_CC_BY_NC_SA.id, 'slug': 'swag-lifestyle', 'tags': 'ag', 'textcolor': '#CACACA', 'name_en-us': 'All Day I Dream About Swag', 'description_en-us': 'ADIDAS', } self.form = EditThemeForm(self.data, request=self.request, instance=self.instance) # Compare form initial data with post data. eq_data = self.get_dict() for k in [k for k in self.form.initial.keys() if k not in ['name', 'description']]: assert self.form.initial[k] == eq_data[k] assert self.form.data == self.data assert self.form.is_valid(), self.form.errors self.form.save() def test_success(self): self.save_success() self.instance = self.instance.reload() assert unicode(self.instance.persona.accentcolor) == ( self.data['accentcolor'].lstrip('#')) assert self.instance.categories.all()[0].id == self.data['category'] assert self.instance.persona.license == self.data['license'] assert unicode(self.instance.name) == self.data['name_en-us'] assert unicode(self.instance.description) == ( self.data['description_en-us']) self.assertSetEqual( set(self.instance.tags.values_list('tag_text', flat=True)), {self.data['tags']}) assert unicode(self.instance.persona.textcolor) == ( self.data['textcolor'].lstrip('#')) def test_success_twice(self): """Form should be just fine when POSTing twice.""" self.save_success() self.form.save() def test_localize_name_description(self): data = self.get_dict(name_de='name_de', description_de='description_de') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid(), self.form.errors self.form.save() @mock.patch('olympia.addons.tasks.make_checksum') @mock.patch('olympia.addons.tasks.create_persona_preview_images') @mock.patch('olympia.addons.tasks.save_persona_image') def test_reupload(self, save_persona_image_mock, create_persona_preview_images_mock, make_checksum_mock): make_checksum_mock.return_value = 'checksumbeforeyouwrecksome' data = self.get_dict(header_hash='y0l0', footer_hash='abab') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() dst = os.path.join(user_media_path('addons'), str(self.instance.id)) header_src = os.path.join(settings.TMP_PATH, 'persona_header', u'y0l0') footer_src = os.path.join(settings.TMP_PATH, 'persona_footer', u'abab') assert save_persona_image_mock.mock_calls == ( [mock.call(src=header_src, full_dst=os.path.join(dst, 'pending_header.png')), mock.call(src=footer_src, full_dst=os.path.join(dst, 'pending_footer.png'))]) rqt = RereviewQueueTheme.objects.filter(theme=self.instance.persona) assert rqt.count() == 1 assert rqt[0].header == 'pending_header.png' assert rqt[0].footer == 'pending_footer.png' assert not rqt[0].dupe_persona @mock.patch('olympia.addons.tasks.create_persona_preview_images', new=mock.Mock) @mock.patch('olympia.addons.tasks.save_persona_image', new=mock.Mock) @mock.patch('olympia.addons.tasks.make_checksum') def test_reupload_duplicate(self, make_checksum_mock): make_checksum_mock.return_value = 'checksumbeforeyouwrecksome' theme = amo.tests.addon_factory(type=amo.ADDON_PERSONA) theme.persona.checksum = 'checksumbeforeyouwrecksome' theme.persona.save() data = self.get_dict(header_hash='head', footer_hash='foot') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() rqt = RereviewQueueTheme.objects.get(theme=self.instance.persona) assert rqt.dupe_persona == theme.persona @mock.patch('olympia.addons.tasks.make_checksum') @mock.patch('olympia.addons.tasks.create_persona_preview_images', new=mock.Mock) @mock.patch('olympia.addons.tasks.save_persona_image', new=mock.Mock) def test_reupload_legacy_header_only(self, make_checksum_mock): """ STR the bug this test fixes: - Reupload a legacy theme (/w footer == leg.png) legacy, header only. - The header would get saved as 'pending_header.png'. - The footer would get saved as 'footer.png'. - On approving, it would see 'footer.png' !== 'leg.png' - It run move_stored_file('footer.png', 'leg.png'). - But footer.png does not exist. BAM BUG. """ make_checksum_mock.return_value = 'comechecksome' self.theme.header = 'Legacy-header3H.png' self.theme.footer = 'Legacy-footer3H-Copy.jpg' self.theme.save() data = self.get_dict(header_hash='arthro') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() rqt = RereviewQueueTheme.objects.get() assert rqt.header == 'pending_header.png' assert rqt.footer == 'Legacy-footer3H-Copy.jpg' @mock.patch('olympia.addons.tasks.make_checksum') @mock.patch('olympia.addons.tasks.create_persona_preview_images') @mock.patch('olympia.addons.tasks.save_persona_image') def test_reupload_no_footer(self, save_persona_image_mock, create_persona_preview_images_mock, make_checksum_mock): make_checksum_mock.return_value = 'checksumbeforeyouwrecksome' data = self.get_dict(header_hash='y0l0', footer_hash='') self.form = EditThemeForm(data, request=self.request, instance=self.instance) assert self.form.is_valid() self.form.save() dst = os.path.join(user_media_path('addons'), str(self.instance.id)) header_src = os.path.join(settings.TMP_PATH, 'persona_header', u'y0l0') assert save_persona_image_mock.mock_calls == ( [mock.call(src=header_src, full_dst=os.path.join(dst, 'pending_header.png'))]) rqt = RereviewQueueTheme.objects.filter(theme=self.instance.persona) assert rqt.count() == 1 assert rqt[0].header == 'pending_header.png' assert rqt[0].footer == '' assert not rqt[0].dupe_persona