Added a new field Person.plain as a fallback for names where plain_name() produces the wrong result. Fixes issue #3020.
- Legacy-Id: 18147
This commit is contained in:
parent
1e1f056053
commit
c6cdbf8ca8
|
@ -214,7 +214,7 @@ class IetfAuthTests(TestCase):
|
||||||
self.register_and_verify(email)
|
self.register_and_verify(email)
|
||||||
settings.LIST_ACCOUNT_DELAY = saved_delay
|
settings.LIST_ACCOUNT_DELAY = saved_delay
|
||||||
|
|
||||||
def test_profile(self):
|
def test_ietfauth_profile(self):
|
||||||
EmailFactory(person__user__username='plain')
|
EmailFactory(person__user__username='plain')
|
||||||
GroupFactory(acronym='mars')
|
GroupFactory(acronym='mars')
|
||||||
|
|
||||||
|
@ -234,6 +234,7 @@ class IetfAuthTests(TestCase):
|
||||||
|
|
||||||
base_data = {
|
base_data = {
|
||||||
"name": "Test Nãme",
|
"name": "Test Nãme",
|
||||||
|
"plain": "",
|
||||||
"ascii": "Test Name",
|
"ascii": "Test Name",
|
||||||
"ascii_short": "T. Name",
|
"ascii_short": "T. Name",
|
||||||
"affiliation": "Test Org",
|
"affiliation": "Test Org",
|
||||||
|
@ -247,7 +248,7 @@ class IetfAuthTests(TestCase):
|
||||||
r = self.client.post(url, faulty_ascii)
|
r = self.client.post(url, faulty_ascii)
|
||||||
self.assertEqual(r.status_code, 200)
|
self.assertEqual(r.status_code, 200)
|
||||||
q = PyQuery(r.content)
|
q = PyQuery(r.content)
|
||||||
self.assertTrue(len(q("form .has-error")) > 0)
|
self.assertTrue(len(q("form .has-error")) == 1)
|
||||||
|
|
||||||
# edit details - blank ASCII
|
# edit details - blank ASCII
|
||||||
blank_ascii = base_data.copy()
|
blank_ascii = base_data.copy()
|
||||||
|
@ -255,13 +256,14 @@ class IetfAuthTests(TestCase):
|
||||||
r = self.client.post(url, blank_ascii)
|
r = self.client.post(url, blank_ascii)
|
||||||
self.assertEqual(r.status_code, 200)
|
self.assertEqual(r.status_code, 200)
|
||||||
q = PyQuery(r.content)
|
q = PyQuery(r.content)
|
||||||
self.assertTrue(len(q("form .has-error")) > 0) # we get a warning about reconstructed name
|
self.assertTrue(len(q("form div.has-error ")) == 1) # we get a warning about reconstructed name
|
||||||
self.assertEqual(q("input[name=ascii]").val(), base_data["ascii"])
|
self.assertEqual(q("input[name=ascii]").val(), base_data["ascii"])
|
||||||
|
|
||||||
# edit details
|
# edit details
|
||||||
r = self.client.post(url, base_data)
|
r = self.client.post(url, base_data)
|
||||||
self.assertEqual(r.status_code, 200)
|
self.assertEqual(r.status_code, 200)
|
||||||
person = Person.objects.get(user__username=username)
|
person = Person.objects.get(user__username=username)
|
||||||
|
|
||||||
self.assertEqual(person.name, "Test Nãme")
|
self.assertEqual(person.name, "Test Nãme")
|
||||||
self.assertEqual(person.ascii, "Test Name")
|
self.assertEqual(person.ascii, "Test Name")
|
||||||
self.assertEqual(Person.objects.filter(alias__name="Test Name", user__username=username).count(), 1)
|
self.assertEqual(Person.objects.filter(alias__name="Test Name", user__username=username).count(), 1)
|
||||||
|
|
|
@ -39,7 +39,8 @@ class Person(models.Model):
|
||||||
time = models.DateTimeField(default=datetime.datetime.now) # When this Person record entered the system
|
time = models.DateTimeField(default=datetime.datetime.now) # When this Person record entered the system
|
||||||
# The normal unicode form of the name. This must be
|
# The normal unicode form of the name. This must be
|
||||||
# set to the same value as the ascii-form if equal.
|
# set to the same value as the ascii-form if equal.
|
||||||
name = models.CharField("Full Name (Unicode)", max_length=255, db_index=True, help_text="Preferred form of name.")
|
name = models.CharField("Full Name (Unicode)", max_length=255, db_index=True, help_text="Preferred long form of name.")
|
||||||
|
plain = models.CharField("Plain Name (Unicode)", max_length=64, default='', blank=True, help_text="Preferred plain form of name, if different from the automatic plain form.")
|
||||||
# The normal ascii-form of the name.
|
# The normal ascii-form of the name.
|
||||||
ascii = models.CharField("Full Name (ASCII)", max_length=255, help_text="Name as rendered in ASCII (Latin, unaccented) characters.")
|
ascii = models.CharField("Full Name (ASCII)", max_length=255, help_text="Name as rendered in ASCII (Latin, unaccented) characters.")
|
||||||
# The short ascii-form of the name. Also in alias table if non-null
|
# The short ascii-form of the name. Also in alias table if non-null
|
||||||
|
@ -66,7 +67,10 @@ class Person(models.Model):
|
||||||
return (first and first[0]+"." or "")+(middle or "")+" "+last+(suffix and " "+suffix or "")
|
return (first and first[0]+"." or "")+(middle or "")+" "+last+(suffix and " "+suffix or "")
|
||||||
def plain_name(self):
|
def plain_name(self):
|
||||||
if not hasattr(self, '_cached_plain_name'):
|
if not hasattr(self, '_cached_plain_name'):
|
||||||
self._cached_plain_name = plain_name(self.name)
|
if self.plain:
|
||||||
|
self._cached_plain_name = self.plain
|
||||||
|
else:
|
||||||
|
self._cached_plain_name = plain_name(self.name)
|
||||||
return self._cached_plain_name
|
return self._cached_plain_name
|
||||||
def ascii_name(self):
|
def ascii_name(self):
|
||||||
if not hasattr(self, '_cached_ascii_name'):
|
if not hasattr(self, '_cached_ascii_name'):
|
||||||
|
|
|
@ -49,7 +49,7 @@ class PersonTests(TestCase):
|
||||||
EmailFactory(person=person, primary=False, active=False)
|
EmailFactory(person=person, primary=False, active=False)
|
||||||
self.assertTrue(primary.address in person.formatted_email())
|
self.assertTrue(primary.address in person.formatted_email())
|
||||||
|
|
||||||
def test_profile(self):
|
def test_person_profile(self):
|
||||||
person = PersonFactory(with_bio=True)
|
person = PersonFactory(with_bio=True)
|
||||||
|
|
||||||
self.assertTrue(person.photo is not None)
|
self.assertTrue(person.photo is not None)
|
||||||
|
|
|
@ -155,6 +155,7 @@
|
||||||
{% endfor %}
|
{% endfor %}
|
||||||
|
|
||||||
{% bootstrap_field person_form.name layout="horizontal" %}
|
{% bootstrap_field person_form.name layout="horizontal" %}
|
||||||
|
{% bootstrap_field person_form.plain layout="horizontal" %}
|
||||||
{% bootstrap_field person_form.ascii layout="horizontal" %}
|
{% bootstrap_field person_form.ascii layout="horizontal" %}
|
||||||
{% if roles %}
|
{% if roles %}
|
||||||
{% bootstrap_field person_form.biography layout="horizontal" %}
|
{% bootstrap_field person_form.biography layout="horizontal" %}
|
||||||
|
|
Loading…
Reference in a new issue