def test_app_categories(self): addon = lambda: Addon.objects.get(pk=3615) c22 = Category.objects.get(id=22) c22.name = 'CCC' c22.save() c23 = Category.objects.get(id=23) c23.name = 'BBB' c23.save() c24 = Category.objects.get(id=24) c24.name = 'AAA' c24.save() cats = addon().all_categories eq_(cats, [c22, c23, c24]) for cat in cats: eq_(cat.application.id, amo.FIREFOX.id) cats = [c24, c23, c22] app_cats = [(amo.FIREFOX, cats)] eq_(addon().app_categories, app_cats) tb = Application.objects.get(id=amo.THUNDERBIRD.id) c = Category(application=tb, name='XXX', type=addon().type, count=1, weight=1) c.save() AddonCategory.objects.create(addon=addon(), category=c) c24.save() # Clear the app_categories cache. app_cats += [(amo.THUNDERBIRD, [c])] eq_(addon().app_categories, app_cats)
def test_category_url(self): """Every type must have a url path for its categories.""" for t in amo.ADDON_TYPE.keys(): if t == amo.ADDON_DICT: continue # Language packs don't have categories. cat = Category(type=AddonType(id=t), slug='omg') assert cat.get_url_path()
def create_fake_app(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, type=amo.ADDON_WEBAPP, 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_categories = [Category(slug=cat) for cat in data['category']] obj.all_previews = [Preview(id=p['id'], modified=p['modified'], filetype=p['filetype']) for p in data['previews']] obj._device_types = [DEVICE_TYPES[d] for d in data['device']] # Set base attributes on the "fake" app using the data from ES. # It doesn't mean they'll get exposed in the serializer output, that # depends on what the fields/exclude attributes in Meta. for field_name in ('created', 'modified', 'default_locale', 'icon_hash', 'is_escalated', 'is_offline', 'manifest_url', 'premium_type', 'regions', 'reviewed', 'status', 'weekly_downloads'): setattr(obj, field_name, data.get(field_name)) # Attach translations for all translated attributes. for field_name in ('name', 'description', 'homepage', 'support_email', 'support_url'): ESTranslationSerializerField.attach_translations(obj, data, field_name) ESTranslationSerializerField.attach_translations(obj._geodata, data, 'banner_message') 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_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
def setUp(self): self.feed = feeds.CategoriesRss() self.u = u'Ελληνικά' self.wut = Translation(localized_string=self.u, locale='el') self.feed.request = mock.Mock() self.feed.request.APP.pretty = self.u self.category = Category(name=self.u) self.addon = Addon(name=self.u, id=2, type=1, slug='xx') self.addon._current_version = Version(version='v%s' % self.u)
def test_personas_category_landing(self): """Ensure we hit a grid page if there's a category and no sorting.""" grid = 'browse/personas/grid.html' landing = 'browse/personas/category_landing.html' category = Category(type=amo.ADDON_PERSONA, slug='abc', application=Application.objects.get(id=amo.FIREFOX.id)) category.save() category_url = reverse('browse.personas', args=[category.slug]) r = self.client.get(category_url + '?sort=created') self.assertTemplateUsed(r, grid) r = self.client.get(category_url) self.assertTemplateUsed(r, grid) # Category with 5 add-ons should bring us to a landing page. category.count = 5 category.save() r = self.client.get(category_url) self.assertTemplateUsed(r, landing)
def test_personas_grid(self): """Ensure we always hit a grid page if there's a category.""" grid = 'browse/personas/mobile/grid.html' category = Category(type=amo.ADDON_PERSONA, slug='xxx', application_id=amo.FIREFOX.id) category.save() category_url = reverse('browse.personas', args=[category.slug]) # Show the grid page even with sorting. r = self.client.get('%s?sort=created' % category_url) self.assertTemplateUsed(r, grid) r = self.client.get(category_url) self.assertTemplateUsed(r, grid) # Even if the category has 5 add-ons. category.count = 5 category.save() r = self.client.get(category_url) self.assertTemplateUsed(r, grid)
def test_category_url(self): """Every type must have a url path for its categories.""" for t in amo.ADDON_TYPE.keys(): cat = Category(type=AddonType(id=t), slug='omg') assert cat.get_url_path()
def _create_persona_cat(self): category = Category(type=amo.ADDON_PERSONA, slug='xxx', application_id=amo.FIREFOX.id) category.save() return category