Example #1
0
    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']]:
            eq_(self.form.initial[k], eq_data[k])

        eq_(self.form.data, self.data)
        eq_(self.form.is_valid(), True, self.form.errors)
        self.form.save()
Example #2
0
    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)
        eq_(self.form.is_valid(), True)
        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')

        eq_(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)
        eq_(rqt.count(), 1)
        eq_(rqt[0].header, 'pending_header.png')
        eq_(rqt[0].footer, 'pending_footer.png')
        assert not rqt[0].dupe_persona
Example #3
0
 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)
     eq_(self.form.is_valid(), True, self.form.errors)
     self.form.save()
Example #4
0
    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')
Example #5
0
    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])
Example #6
0
 def test_name_unique(self):
     data = self.get_dict(name='Bands Make You Dance')
     Addon.objects.create(type=amo.ADDON_PERSONA,
         status=amo.STATUS_PUBLIC, name=data['name'])
     self.form = EditThemeForm(data, request=self.request,
                               instance=self.instance)
     eq_(self.form.is_valid(), False)
     eq_(self.form.errors,
         {'name': ['This name is already in use. Please choose another.']})
Example #7
0
    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)
Example #8
0
    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])
Example #9
0
    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']]:
            eq_(self.form.initial[k], eq_data[k])

        eq_(self.form.data, self.data)
        eq_(self.form.is_valid(), True, self.form.errors)
        self.form.save()
Example #10
0
    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)
        eq_(self.form.is_valid(), True)
        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')

        eq_(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)
        eq_(rqt.count(), 1)
        eq_(rqt[0].header, 'pending_header.png')
        eq_(rqt[0].footer, 'pending_footer.png')
        assert not rqt[0].dupe_persona
Example #11
0
 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)
     eq_(self.form.is_valid(), True, self.form.errors)
     self.form.save()
Example #12
0
 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,
         'name': 'All Day I Dream About Swag',
         'slug': 'swag-lifestyle',
         'summary': 'ADIDAS',
         'tags': 'ag',
         'textcolor': '#CACACA'
     }
     self.form = EditThemeForm(self.data, request=self.request,
                               instance=self.instance)
     eq_(self.form.initial, self.get_dict())
     eq_(self.form.data, self.data)
     eq_(self.form.is_valid(), True, self.form.errors)
     self.form.save()
Example #13
0
 def test_name_unique(self):
     data = self.get_dict(name='Bands Make You Dance')
     Addon.objects.create(type=amo.ADDON_PERSONA, status=amo.STATUS_PUBLIC,
                          name=data['name'])
     self.form = EditThemeForm(data, request=self.request,
                               instance=self.instance)
     eq_(self.form.is_valid(), False)
     eq_(self.form.errors,
         {'name': ['This name is already in use. Please choose another.']})
Example #14
0
    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)
Example #15
0
 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,
         'name': 'All Day I Dream About Swag',
         'slug': 'swag-lifestyle',
         'summary': 'ADIDAS',
         'tags': 'ag',
         'textcolor': '#CACACA'
     }
     self.form = EditThemeForm(self.data, request=self.request,
                               instance=self.instance)
     eq_(self.form.initial, self.get_dict())
     eq_(self.form.data, self.data)
     eq_(self.form.is_valid(), True, self.form.errors)
     self.form.save()
Example #16
0
    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"]]:
            eq_(self.form.initial[k], eq_data[k])

        eq_(self.form.data, self.data)
        eq_(self.form.is_valid(), True, self.form.errors)
        self.form.save()
Example #17
0
    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")
