Skip to content

Commit

Permalink
Moved 'sitewide_messages' logic to 'hub' app. Added an unittest for it.
Browse files Browse the repository at this point in the history
  • Loading branch information
noliveleger committed May 29, 2018
1 parent 27555ee commit 8c00ab6
Show file tree
Hide file tree
Showing 5 changed files with 83 additions and 16 deletions.
20 changes: 20 additions & 0 deletions hub/tests/test_i18n.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
# -*- coding: utf-8 -*-
from django.test import TestCase

from hub.utils.i18n import I18nUtils


class I18nTestCase(TestCase):
fixtures= ['test_data']

def setUp(self):
pass

def test_welcome_message(self):
welcome_message_fr = I18nUtils.get_sitewide_message(lang="fr")
welcome_message_es = I18nUtils.get_sitewide_message(lang="es")
welcome_message = I18nUtils.get_sitewide_message()

self.assertEqual(welcome_message_fr.raw, "Le message de bienvenue")
self.assertEqual(welcome_message.raw, "Global welcome message")
self.assertEqual(welcome_message_es.raw, welcome_message.raw)
1 change: 1 addition & 0 deletions hub/utils/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
# -*- coding: utf-8 -*-
41 changes: 41 additions & 0 deletions hub/utils/i18n.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
from django.db.models import Q
from django.db.models.functions import Length
from django.utils.translation import get_language

from ..models import SitewideMessage


class I18nUtils(object):

@staticmethod
def get_sitewide_message(slug="welcome_message", lang=None):
"""
Returns a sitewide message based on its slug and the specified language.
If the language is not specified, it will use the current language.
If there are no results found, it falls back on the global version.
It doesn't exist at all, it returns None.
:param slug: str
:param lang: str|None
:return: MarkupField|None
"""

# Get default value if lang is not specified
language = lang if lang else get_language()

# Let's retrieve messages where slug is either:
# - "<slug>_<locale>"
# - "<slug>"
# We order the results by the length of the slug to be sure
# localized version comes first.
sitewide_message = SitewideMessage.objects\
.filter(
Q(slug="{}_{}".format(slug, language)) |
Q(slug="{}".format(slug)))\
.order_by(Length("slug").desc())\
.first()

if sitewide_message is not None:
return sitewide_message.body

return None
21 changes: 5 additions & 16 deletions kpi/context_processors.py
Original file line number Diff line number Diff line change
@@ -1,9 +1,8 @@
import constance
from django.conf import settings
from django.db.models import Q
from django.db.models.functions import Length
from django.utils.translation import get_language
from hub.models import SitewideMessage, ConfigurationFile

from hub.models import ConfigurationFile
from hub.utils.i18n import I18nUtils


def external_service_tokens(request):
Expand All @@ -30,20 +29,10 @@ def sitewide_messages(request):
custom text in django templates
"""
if request.path_info.endswith("accounts/register/"):
# Let's retrieve messages where slug is either:
# - "welcome_message_<locale>"
# - "welcome_message"
# We order the result by the length of the slug to be sure
# localized version comes first.
sitewide_message = SitewideMessage.objects\
.filter(
Q(slug="welcome_message_{}".format(get_language())) |
Q(slug="welcome_message"))\
.order_by(Length("slug").desc())\
.first()

sitewide_message = I18nUtils.get_sitewide_message()
if sitewide_message is not None:
return {"welcome_message": sitewide_message.body}
return {"welcome_message": sitewide_message}

return {}

Expand Down
16 changes: 16 additions & 0 deletions kpi/fixtures/test_data.json
Original file line number Diff line number Diff line change
Expand Up @@ -113,5 +113,21 @@
"created": "2017-05-09 10:49:34.273769-04",
"user": 3
}
},
{
"model": "hub.sitewidemessage",
"pk": 1,
"fields": {
"slug": "welcome_message",
"body": "Global welcome message"
}
},
{
"model": "hub.sitewidemessage",
"pk": 2,
"fields": {
"slug": "welcome_message_fr",
"body": "Le message de bienvenue"
}
}
]

0 comments on commit 8c00ab6

Please sign in to comment.