def items_mock(self): return [ AddonSitemap.item_tuple(datetime(2020, 10, 2, 0, 0, 0), 'delicious-pierogi', 'detail'), AddonSitemap.item_tuple(datetime(2020, 10, 1, 0, 0, 0), 'swanky-curry', 'detail'), AddonSitemap.item_tuple(datetime(2020, 9, 30, 0, 0, 0), 'spicy-pierogi', 'detail'), ]
def items_mock(self): return [ AddonSitemap.item_tuple( datetime(2020, 10, 2, 0, 0, 0), 'delicious-barbeque', 'detail' ), AddonSitemap.item_tuple( datetime(2020, 10, 1, 0, 0, 0), 'spicy-sandwich', 'detail' ), AddonSitemap.item_tuple( datetime(2020, 9, 30, 0, 0, 0), 'delicious-chocolate', 'detail' ), AddonSitemap.item_tuple( datetime(2020, 10, 2, 0, 0, 0), 'delicious-barbeque', 'versions' ), AddonSitemap.item_tuple( datetime(2020, 10, 1, 0, 0, 0), 'spicy-sandwich', 'versions' ), AddonSitemap.item_tuple( datetime(2020, 9, 30, 0, 0, 0), 'delicious-chocolate', 'versions' ), AddonSitemap.item_tuple( datetime(2020, 10, 2, 0, 0, 0), 'delicious-barbeque', 'ratings.list' ), AddonSitemap.item_tuple( datetime(2020, 10, 1, 0, 0, 0), 'spicy-sandwich', 'ratings.list' ), AddonSitemap.item_tuple( datetime(2020, 9, 30, 0, 0, 0), 'delicious-chocolate', 'ratings.list' ), ]
def test_android(self): it = AddonSitemap.item_tuple android_addon = self.android_addon with override_url_prefix(app_name='android'): assert list(AddonSitemap().items()) == [ it( android_addon.last_updated, reverse('addons.detail', args=[android_addon.slug]), 1, ), it( android_addon.last_updated, reverse('addons.ratings.list', args=[android_addon.slug]), 1, ), ] # make some of the Firefox add-ons be Android compatible version_factory(addon=self.addon_a, application=amo.ANDROID.id) self.make_addon_promoted(self.addon_a, RECOMMENDED, approve_version=True) self.addon_a.reload() version_factory(addon=self.addon_b, application=amo.ANDROID.id) # don't make b recommended - should be ignored even though it's compatible assert list(AddonSitemap().items()) == [ it( self.addon_a.last_updated, reverse('addons.detail', args=[self.addon_a.slug]), 1, ), it( android_addon.last_updated, reverse('addons.detail', args=[android_addon.slug]), 1, ), it( self.addon_a.last_updated, reverse('addons.ratings.list', args=[self.addon_a.slug]), 1, ), it( android_addon.last_updated, reverse('addons.ratings.list', args=[android_addon.slug]), 1, ), ]
def test_addon_sitemap(): it = AddonSitemap.item_tuple addon_a = addon_factory(slug='addon-a') addon_b = addon_factory(slug='addon-b') addon_b.update(last_updated=datetime(2020, 1, 1, 1, 1, 1)) addon_c = addon_factory(slug='addon-c') addon_factory(status=amo.STATUS_NOMINATED) # shouldn't show up sitemap = AddonSitemap() expected = [ it(addon_c.last_updated, addon_c.slug, 'detail', 1), it(addon_a.last_updated, addon_a.slug, 'detail', 1), it(addon_b.last_updated, addon_b.slug, 'detail', 1), it(addon_c.last_updated, addon_c.slug, 'versions', 1), it(addon_a.last_updated, addon_a.slug, 'versions', 1), it(addon_b.last_updated, addon_b.slug, 'versions', 1), it(addon_c.last_updated, addon_c.slug, 'ratings.list', 1), it(addon_a.last_updated, addon_a.slug, 'ratings.list', 1), it(addon_b.last_updated, addon_b.slug, 'ratings.list', 1), ] items = list(sitemap.items()) assert items == expected for item in sitemap.items(): assert sitemap.location(item) == reverse('addons.' + item.urlname, args=[item.slug]) assert '/en-US/firefox/' in sitemap.location(item) assert sitemap.lastmod(item) == item.last_updated # add some ratings to test the rating page pagination rating_factory(addon_c) rating_factory(addon_c) rating_factory(addon_c) rating_factory(addon_a) rating_factory(addon_a) # only 2 for addon_a patched_drf_setting = dict(settings.REST_FRAMEWORK) patched_drf_setting['PAGE_SIZE'] = 2 with override_settings(REST_FRAMEWORK=patched_drf_setting): items_with_ratings = list(sitemap.items()) # only one extra url, for a second ratings page, because PAGE_SIZE = 2 extra_rating = it(addon_c.last_updated, addon_c.slug, 'ratings.list', 2) assert extra_rating in items_with_ratings assert set(items_with_ratings) - set(expected) == {extra_rating} item = items_with_ratings[-3] assert sitemap.location(item).endswith('/reviews/?page=2') assert sitemap.lastmod(item) == item.last_updated
def test_basic(self): sitemap = AddonSitemap() items = list(sitemap.items()) assert items == self.expected for item in sitemap.items(): assert sitemap.location(item) == item.url assert '/en-US/firefox/' in sitemap.location(item) assert sitemap.lastmod(item) == item.last_updated
def test_sitemap_render_xml(): def items_mock(self): return [ AddonSitemap.item_tuple( datetime(2020, 10, 2, 0, 0, 0), 'delicious-barbeque', 'detail' ), AddonSitemap.item_tuple( datetime(2020, 10, 1, 0, 0, 0), 'spicy-sandwich', 'detail' ), AddonSitemap.item_tuple( datetime(2020, 9, 30, 0, 0, 0), 'delicious-chocolate', 'detail' ), AddonSitemap.item_tuple( datetime(2020, 10, 2, 0, 0, 0), 'delicious-barbeque', 'versions' ), AddonSitemap.item_tuple( datetime(2020, 10, 1, 0, 0, 0), 'spicy-sandwich', 'versions' ), AddonSitemap.item_tuple( datetime(2020, 9, 30, 0, 0, 0), 'delicious-chocolate', 'versions' ), AddonSitemap.item_tuple( datetime(2020, 10, 2, 0, 0, 0), 'delicious-barbeque', 'ratings.list' ), AddonSitemap.item_tuple( datetime(2020, 10, 1, 0, 0, 0), 'spicy-sandwich', 'ratings.list' ), AddonSitemap.item_tuple( datetime(2020, 9, 30, 0, 0, 0), 'delicious-chocolate', 'ratings.list' ), ] with mock.patch.object(AddonSitemap, 'items', items_mock): firefox_built = AddonSitemap().render_xml('firefox', 1) firefox_file = os.path.join(TEST_SITEMAPS_DIR, 'sitemap-addons-firefox.xml') with open(firefox_file) as sitemap: assert firefox_built == sitemap.read() android_built = AddonSitemap().render_xml('android', 1) android_file = os.path.join(TEST_SITEMAPS_DIR, 'sitemap-addons-android.xml') with open(android_file) as sitemap: assert android_built == sitemap.read()
def test_basic(self): sitemap = AddonSitemap() items = list(sitemap.items()) assert items == self.expected for item in sitemap.items(): assert sitemap.location(item) == reverse( 'addons.' + item.urlname, args=[item.slug] ) assert '/en-US/firefox/' in sitemap.location(item) assert sitemap.lastmod(item) == item.last_updated
def items_mock(self): return [ AddonSitemap.item_tuple( datetime(2020, 10, 2, 0, 0, 0), reverse('addons.detail', args=['delicious-barbeque']), ), AddonSitemap.item_tuple( datetime(2020, 10, 1, 0, 0, 0), reverse('addons.detail', args=['spicy-sandwich']), ), AddonSitemap.item_tuple( datetime(2020, 9, 30, 0, 0, 0), reverse('addons.detail', args=['delicious-chocolate']), ), AddonSitemap.item_tuple( datetime(2020, 10, 2, 0, 0, 0), reverse('addons.ratings.list', args=['delicious-barbeque']), ), AddonSitemap.item_tuple( datetime(2020, 10, 1, 0, 0, 0), reverse('addons.ratings.list', args=['spicy-sandwich']), ), AddonSitemap.item_tuple( datetime(2020, 9, 30, 0, 0, 0), reverse('addons.ratings.list', args=['delicious-chocolate']), ), ]
def test_addon_sitemap(): addon_a = addon_factory() addon_b = addon_factory() addon_c = addon_factory() addon_b.update(last_updated=datetime.datetime(2020, 1, 1, 1, 1, 1)) addon_factory(status=amo.STATUS_NOMINATED) # shouldn't show up sitemap = AddonSitemap() assert list(sitemap.items()) == [ (addon_c.last_updated, addon_c.slug), (addon_a.last_updated, addon_a.slug), (addon_b.last_updated, addon_b.slug), ] for item in sitemap.items(): assert sitemap.location(item) == reverse('addons.detail', args=[item.slug]) assert '/en-US/firefox/' in sitemap.location(item) assert sitemap.lastmod(item) == item.last_updated
def test_rating_pagination(self): # add some ratings to test the rating page pagination rating_factory(self.addon_c) rating_factory(self.addon_c) rating_factory(self.addon_c) rating_factory(self.addon_a) rating_factory(self.addon_a) # only 2 for addon_a patched_drf_setting = dict(settings.REST_FRAMEWORK) patched_drf_setting['PAGE_SIZE'] = 2 sitemap = AddonSitemap() with override_settings(REST_FRAMEWORK=patched_drf_setting): items_with_ratings = list(sitemap.items()) # only one extra url, for a second ratings page, because PAGE_SIZE = 2 extra_rating = AddonSitemap.item_tuple( self.addon_c.last_updated, self.addon_c.slug, 'ratings.list', 2 ) assert extra_rating in items_with_ratings assert set(items_with_ratings) - set(self.expected) == {extra_rating} item = items_with_ratings[-3] assert sitemap.location(item).endswith('/reviews/?page=2') assert sitemap.lastmod(item) == item.last_updated
def test_addon_sitemap(): it = AddonSitemap.item_tuple addon_a = addon_factory( slug='addon-a', privacy_policy='privacy!', eula='eula!', version_kw={'license': license_factory()}, ) # addon_factory generates licenses by default, but always with a builtin >0 addon_b = addon_factory(slug='addon-b') addon_b.update(last_updated=datetime.datetime(2020, 1, 1, 1, 1, 1)) addon_c = addon_factory( slug='addon-c', eula='only eula', version_kw={'license': license_factory(builtin=1)}, ) addon_d = addon_factory(slug='addon-d', privacy_policy='only privacy') # throw in an edge case of an empty policy in a non-default locale Translation.objects.create(id=addon_d.privacy_policy_id, localized_string='', locale='fr') addon_e = addon_factory(slug='addon-e', eula='', privacy_policy='') # empty addon_factory(status=amo.STATUS_NOMINATED) # shouldn't show up sitemap = AddonSitemap() expected = [ it(addon_e.last_updated, addon_e.slug, 'detail', 1), it(addon_d.last_updated, addon_d.slug, 'detail', 1), it(addon_c.last_updated, addon_c.slug, 'detail', 1), it(addon_a.last_updated, addon_a.slug, 'detail', 1), it(addon_b.last_updated, addon_b.slug, 'detail', 1), it(addon_d.last_updated, addon_d.slug, 'privacy', 1), it(addon_a.last_updated, addon_a.slug, 'privacy', 1), it(addon_c.last_updated, addon_c.slug, 'eula', 1), it(addon_a.last_updated, addon_a.slug, 'eula', 1), it(addon_a.last_updated, addon_a.slug, 'license', 1), it(addon_e.last_updated, addon_e.slug, 'ratings.list', 1), it(addon_d.last_updated, addon_d.slug, 'ratings.list', 1), it(addon_c.last_updated, addon_c.slug, 'ratings.list', 1), it(addon_a.last_updated, addon_a.slug, 'ratings.list', 1), it(addon_b.last_updated, addon_b.slug, 'ratings.list', 1), ] items = list(sitemap.items()) assert items == expected for item in sitemap.items(): assert sitemap.location(item) == reverse('addons.' + item.urlname, args=[item.slug]) assert '/en-US/firefox/' in sitemap.location(item) assert sitemap.lastmod(item) == item.last_updated # add some ratings to test the rating page pagination rating_factory(addon_c) rating_factory(addon_c) rating_factory(addon_c) rating_factory(addon_a) rating_factory(addon_a) # only 2 for addon_a patched_drf_setting = dict(settings.REST_FRAMEWORK) patched_drf_setting['PAGE_SIZE'] = 2 with override_settings(REST_FRAMEWORK=patched_drf_setting): items_with_ratings = list(sitemap.items()) # only one extra url, for a second ratings page, because PAGE_SIZE = 2 extra_rating = it(addon_c.last_updated, addon_c.slug, 'ratings.list', 2) assert extra_rating in items_with_ratings assert set(items_with_ratings) - set(expected) == {extra_rating} item = items_with_ratings[-3] assert sitemap.location(item).endswith('/reviews/?page=2') assert sitemap.lastmod(item) == item.last_updated