Example #18
0
class TestEditThemeForm(amo.tests.TestCase):
    fixtures = ['base/apps', 'base/user_2519']

    def setUp(self):
        self.populate()
        self.request = mock.Mock()
        self.request.groups = ()
        self.request.amo_user = mock.Mock()
        self.request.amo_user.username = '******'
        self.request.amo_user.name = 'Sir Swag A Lot'
        self.request.amo_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',
            summary='tha summary')
        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
        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,
            'name': unicode(self.instance.name),
            'slug': self.instance.slug,
            'summary': self.instance.summary,
            'tags': 'ag, sw',
            'textcolor': '#EFFFFF'
        }
        data.update(**kw)
        return data

    def test_initial(self):
        self.form = EditThemeForm(None, request=self.request,
                                  instance=self.instance)
        eq_(self.form.initial, self.get_dict())

    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,
            'name': 'All Day I Dream About Swag',
            'slug': 'swag-lifestyle',
            'summary': 'ADIDAS',
            'tags': 'ag',
            'textcolor': '#CACACA'
        }
        self.form = EditThemeForm(self.data, request=self.request,
                                  instance=self.instance)
        eq_(self.form.initial, self.get_dict())
        eq_(self.form.data, self.data)
        eq_(self.form.is_valid(), True, self.form.errors)
        self.form.save()

    def test_success(self):
        self.save_success()
        self.instance = self.instance.reload()
        eq_(unicode(self.instance.persona.accentcolor),
            self.data['accentcolor'].lstrip('#'))
        eq_(self.instance.categories.all()[0].id, self.data['category'])
        eq_(self.instance.persona.license, self.data['license'])
        eq_(unicode(self.instance.name), self.data['name'])
        eq_(unicode(self.instance.summary), self.data['summary'])
        self.assertSetEqual(
            self.instance.tags.values_list('tag_text', flat=True),
            [self.data['tags']])
        eq_(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='Bands Make You Dance')
        Addon.objects.create(type=amo.ADDON_PERSONA, status=amo.STATUS_PUBLIC,
                             name=data['name'])
        self.form = EditThemeForm(data, request=self.request,
                                  instance=self.instance)
        eq_(self.form.is_valid(), False)
        eq_(self.form.errors,
            {'name': ['This name is already in use. Please choose another.']})

    @mock.patch('addons.tasks.make_checksum')
    @mock.patch('addons.tasks.create_persona_preview_images')
    @mock.patch('addons.tasks.save_persona_image')
    def test_reupload(self, save_persona_image_mock,
                      create_persona_preview_images_mock,
                      make_checksum_mock):
        data = self.get_dict(header_hash='y0l0', footer_hash='abab')
        self.form = EditThemeForm(data, request=self.request,
                                  instance=self.instance)
        eq_(self.form.is_valid(), True)
        self.form.save()

        dst = os.path.join(settings.ADDONS_PATH, 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')

        eq_(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)
        eq_(rqt.count(), 1)
        eq_(rqt[0].header, 'pending_header.png')
        eq_(rqt[0].footer, 'pending_footer.png')
        assert not rqt[0].dupe_persona

    @mock.patch('addons.tasks.make_checksum')
    @mock.patch('addons.tasks.create_persona_preview_images')
    @mock.patch('addons.tasks.save_persona_image')
    def test_reupload_duplicate(self, save_persona_image_mock,
                                create_persona_preview_images_mock,
                                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)
Example #19
0
class TestEditThemeForm(amo.tests.TestCase):
    fixtures = ['base/user_2519']

    def setUp(self):
        self.populate()
        self.request = mock.Mock()
        self.request.groups = ()
        self.request.amo_user = mock.Mock()
        self.request.amo_user.username = '******'
        self.request.amo_user.name = 'Sir Swag A Lot'
        self.request.amo_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']]:
            eq_(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']]:
            eq_(self.form.initial[k], eq_data[k])

        eq_(self.form.data, self.data)
        eq_(self.form.is_valid(), True, self.form.errors)
        self.form.save()

    def test_success(self):
        self.save_success()
        self.instance = self.instance.reload()
        eq_(unicode(self.instance.persona.accentcolor),
            self.data['accentcolor'].lstrip('#'))
        eq_(self.instance.categories.all()[0].id, self.data['category'])
        eq_(self.instance.persona.license, self.data['license'])
        eq_(unicode(self.instance.name), self.data['name_en-us'])
        eq_(unicode(self.instance.description), self.data['description_en-us'])
        self.assertSetEqual(
            self.instance.tags.values_list('tag_text', flat=True),
            [self.data['tags']])
        eq_(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)
        eq_(self.form.is_valid(), False)
        eq_(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)
        eq_(self.form.is_valid(), True, self.form.errors)
        self.form.save()

    @mock.patch('addons.tasks.make_checksum')
    @mock.patch('addons.tasks.create_persona_preview_images')
    @mock.patch('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)
        eq_(self.form.is_valid(), True)
        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')

        eq_(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)
        eq_(rqt.count(), 1)
        eq_(rqt[0].header, 'pending_header.png')
        eq_(rqt[0].footer, 'pending_footer.png')
        assert not rqt[0].dupe_persona

    @mock.patch('addons.tasks.create_persona_preview_images', new=mock.Mock)
    @mock.patch('addons.tasks.save_persona_image', new=mock.Mock)
    @mock.patch('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)
        eq_(self.form.is_valid(), True)
        self.form.save()

        rqt = RereviewQueueTheme.objects.get(theme=self.instance.persona)
        eq_(rqt.dupe_persona, theme.persona)

    @mock.patch('addons.tasks.make_checksum', new=mock.Mock)
    @mock.patch('addons.tasks.create_persona_preview_images', new=mock.Mock)
    @mock.patch('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)
        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')
Example #20
0
class TestEditThemeForm(amo.tests.TestCase):
    fixtures = ["base/user_2519"]

    def setUp(self):
        self.populate()
        self.request = mock.Mock()
        self.request.groups = ()
        self.request.amo_user = mock.Mock()
        self.request.amo_user.username = "******"
        self.request.amo_user.name = "Sir Swag A Lot"
        self.request.amo_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"]]:
            eq_(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"]]:
            eq_(self.form.initial[k], eq_data[k])

        eq_(self.form.data, self.data)
        eq_(self.form.is_valid(), True, self.form.errors)
        self.form.save()

    def test_success(self):
        self.save_success()
        self.instance = self.instance.reload()
        eq_(unicode(self.instance.persona.accentcolor), self.data["accentcolor"].lstrip("#"))
        eq_(self.instance.categories.all()[0].id, self.data["category"])
        eq_(self.instance.persona.license, self.data["license"])
        eq_(unicode(self.instance.name), self.data["name_en-us"])
        eq_(unicode(self.instance.description), self.data["description_en-us"])
        self.assertSetEqual(self.instance.tags.values_list("tag_text", flat=True), [self.data["tags"]])
        eq_(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)
        eq_(self.form.is_valid(), False)
        eq_(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)
        eq_(self.form.is_valid(), True, self.form.errors)
        self.form.save()

    @mock.patch("addons.tasks.make_checksum")
    @mock.patch("addons.tasks.create_persona_preview_images")
    @mock.patch("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)
        eq_(self.form.is_valid(), True)
        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")

        eq_(
            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)
        eq_(rqt.count(), 1)
        eq_(rqt[0].header, "pending_header.png")
        eq_(rqt[0].footer, "pending_footer.png")
        assert not rqt[0].dupe_persona

    @mock.patch("addons.tasks.create_persona_preview_images", new=mock.Mock)
    @mock.patch("addons.tasks.save_persona_image", new=mock.Mock)
    @mock.patch("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)
        eq_(self.form.is_valid(), True)
        self.form.save()

        rqt = RereviewQueueTheme.objects.get(theme=self.instance.persona)
        eq_(rqt.dupe_persona, theme.persona)

    @mock.patch("addons.tasks.make_checksum", new=mock.Mock)
    @mock.patch("addons.tasks.create_persona_preview_images", new=mock.Mock)
    @mock.patch("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)
        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")
Example #21
0
 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)
     eq_(self.form.is_valid(), False)
     eq_(self.form.errors, {"name": [("en-us", "This name is already in use. Please choose another.")]})
Example #22
0
class TestEditThemeForm(amo.tests.TestCase):
    fixtures = ['base/user_2519']

    def setUp(self):
        super(TestEditThemeForm, self).setUp()
        self.populate()
        self.request = mock.Mock()
        self.request.groups = ()
        self.request.user = mock.Mock()
        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']]:
            eq_(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']]:
            eq_(self.form.initial[k], eq_data[k])

        eq_(self.form.data, self.data)
        eq_(self.form.is_valid(), True, self.form.errors)
        self.form.save()

    def test_success(self):
        self.save_success()
        self.instance = self.instance.reload()
        eq_(unicode(self.instance.persona.accentcolor),
            self.data['accentcolor'].lstrip('#'))
        eq_(self.instance.categories.all()[0].id, self.data['category'])
        eq_(self.instance.persona.license, self.data['license'])
        eq_(unicode(self.instance.name), self.data['name_en-us'])
        eq_(unicode(self.instance.description), self.data['description_en-us'])
        self.assertSetEqual(
            self.instance.tags.values_list('tag_text', flat=True),
            [self.data['tags']])
        eq_(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)
        eq_(self.form.is_valid(), False)
        eq_(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)
        eq_(self.form.is_valid(), True, self.form.errors)
        self.form.save()

    @mock.patch('addons.tasks.make_checksum')
    @mock.patch('addons.tasks.create_persona_preview_images')
    @mock.patch('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)
        eq_(self.form.is_valid(), True)
        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')

        eq_(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)
        eq_(rqt.count(), 1)
        eq_(rqt[0].header, 'pending_header.png')
        eq_(rqt[0].footer, 'pending_footer.png')
        assert not rqt[0].dupe_persona

    @mock.patch('addons.tasks.create_persona_preview_images', new=mock.Mock)
    @mock.patch('addons.tasks.save_persona_image', new=mock.Mock)
    @mock.patch('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)
        eq_(self.form.is_valid(), True)
        self.form.save()

        rqt = RereviewQueueTheme.objects.get(theme=self.instance.persona)
        eq_(rqt.dupe_persona, theme.persona)

    @mock.patch('addons.tasks.make_checksum', new=mock.Mock)
    @mock.patch('addons.tasks.create_persona_preview_images', new=mock.Mock)
    @mock.patch('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)
        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')

    @mock.patch('addons.tasks.make_checksum')
    @mock.patch('addons.tasks.create_persona_preview_images')
    @mock.patch('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)
        eq_(self.form.is_valid(), True)
        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')

        eq_(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)
        eq_(rqt.count(), 1)
        eq_(rqt[0].header, 'pending_header.png')
        eq_(rqt[0].footer, '')
        assert not rqt[0].dupe_persona
Example #23
0
 def test_initial(self):
     self.form = EditThemeForm(None, request=self.request,
                               instance=self.instance)
     eq_(self.form.initial, self.get_dict())
Example #24
0
class TestEditThemeForm(amo.tests.TestCase):
    fixtures = ['base/apps', 'base/user_2519']

    def setUp(self):
        self.populate()
        self.request = mock.Mock()
        self.request.groups = ()
        self.request.amo_user = mock.Mock()
        self.request.amo_user.username = '******'
        self.request.amo_user.name = 'Sir Swag A Lot'
        self.request.amo_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', summary='tha summary')
        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
        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,
            'name': unicode(self.instance.name),
            'slug': self.instance.slug,
            'summary': self.instance.summary.id,
            'tags': 'ag, sw',
            'textcolor': '#EFFFFF'
        }
        data.update(**kw)
        return data

    def test_initial(self):
        self.form = EditThemeForm(None, request=self.request,
                                  instance=self.instance)
        eq_(self.form.initial, self.get_dict())

    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,
            'name': 'All Day I Dream About Swag',
            'slug': 'swag-lifestyle',
            'summary': 'ADIDAS',
            'tags': 'ag',
            'textcolor': '#CACACA'
        }
        self.form = EditThemeForm(self.data, request=self.request,
                                  instance=self.instance)
        eq_(self.form.initial, self.get_dict())
        eq_(self.form.data, self.data)
        eq_(self.form.is_valid(), True, self.form.errors)
        self.form.save()

    def test_success(self):
        self.save_success()
        self.instance = self.instance.reload()
        eq_(unicode(self.instance.persona.accentcolor),
            self.data['accentcolor'].lstrip('#'))
        eq_(self.instance.categories.all()[0].id, self.data['category'])
        eq_(self.instance.persona.license, self.data['license'])
        eq_(unicode(self.instance.name), self.data['name'])
        eq_(unicode(self.instance.summary), self.data['summary'])
        self.assertSetEqual(
            self.instance.tags.values_list('tag_text', flat=True),
            [self.data['tags']])
        eq_(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='Bands Make You Dance')
        Addon.objects.create(type=amo.ADDON_PERSONA,
            status=amo.STATUS_PUBLIC, name=data['name'])
        self.form = EditThemeForm(data, request=self.request,
                                  instance=self.instance)
        eq_(self.form.is_valid(), False)
        eq_(self.form.errors,
            {'name': ['This name is already in use. Please choose another.']})
Example #25
0
 def test_initial(self):
     self.form = EditThemeForm(None, request=self.request,
                               instance=self.instance)
     eq_(self.form.initial, self.get_dict())
Example #26
0
class TestEditThemeForm(amo.tests.TestCase):
    fixtures = ['base/apps', 'base/user_2519']

    def setUp(self):
        self.populate()
        self.request = mock.Mock()
        self.request.groups = ()
        self.request.amo_user = mock.Mock()
        self.request.amo_user.username = '******'
        self.request.amo_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', summary='tha summary')
        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
        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,
            'name': unicode(self.instance.name),
            'slug': self.instance.slug,
            'summary': self.instance.summary.id,
            'tags': 'ag, sw',
            'textcolor': '#EFFFFF'
        }
        data.update(**kw)
        return data

    def test_initial(self):
        self.form = EditThemeForm(None, request=self.request,
                                  instance=self.instance)
        eq_(self.form.initial, self.get_dict())

    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,
            'name': 'All Day I Dream About Swag',
            'slug': 'swag-lifestyle',
            'summary': 'ADIDAS',
            'tags': 'ag',
            'textcolor': '#CACACA'
        }
        self.form = EditThemeForm(self.data, request=self.request,
                                  instance=self.instance)
        eq_(self.form.initial, self.get_dict())
        eq_(self.form.data, self.data)
        eq_(self.form.is_valid(), True, self.form.errors)
        self.form.save()

    def test_success(self):
        self.save_success()
        self.instance = self.instance.reload()
        eq_(unicode(self.instance.persona.accentcolor),
            self.data['accentcolor'].lstrip('#'))
        eq_(self.instance.categories.all()[0].id, self.data['category'])
        eq_(self.instance.persona.license, self.data['license'])
        eq_(unicode(self.instance.name), self.data['name'])
        eq_(unicode(self.instance.summary), self.data['summary'])
        self.assertSetEqual(
            self.instance.tags.values_list('tag_text', flat=True),
            [self.data['tags']])
        eq_(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='Bands Make You Dance')
        Addon.objects.create(type=amo.ADDON_PERSONA,
            status=amo.STATUS_PUBLIC, name=data['name'])
        self.form = EditThemeForm(data, request=self.request,
                                  instance=self.instance)
        eq_(self.form.is_valid(), False)
        eq_(self.form.errors,
            {'name': ['This name is already in use. Please choose another.']})