def test_generate_hash(self, storage_mock): f = File() f.version = Version() # Mock remote storage to use a local file instead of a remote one. storage_mock.open = open filename = self.packaged_app_path('mozball.zip') assert f.generate_hash(filename).startswith('sha256:ad85d6316166d4')
def fake_object(self, data): """Create a fake instance of Webapp and related models from ES data.""" is_packaged = data['app_type'] != mkt.ADDON_WEBAPP_HOSTED is_privileged = data['app_type'] == mkt.ADDON_WEBAPP_PRIVILEGED obj = Webapp(id=data['id'], app_slug=data['app_slug'], is_packaged=is_packaged, icon_type='image/png') # Set relations and attributes we need on those relations. # The properties set on latest_version and current_version differ # because we are only setting what the serializer is going to need. # In particular, latest_version.is_privileged needs to be set because # it's used by obj.app_type_id. obj.listed_authors = [] obj._current_version = Version() obj._current_version.addon = obj obj._current_version._developer_name = data['author'] obj._current_version.supported_locales = data['supported_locales'] obj._current_version.version = data['current_version'] obj._latest_version = Version() obj._latest_version.is_privileged = is_privileged obj._geodata = Geodata() obj.all_previews = [ Preview(id=p['id'], modified=self.to_datetime(p['modified']), filetype=p['filetype'], sizes=p.get('sizes', {})) for p in data['previews'] ] obj.categories = data['category'] obj.tags_list = data['tags'] obj._device_types = [DEVICE_TYPES[d] for d in data['device']] obj._is_disabled = data['is_disabled'] # Set base attributes on the "fake" app using the data from ES. self._attach_fields( obj, data, ('created', 'default_locale', 'guid', 'icon_hash', 'is_escalated', 'is_offline', 'last_updated', 'hosted_url', 'manifest_url', 'modified', 'premium_type', 'promo_img_hash', 'regions', 'reviewed', 'status')) # Attach translations for all translated attributes. self._attach_translations(obj, data, ('name', 'description', 'homepage', 'support_email', 'support_url')) if data.get('group_translations'): self._attach_translations(obj, data, ('group', )) # Feed group. else: obj.group_translations = None # Release notes target and source name differ (ES stores it as # release_notes but the db field we are emulating is called # releasenotes without the "_"). ESTranslationSerializerField.attach_translations( obj._current_version, data, 'release_notes', target_name='releasenotes') # Set attributes that have a different name in ES. obj.public_stats = data['has_public_stats'] # Override obj.get_excluded_region_ids() to just return the list of # regions stored in ES instead of making SQL queries. obj.get_excluded_region_ids = lambda: data['region_exclusions'] # Set up payments stuff to avoid extra queries later (we'll still make # some, because price info is not in ES). if obj.is_premium(): Webapp.attach_premiums([obj]) # Some methods below will need the raw data from ES, put it on obj. obj.es_data = data return obj
def test_developer_name(self): version = Version.objects.latest('id') version._developer_name = u'M€lâ' eq_(version.developer_name, u'M€lâ') eq_(Version(_developer_name=u'M€lâ').developer_name, u'M€lâ')
def _get_version(self, status): v = Version() v.all_files = [mock.Mock()] v.all_files[0].status = status return v
def test_generate_filename_ja(self): f = File() f.version = Version(version='0.1.7') f.version.addon = Webapp(name=u' フォクすけ といっしょ') eq_(f.generate_filename(), 'none-0.1.7.webapp')
def test_generate_webapp_fn_partial_non_ascii(self): f = File() f.version = Version(version='0.1.7') f.version.addon = Webapp(app_slug=u'myapp フォクすけ といっしょ') eq_(f.generate_filename(), 'myapp-0.1.7.webapp')
def fake_object(self, data): """Create a fake instance of Webapp and related models from ES data.""" is_packaged = data['app_type'] != amo.ADDON_WEBAPP_HOSTED is_privileged = data['app_type'] == amo.ADDON_WEBAPP_PRIVILEGED obj = Webapp(id=data['id'], app_slug=data['app_slug'], is_packaged=is_packaged, icon_type='image/png') # Set relations and attributes we need on those relations. # The properties set on latest_version and current_version differ # because we are only setting what the serializer is going to need. # In particular, latest_version.is_privileged needs to be set because # it's used by obj.app_type_id. obj.listed_authors = [] obj._current_version = Version() obj._current_version.addon = obj obj._current_version._developer_name = data['author'] obj._current_version.supported_locales = data['supported_locales'] obj._current_version.version = data['current_version'] obj._latest_version = Version() obj._latest_version.is_privileged = is_privileged obj._geodata = Geodata() obj.all_previews = [ Preview(id=p['id'], modified=self.to_datetime(p['modified']), filetype=p['filetype'], sizes=p.get('sizes', {})) for p in data['previews'] ] obj.categories = data['category'] obj._device_types = [DEVICE_TYPES[d] for d in data['device']] obj._is_disabled = data['is_disabled'] # Set base attributes on the "fake" app using the data from ES. self._attach_fields( obj, data, ('created', 'modified', 'default_locale', 'icon_hash', 'is_escalated', 'is_offline', 'manifest_url', 'premium_type', 'regions', 'reviewed', 'status', 'weekly_downloads')) # Attach translations for all translated attributes. self._attach_translations( obj, data, ('name', 'description', 'homepage', 'release_notes', 'support_email', 'support_url')) if data.get('group_translations'): self._attach_translations(obj, data, ('group', )) # Feed group. else: obj.group_translations = None self._attach_translations(obj._geodata, data, ('banner_message', )) # Set attributes that have a different name in ES. obj.public_stats = data['has_public_stats'] # Override obj.get_region() with a static list of regions generated # from the region_exclusions stored in ES. obj.get_regions = obj.get_regions( obj.get_region_ids(restofworld=True, excluded=data['region_exclusions'])) # Some methods below will need the raw data from ES, put it on obj. obj.es_data = data return obj