Add region setting to supplement localization (#1875)

This commit is contained in:
Raphael Michel
2020-12-14 13:15:38 +01:00
committed by GitHub
parent e311341d01
commit 04bfa63a5e
46 changed files with 281 additions and 90 deletions

View File

@@ -1,15 +1,42 @@
from pretix.base.i18n import language
from django.utils.translation import get_language
from pretix.base.i18n import get_language_without_region, language
from pretix.helpers.i18n import get_javascript_format, get_moment_locale
def test_js_formats():
with language('de'):
assert get_javascript_format('DATETIME_INPUT_FORMATS') == 'DD.MM.YYYY HH:mm:ss'
assert get_javascript_format('DATE_INPUT_FORMATS') == 'DD.MM.YYYY'
with language('en'):
assert get_javascript_format('DATETIME_INPUT_FORMATS') == 'YYYY-MM-DD HH:mm:ss'
assert get_javascript_format('DATE_INPUT_FORMATS') == 'YYYY-MM-DD'
with language('en-US'):
assert get_javascript_format('DATE_INPUT_FORMATS') == 'MM/DD/YYYY'
def test_get_locale():
get_moment_locale('af') == 'af'
get_moment_locale('de_Informal') == 'de'
get_moment_locale('de-AT') == 'de'
assert get_moment_locale('af') == 'af'
assert get_moment_locale('de_Informal') == 'de'
assert get_moment_locale('de-US') == 'de'
assert get_moment_locale('en-US') == 'en'
assert get_moment_locale('en-CA') == 'en-ca'
def test_set_region():
with language('de'):
assert get_language() == 'de'
assert get_language_without_region() == 'de'
with language('de', 'US'):
assert get_language() == 'de-us'
assert get_language_without_region() == 'de'
with language('de', 'DE'):
assert get_language() == 'de-de'
assert get_language_without_region() == 'de'
with language('de-informal', 'DE'):
assert get_language() == 'de-informal'
assert get_language_without_region() == 'de-informal'
with language('pt', 'PT'):
assert get_language() == 'pt-pt'
assert get_language_without_region() == 'pt-pt'
with language('pt-pt', 'BR'):
assert get_language() == 'pt-pt'
assert get_language_without_region() == 'pt-pt'

View File

@@ -2683,6 +2683,20 @@ class CheckoutTestCase(BaseCheckoutTestCase, TestCase):
o.payments.first().confirm()
assert len(djmail.outbox) == 0
def test_locale_region_not_saved(self):
self.event.settings.origin = 'US'
self.event.settings.locales = ['de']
self.event.settings.locale = 'de'
with scopes_disabled():
CartPosition.objects.create(
event=self.event, cart_id=self.session_key, item=self.ticket,
price=0, expires=now() + timedelta(minutes=10)
)
self.client.post('/%s/%s/checkout/confirm/' % (self.orga.slug, self.event.slug), follow=True)
with scopes_disabled():
self.assertEqual(Order.objects.first().locale, 'de')
class QuestionsTestCase(BaseCheckoutTestCase, TestCase):

View File

@@ -27,7 +27,7 @@ class EventTestMixin:
self.orga = Organizer.objects.create(name='CCC', slug='ccc')
self.event = Event.objects.create(
organizer=self.orga, name='30C3', slug='30c3',
date_from=datetime.datetime(now().year + 1, 12, 26, tzinfo=datetime.timezone.utc),
date_from=datetime.datetime(now().year + 1, 12, 26, 14, 0, tzinfo=datetime.timezone.utc),
live=True, sales_channels=['web', 'bar']
)
self.user = User.objects.create_user('dummy@dummy.dummy', 'dummy')
@@ -1306,3 +1306,49 @@ class EventSlugBanlistValidatorTest(EventTestMixin, SoupTest):
event.save()
self.assertEqual(Event.objects.filter(name='download').count(), 0)
class EventLocaleTest(EventTestMixin, SoupTest):
@scopes_disabled()
def setUp(self):
super().setUp()
self.event.settings.locales = ['de', 'en']
self.event.settings.locale = 'de'
self.event.settings.timezone = 'UTC'
def test_german_by_default(self):
response = self.client.get(
'/%s/%s/' % (self.orga.slug, self.event.slug)
)
self.assertEqual(response.status_code, 200)
self.assertIn('26. Dezember', response.rendered_content)
self.assertIn('14:00', response.rendered_content)
def test_english_no_region_set(self):
self.client.get('/locale/set?locale=en')
response = self.client.get(
'/%s/%s/' % (self.orga.slug, self.event.slug)
)
self.assertEqual(response.status_code, 200)
self.assertIn('Dec. 26,', response.rendered_content)
self.assertIn('14:00', response.rendered_content)
def test_english_region_US(self):
self.event.settings.region = 'US'
self.client.get('/locale/set?locale=en')
response = self.client.get(
'/%s/%s/' % (self.orga.slug, self.event.slug)
)
self.assertEqual(response.status_code, 200)
self.assertIn('Dec. 26,', response.rendered_content)
self.assertIn('2 p.m.', response.rendered_content)
def test_german_region_US(self):
self.event.settings.region = 'US'
self.client.get('/locale/set?locale=de')
response = self.client.get(
'/%s/%s/' % (self.orga.slug, self.event.slug)
)
self.assertEqual(response.status_code, 200)
self.assertIn('26. Dezember', response.rendered_content)
self.assertIn('14:00', response.rendered_content)