Merge pull request #1386 from modoboa/feature/use_default_language_code

Use default language code for new accounts.
This commit is contained in:
Antoine Nguyen
2018-02-02 15:26:17 +01:00
committed by GitHub
9 changed files with 62 additions and 11 deletions
+4 -1
View File
@@ -6,8 +6,9 @@ from collections import OrderedDict
from functools import reduce
from django import forms
from django.urls import reverse
from django.conf import settings
from django.http import QueryDict
from django.urls import reverse
from django.utils.translation import ugettext as _, ugettext_lazy
from django.contrib.auth import password_validation
@@ -202,6 +203,8 @@ class AccountFormGeneral(forms.ModelForm):
if self.user == account and not self.cleaned_data["is_active"]:
raise lib_exceptions.PermDeniedException(
_("You can't disable your own account"))
if not account.pk:
account.language = settings.LANGUAGE_CODE
if commit:
if self.cleaned_data.get("password2", "") != "":
account.set_password(self.cleaned_data["password2"])
+3
View File
@@ -2,6 +2,7 @@
from __future__ import unicode_literals
from django.conf import settings
from django.core.exceptions import ValidationError
from django.shortcuts import get_object_or_404
from django.utils.translation import ugettext as _, ugettext_lazy
@@ -308,6 +309,8 @@ class WritableAccountSerializer(AccountSerializer):
else:
password = validated_data.pop("password")
user.set_password(password)
if "language" not in validated_data:
user.language = settings.LANGUAGE_CODE
user.save(creator=creator)
if mailbox_data:
self._create_mailbox(creator, user, mailbox_data)
+19
View File
@@ -107,6 +107,25 @@ class AccountTestCase(ModoTestCase):
alias__internal=True).exists()
)
@override_settings(LANGUAGE_CODE="fr")
def test_create_account_default_lang(self):
"""Check if default language is applied."""
values = {
"username": "tester@test.com",
"first_name": "Tester",
"last_name": "Toto",
"password1": "Toto1234",
"password2": "Toto1234",
"role": "SimpleUsers",
"quota_act": True,
"is_active": True,
"email": "tester@test.com",
"stepid": "step2"
}
self.ajax_post(reverse("admin:account_add"), values)
account = User.objects.get(username=values["username"])
self.assertEqual(account.language, "fr")
def test_aliases_update_on_rename(self):
"""Check if aliases are updated on mailbox rename."""
account = User.objects.get(username="user@test.com")
+22 -1
View File
@@ -10,6 +10,7 @@ import json
import dns.resolver
from mock import patch
from django.test import override_settings
from django.urls import reverse
from rest_framework.authtoken.models import Token
@@ -89,7 +90,8 @@ class DomainAPITestCase(ModoAPITestCase):
mock_query.side_effect = utils.mock_dns_query_result
mock_getaddrinfo.side_effect = utils.mock_ip_query_result
response = self.client.post(
url, {"name": "no-mx.example.com", "quota": 0, "default_mailbox_quota": 10}
url, {"name": "no-mx.example.com", "quota": 0,
"default_mailbox_quota": 10}
)
self.assertEqual(response.status_code, 400)
self.assertEqual(
@@ -305,6 +307,25 @@ class AccountAPITestCase(ModoAPITestCase):
response = self.client.post(url, data, format="json")
self.assertEqual(response.status_code, 201)
@override_settings(LANGUAGE_CODE="fr")
def test_create_account_default_lang(self):
"""Try to create a new account with(out) language."""
url = reverse("api:account-list")
data = dict(self.ACCOUNT_DATA)
response = self.client.post(url, data, format="json")
self.assertEqual(response.status_code, 201)
account = response.json()
user = core_models.User.objects.filter(pk=account["pk"]).first()
self.assertEqual(user.language, "fr")
user.delete()
data["language"] = "pl_PL"
response = self.client.post(url, data, format="json")
self.assertEqual(response.status_code, 201)
account = response.json()
user = core_models.User.objects.filter(pk=account["pk"]).first()
self.assertEqual(user.language, data["language"])
def test_create_domainadmin_account(self):
"""Try to create a domain admin."""
data = copy.deepcopy(self.ACCOUNT_DATA)
+1 -1
View File
@@ -4,9 +4,9 @@ from __future__ import unicode_literals
import logging
from django.urls import reverse
from django.db.models import signals
from django.dispatch import receiver
from django.urls import reverse
from django.utils.encoding import smart_text
from django.utils.translation import ugettext as _
@@ -50,5 +50,4 @@ class Command(BaseCommand):
admin_models.Alias.objects.filter(internal=False).count()),
"extensions": extensions
}
if not self.client.update_instance(local_config.api_pk, data):
raise CommandError("Failed to update instance.")
self.client.update_instance(local_config.api_pk, data)
+3 -1
View File
@@ -5,8 +5,9 @@ from __future__ import unicode_literals
from email.header import Header
import re
from django.urls import reverse
from django.conf import settings
from django.db import models
from django.urls import reverse
from django.utils.encoding import (
python_2_unicode_compatible, smart_bytes, smart_text, force_str
)
@@ -349,6 +350,7 @@ class User(AbstractUser):
self.first_name = row[3].strip()
self.last_name = row[4].strip()
self.is_active = (row[5].strip().lower() in ["true", "1", "yes", "y"])
self.language = settings.LANGUAGE_CODE
self.save()
self.role = desired_role
self.post_create(user)
+1 -3
View File
@@ -66,9 +66,7 @@ class ModoAPIClient(object):
"""Update instance and send stats."""
url = "{}instances/{}/".format(self._api_url, pk)
response = requests.put(url, data=data)
if response.status_code != 200:
return False
return True
response.raise_for_status()
def versions(self):
"""Fetch core and extension versions."""
+8 -2
View File
@@ -40,7 +40,9 @@ class SMTPBackend(object):
"""
user, created = User.objects.get_or_create(
username__iexact=username, defaults={
"username": username.lower(), "email": username.lower()
"username": username.lower(),
"email": username.lower(),
"language": settings.LANGUAGE_CODE
}
)
if created:
@@ -90,7 +92,11 @@ try:
return None
user, created = User.objects.get_or_create(
username__iexact=username,
defaults={'username': username.lower(), 'is_local': False}
defaults={
"username": username.lower(),
"is_local": False,
"language": settings.LANGUAGE_CODE
}
)
if created:
populate_callback(user, group)