def test_no_locales(self): """ If the form being saved has no locale field, do not alter the snippet's locale. """ en_us = SnippetLocale(locale='en-us') fr = SnippetLocale(locale='fr') snippet = SnippetFactory.create(locale_set=[en_us, fr]) data = { 'name': 'test', 'data': '{}', 'template': snippet.template.id, 'priority': 0, 'weight': 100, } # FormClass has no locale field. class FormClass(ModelForm): class Meta: model = Snippet form = FormClass(data, instance=snippet) self._save_model(snippet, form) snippet = Snippet.objects.get(pk=snippet.pk) locales = (l.locale for l in snippet.locale_set.all()) eq_(set(locales), set(('en-us', 'fr')))
def test_match_client_match_locale(self): params = {} snippet = SnippetFactory.create(on_release=True, on_startpage_4=True, locale_set=[SnippetLocale(locale='en-US')]) SnippetFactory.create(on_release=True, on_startpage_4=True, locale_set=[SnippetLocale(locale='fr')]) self._assert_client_matches_snippets(params, [snippet])
def test_match_client_multiple_locales_distinct(self): """ If a snippet has multiple locales and a client matches more than one of them, the snippet should only be included in the queryset once. """ params = {'locale': 'es-mx'} snippet = SnippetFactory.create(on_release=True, on_startpage_4=True, locale_set=[SnippetLocale(locale='es'), SnippetLocale(locale='es-mx')]) self._assert_client_matches_snippets(params, [snippet])
def test_match_client_multiple_locales(self): """ If there are multiple locales that should match the client's locale, include all of them. """ params = {'locale': 'es-mx'} snippet_1 = SnippetFactory.create(on_release=True, on_startpage_4=True, locale_set=[SnippetLocale(locale='es')]) snippet_2 = SnippetFactory.create(on_release=True, on_startpage_4=True, locale_set=[SnippetLocale(locale='es-mx')]) self._assert_client_matches_snippets(params, [snippet_1, snippet_2])
def test_match_client_match_channel_partially(self): """ Client channels like "release-cck-mozilla14" should match "release". """ params = {'channel': 'release-cck-mozilla14'} snippet = SnippetFactory.create(on_release=True, on_startpage_4=True, locale_set=[SnippetLocale(locale='en-US')]) SnippetFactory.create(on_release=False, on_startpage_4=True, locale_set=[SnippetLocale(locale='en-US')]) self._assert_client_matches_snippets(params, [snippet])
def test_exclusion_cmr(self): cmr_el = ClientMatchRuleFactory(locale='/^el/', is_exclusion=True) snippet = SnippetFactory(client_match_rules=[cmr_el], locale_set=[ SnippetLocale(locale='pl'), SnippetLocale(locale='en') ]) cmr_to_locales_action(None, None, [snippet]) eq_(snippet.locale_set.count(), len(LANGUAGE_VALUES) - 1) ok_(not snippet.locale_set.filter(locale='el').exists()) eq_(snippet.client_match_rules.count(), 0)
def test_base(self): cmr_el = ClientMatchRuleFactory(locale='/^el/') cmr_ast = ClientMatchRuleFactory(locale='ast|ja-JP-mac', channel='aurora') cmr_es = ClientMatchRuleFactory(locale='/(es-MX)|(es-AR)/') cmr_bogus = ClientMatchRuleFactory(locale='/foo/') snippet = SnippetFactory( client_match_rules=[cmr_el, cmr_ast, cmr_es, cmr_bogus], locale_set=[ SnippetLocale(locale='pl'), SnippetLocale(locale='en') ]) cmr_to_locales_action(None, None, [snippet]) eq_(snippet.locale_set.count(), 5) eq_(set(snippet.locale_set.values_list('locale', flat=True)), set(['el', 'ast', 'ja-jp-mac', 'es-mx', 'es-ar'])) eq_(snippet.client_match_rules.count(), 1) eq_(snippet.client_match_rules.all()[0], cmr_ast)
def test_match_client_invalid_locale(self): """ If client sends invalid locale return snippets with no locales specified. """ params = {'locale': 'foo'} snippet = SnippetFactory.create(on_release=True, on_startpage_4=True, locale_set=[]) SnippetFactory.create(on_release=True, on_startpage_4=True, locale_set=[SnippetLocale(locale='en-us')]) self._assert_client_matches_snippets(params, [snippet])
def test_save_model_locales(self): """ save_model should delete any locales that were removed from the snippet and save any locales that were added. """ en_us = SnippetLocale(locale='en-us') fr = SnippetLocale(locale='fr') snippet = SnippetFactory.create(locale_set=[en_us, fr]) data = { 'name': 'test', 'data': '{}', 'template': snippet.template.id, 'locales': ['en-us', 'de'], 'priority': 0, 'weight': 100, } form = SnippetAdminForm(data, instance=snippet) self._save_model(snippet, form) snippet = Snippet.objects.get(pk=snippet.pk) locales = (l.locale for l in snippet.locale_set.all()) eq_(set(locales), set(('en-us', 'de')))
def test_match_client_not_matching_startpage(self): params = {'startpage_version': '0'} snippet = SnippetFactory.create(on_release=True, on_startpage_4=True, locale_set=[SnippetLocale(locale='en-US')]) self._assert_client_matches_snippets(params, [snippet])