diff --git a/seahub/views/__init__.py b/seahub/views/__init__.py index 28ac88348e..5b6b129df2 100644 --- a/seahub/views/__init__.py +++ b/seahub/views/__init__.py @@ -1842,10 +1842,15 @@ def i18n(request): # language code is not supported, use default. lang = settings.LANGUAGE_CODE - # set language code to user profile - p = Profile.objects.get_profile_by_user(request.user.username) - if p is not None: - p.set_lang_code(lang) + # set language code to user profile if user is logged in + if not request.user.is_anonymous(): + p = Profile.objects.get_profile_by_user(request.user.username) + if p is not None: + # update exist record + p.set_lang_code(lang) + else: + # add new record + Profile.objects.add_or_update(request.user.username, '', '', lang) # set language code to client res = HttpResponseRedirect(next) diff --git a/tests/seahub/views/test_i18n.py b/tests/seahub/views/test_i18n.py new file mode 100644 index 0000000000..d1fd933d2e --- /dev/null +++ b/tests/seahub/views/test_i18n.py @@ -0,0 +1,44 @@ +from django.core.urlresolvers import reverse +from django.http.cookie import parse_cookie + +from seahub.test_utils import BaseTestCase +from seahub.profile.models import Profile + +class I18nTest(BaseTestCase): + + def test_can_set_to_zh(self): + resp = self.client.get(reverse('i18n') + '?lang=zh-cn') + self.assertEqual(302, resp.status_code) + assert parse_cookie(resp.cookies)['django_language'] == 'zh-cn' + + def test_wrong_lang_code(self): + resp = self.client.get(reverse('i18n') + '?lang=zh_CN') + self.assertEqual(302, resp.status_code) + assert parse_cookie(resp.cookies)['django_language'] == 'en' + + def test_anonymous_user_profile(self): + # Should not add profile record when user is anonymous. + resp = self.client.get(reverse('i18n') + '?lang=zh-cn') + self.assertEqual(302, resp.status_code) + assert len(Profile.objects.all()) == 0 + + def test_add_new_user_profile(self): + # Should add new profile record. + self.login_as(self.user) + + resp = self.client.get(reverse('i18n') + '?lang=zh-cn') + self.assertEqual(302, resp.status_code) + assert len(Profile.objects.all()) == 1 + assert Profile.objects.get_user_language(self.user.username) == 'zh-cn' + + def test_update_user_profile(self): + # Should update exist profile record. + self.login_as(self.user) + + Profile.objects.add_or_update(self.user.username, 'nickname', 'intro') + assert len(Profile.objects.all()) == 1 + + resp = self.client.get(reverse('i18n') + '?lang=zh-cn') + self.assertEqual(302, resp.status_code) + assert len(Profile.objects.all()) == 1 + assert Profile.objects.get_user_language(self.user.username) == 'zh-cn'