def test_6_banners(self): """Only 6 banners should be included in the banner set.""" for k in range(10): FacebookBannerLocaleFactory.create(locale='en-US') response = self._pre_auth_promo('en-US') eq_(len(response.context['banners']), 6)
def test_locale_banners(self): """Ensure that the banners used by the page match the user's locale.""" banner1 = FacebookBannerLocaleFactory.create(locale='fr').banner banner2 = FacebookBannerLocaleFactory.create(locale='fr').banner FacebookBannerLocaleFactory.create(locale='en-US') response = self._pre_auth_promo('fr') eq_(list(response.context['banners']), [banner1, banner2])
def test_fallback_locales(self): """ If a banner is available across a language and the user is using a specific subset of that locale (e.g. banner is in de and user is using de-at), the user should be presented with that banner as an option. """ FacebookBannerLocaleFactory.create(locale='de') form = self.form('de-at') eq_(len(form.fields['banner'].choices), 1)
def test_image_for_locale_blank_default(self): """ If a banner is available in the requested locale but the image is blank, return the default image. """ banner = FacebookBannerFactory.create(image='banner') FacebookBannerLocaleFactory.create(banner=banner, locale='es', image='') ok_(banner.image_for_locale('es').name.endswith('banner'))
def test_image_for_locale_found(self): """ If the banner is available in the requested locale, return the image for that locale. """ banner = FacebookBannerFactory.create(image='banner') FacebookBannerLocaleFactory.create(banner=banner, locale='pt-BR', image='locale') ok_(banner.image_for_locale('pt-BR').name.endswith('locale'))
def test_default_locale(self): """ If no banners are available in the requested locale, default to the site's default language code. """ banner1 = FacebookBannerLocaleFactory.create(locale='fr').banner banner2 = FacebookBannerLocaleFactory.create(locale='fr').banner response = self._pre_auth_promo('pt-BR') eq_(list(response.context['banners']), [banner1, banner2])
def test_image_for_locale_fallback(self): """ If the banner is available in a certain language and the requested locale is a subset of that language that isn't available, return the image for the fallback language. """ banner = FacebookBannerFactory.create(image='banner') FacebookBannerLocaleFactory.create(banner=banner, locale='de', image='locale') ok_(banner.image_for_locale('de-ch').name.endswith('locale'))
def test_with_locale(self): """ If the request has a set locale, the form should only accept banners available in that locale. """ fr_banner = FacebookBannerFactory.create() FacebookBannerLocaleFactory.create(banner=fr_banner, locale='fr') en_banner = FacebookBannerFactory.create() FacebookBannerLocaleFactory.create(banner=en_banner, locale='en-us') form = self.form('fr', {'text': 'asdf', 'banner': fr_banner.id}) ok_(form.is_valid()) form = self.form('fr', {'text': 'asdf', 'banner': en_banner.id}) ok_(not form.is_valid())
def test_no_locale(self): """ If the request has no set locale, the form should accept any banner in any locale. """ fr_banner = FacebookBannerFactory.create() FacebookBannerLocaleFactory.create(banner=fr_banner, locale='fr') en_banner = FacebookBannerFactory.create() FacebookBannerLocaleFactory.create(banner=en_banner, locale='en-us') form = self.form(None, {'text': 'asdf', 'banner': fr_banner.id}) ok_(form.is_valid()) form = self.form(None, {'text': 'asdf', 'banner': en_banner.id}) ok_(form.is_valid())
def test_save_locale(self): """The form should save the current locale on the instance.""" locale = FacebookBannerLocaleFactory.create(locale='es') with self.activate('es'): form = self.form('es', { 'text': 'asdf', 'banner': locale.banner.id }, user=FacebookUserFactory.create()) instance = form.save() eq_(instance.locale, 'es')
def test_similar_locales(self): """ Regression test for a bug where a user in the de locale would get a banner choice for each de locale (de, de-at, de-ch, de-de), causing duplicate choices and form processing errors. """ banner = FacebookBannerFactory.create() FacebookBannerLocaleFactory.create(banner=banner, locale='de') FacebookBannerLocaleFactory.create(banner=banner, locale='de-at') FacebookBannerLocaleFactory.create(banner=banner, locale='de-ch') FacebookBannerLocaleFactory.create(banner=banner, locale='de-de') form = self.form('de') eq_(len(form.fields['banner'].choices), 1)
def test_filter_by_locale_basic(self): banner1 = FacebookBannerLocaleFactory.create(locale='en-US').banner banner2 = FacebookBannerLocaleFactory.create(locale='en-US').banner FacebookBannerLocaleFactory.create(locale='fr').banner FacebookBannerLocaleFactory.create(locale='pt-BR').banner results = FacebookBanner.objects.all().filter_by_locale('en-US') eq_(list(results), [banner1, banner2])
def test_no_profile_image(self): """ If the user did not check `use_profile_image`, create the banner instance and return a 201 Created. """ banner = FacebookBannerLocaleFactory.create(locale='en-us').banner response = self.banner_create(banner=banner.id, text='asdf', next_action='', use_profile_image=False) ok_(FacebookBannerInstance.objects.filter(banner=banner, user=self.user) .exists()) eq_(response.status_code, 201) response_data = json.loads(response.content) with self.activate('en-US'): eq_(response_data['next'], absolutify(reverse('facebook.banner_list')))
def test_save_and_share(self): """ If the user clicks the `Save and Share` button, the `next` link should point to the share page for the new banner instance. """ banner = FacebookBannerLocaleFactory.create(locale='en-us').banner response = self.banner_create(banner=banner.id, text='asdf', next_action='share', use_profile_image=False) instance = FacebookBannerInstance.objects.get(banner=banner, user=self.user) response_data = json.loads(response.content) with self.activate('en-US'): eq_(response_data['next'], absolutify(reverse('facebook.banners.share', args=[instance.id])))
def test_use_profile_image(self, delay): """ If the user checked `use_profile_image`, create a banner instance, trigger the celery task and return a 202 Accepted. """ banner = FacebookBannerLocaleFactory.create(locale='en-us').banner response = self.banner_create(banner=banner.id, text='asdf', next_action='', use_profile_image=True) # Asserts that banner instance exists. instance = FacebookBannerInstance.objects.get(banner=banner, user=self.user) delay.assert_called_with(instance.id) # Assert response contians the expected links. eq_(response.status_code, 202) response_data = json.loads(response.content) with self.activate('en-US'): eq_(response_data['next'], absolutify(reverse('facebook.banner_list'))) eq_(response_data['check_url'], reverse('facebook.banners.create_image_check', args=[instance.id]))