diff --git a/src/collective/contact/core/content/directory.py b/src/collective/contact/core/content/directory.py index 2248c93..da0479e 100644 --- a/src/collective/contact/core/content/directory.py +++ b/src/collective/contact/core/content/directory.py @@ -13,14 +13,16 @@ from zope.interface import Interface +def is_valid_identifier(identifier): + idnormalizer = getUtility(IIDNormalizer) + return idnormalizer.normalize(identifier) == identifier + + class INameTokenTableRowSchema(Interface): """Schema for dict rows used in DataGridFields name is the 'real' name token is the token used in the vocabularies """ - def is_valid_identifier(identifier): - idnormalizer = getUtility(IIDNormalizer) - return idnormalizer.normalize(identifier) == identifier name = schema.TextLine(title=_(u"Name")) token = schema.TextLine(title=_(u"Token"), constraint=is_valid_identifier) diff --git a/src/collective/contact/core/tests/test_content_types.py b/src/collective/contact/core/tests/test_content_types.py index caf39d8..644a3c6 100644 --- a/src/collective/contact/core/tests/test_content_types.py +++ b/src/collective/contact/core/tests/test_content_types.py @@ -1,5 +1,6 @@ # -*- coding: utf8 -*- +from collective.contact.core.content.directory import is_valid_identifier from collective.contact.core.interfaces import IContactCoreParameters from collective.contact.core.testing import INTEGRATION from ecreall.helpers.testing.base import BaseTest @@ -51,6 +52,16 @@ def test_directory(self): self.assertIn({'name': 'Regiment', 'token': 'regiment'}, mydirectory.organization_levels) + def test_is_valid_identifier(self): + self.assertFalse(is_valid_identifier('Toto')) + self.assertTrue(is_valid_identifier('toto')) + self.assertTrue(is_valid_identifier('toto56')) + self.assertFalse(is_valid_identifier('toto 56')) + self.assertTrue(is_valid_identifier('toto-56')) + self.assertFalse(is_valid_identifier('toto-56@')) + self.assertFalse(is_valid_identifier('toto-56à')) + self.assertFalse(is_valid_identifier('toto-56É')) + class TestPerson(TestContentTypes):