diff --git a/src/collective/dms/mailcontent/behaviors.py b/src/collective/dms/mailcontent/behaviors.py new file mode 100644 index 0000000..76cec54 --- /dev/null +++ b/src/collective/dms/mailcontent/behaviors.py @@ -0,0 +1,26 @@ +from z3c.form.browser.radio import RadioFieldWidget +from zope.interface import alsoProvides +from zope.schema import Choice + +from plone.autoform.interfaces import IFormFieldProvider +from plone.autoform import directives as form +from plone.directives.form import default_value +from plone.supermodel import model + +from collective.dms.mailcontent import _ + + +class ISendingType(model.Schema): + """Sending type behavior""" + sending_type = Choice(title=_(u"Sending type"), + vocabulary='SendingTypes', + required=False) + form.widget(sending_type=RadioFieldWidget) + + +@default_value(field=ISendingType['sending_type']) +def sending_type_default_value(data): + return "normal" + + +alsoProvides(ISendingType, IFormFieldProvider) diff --git a/src/collective/dms/mailcontent/behaviors.zcml b/src/collective/dms/mailcontent/behaviors.zcml new file mode 100644 index 0000000..796dac3 --- /dev/null +++ b/src/collective/dms/mailcontent/behaviors.zcml @@ -0,0 +1,18 @@ + + + + + + + + + diff --git a/src/collective/dms/mailcontent/configure.zcml b/src/collective/dms/mailcontent/configure.zcml index 42391c2..d545919 100644 --- a/src/collective/dms/mailcontent/configure.zcml +++ b/src/collective/dms/mailcontent/configure.zcml @@ -10,6 +10,7 @@ + diff --git a/src/collective/dms/mailcontent/profiles/testing/types.xml b/src/collective/dms/mailcontent/profiles/testing/types.xml new file mode 100644 index 0000000..9baf38f --- /dev/null +++ b/src/collective/dms/mailcontent/profiles/testing/types.xml @@ -0,0 +1,5 @@ + + + Controls the available content types in your portal + + diff --git a/src/collective/dms/mailcontent/profiles/testing/types/testtype.xml b/src/collective/dms/mailcontent/profiles/testing/types/testtype.xml new file mode 100644 index 0000000..7e5bc3a --- /dev/null +++ b/src/collective/dms/mailcontent/profiles/testing/types/testtype.xml @@ -0,0 +1,41 @@ + + + Test type + None + string:${portal_url}/folder_icon.png + testtype + string:${folder_url}/++add++testtype + + view + True + True + + False + view + + + + False + cmf.AddPortalContent + + + + + + + + + + + + + + + + + diff --git a/src/collective/dms/mailcontent/tests/test_behaviors.py b/src/collective/dms/mailcontent/tests/test_behaviors.py new file mode 100644 index 0000000..562ae6e --- /dev/null +++ b/src/collective/dms/mailcontent/tests/test_behaviors.py @@ -0,0 +1,44 @@ +# -*- coding: utf8 -*- +import unittest2 as unittest + +from zope.component import getUtility + +from plone.behavior.interfaces import IBehavior +from plone.autoform.interfaces import IFormFieldProvider +from plone.app.testing.helpers import setRoles +from plone.app.testing.interfaces import TEST_USER_NAME, TEST_USER_ID + +from ecreall.helpers.testing.base import BaseTest + +from collective.dms.mailcontent.testing import INTEGRATION +from collective.dms.mailcontent.behaviors import ISendingType, sending_type_default_value + + +class TestBehaviors(unittest.TestCase, BaseTest): + """Tests behaviors""" + + layer = INTEGRATION + + def setUp(self): + super(TestBehaviors, self).setUp() + self.portal = self.layer['portal'] + setRoles(self.portal, TEST_USER_ID, ['Manager']) + self.login(TEST_USER_NAME) + self.portal.invokeFactory('testtype', 'testitem') + self.testitem = self.portal['testitem'] + + def test_behaviors_installation(self): + sending_type_behavior = getUtility(IBehavior, + name='collective.dms.mailcontent.behaviors.ISendingType') + self.assertEqual(sending_type_behavior.interface, ISendingType) + IFormFieldProvider.providedBy(sending_type_behavior.interface) + + def test_sending_type_fields(self): + item = self.testitem + self.assertIsNone(item.getAttributes()) + self.assertTrue(hasattr(item, 'sending_type')) + item.sending_type = 'registered' + self.assertEqual(item.sending_type, 'registered') + + def test_sending_type_default_value(self): + self.assertEqual(sending_type_default_value(''), 'normal') diff --git a/src/collective/dms/mailcontent/vocabulary.py b/src/collective/dms/mailcontent/vocabulary.py new file mode 100644 index 0000000..4cbff05 --- /dev/null +++ b/src/collective/dms/mailcontent/vocabulary.py @@ -0,0 +1,20 @@ +from five import grok + +from zope.schema.vocabulary import SimpleVocabulary +from zope.schema.interfaces import IVocabularyFactory + +from . import _ + + +class SendingTypes(grok.GlobalUtility): + grok.name("SendingTypes") + grok.implements(IVocabularyFactory) + + def __call__(self, context): + terms = [] + types = [('normal', _("Normal")), + ('registered', _("Registered"))] + for (token, value) in types: + term = SimpleVocabulary.createTerm(token, token, value) + terms.append(term) + return SimpleVocabulary(terms)