Add ISendingType behavior (with vocabulary)

This commit is contained in:
Cédric Messiant 2013-06-26 15:28:29 +02:00
parent a1d6f4ed58
commit 8f2ae6dcf0
7 changed files with 155 additions and 0 deletions

View File

@ -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)

View File

@ -0,0 +1,18 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:plone="http://namespaces.plone.org/plone"
xmlns:i18n="http://namespaces.zope.org/i18n"
xmlns:grok="http://namespaces.zope.org/grok"
i18n_domain="collective.dms.mailcontent">
<include package="plone.behavior" file="meta.zcml" />
<grok:grok package=".behaviors" />
<plone:behavior
title="SendingType"
description="Sending type behavior"
provides=".behaviors.ISendingType"
/>
</configure>

View File

@ -10,6 +10,7 @@
<include package="five.grok" />
<include package=".upgrades" />
<include file="behaviors.zcml" />
<grok:grok package="." />

View File

@ -0,0 +1,5 @@
<?xml version="1.0"?>
<object name="portal_types" meta_type="Plone Types Tool">
<property name="title">Controls the available content types in your portal</property>
<object name="testtype" meta_type="Dexterity FTI"/>
</object>

View File

@ -0,0 +1,41 @@
<?xml version="1.0"?>
<object name="testtype" meta_type="Dexterity FTI" i18n:domain="plone"
xmlns:i18n="http://xml.zope.org/namespaces/i18n">
<property name="title" i18n:translate="">Test type</property>
<property name="description" i18n:translate="">None</property>
<property name="icon_expr">string:${portal_url}/folder_icon.png</property>
<property name="factory">testtype</property>
<property name="add_view_expr">string:${folder_url}/++add++testtype</property>
<property name="link_target"></property>
<property name="immediate_view">view</property>
<property name="global_allow">True</property>
<property name="filter_content_types">True</property>
<property name="allowed_content_types" />
<property name="allow_discussion">False</property>
<property name="default_view">view</property>
<property name="view_methods">
<element value="view"/>
</property>
<property name="default_view_fallback">False</property>
<property name="add_permission">cmf.AddPortalContent</property>
<property name="behaviors">
<element value="collective.dms.mailcontent.behaviors.ISendingType" />
</property>
<property name="schema" />
<!-- DO NOT use a model_source or it removes manually added fields while reapplying the profile -->
<!--property name="model_source" /-->
<alias from="(Default)" to="(dynamic view)"/>
<alias from="edit" to="@@edit"/>
<alias from="sharing" to="@@sharing"/>
<alias from="view" to="(selected layout)"/>
<action title="View" action_id="view" category="object" condition_expr=""
description="" icon_expr="" link_target="" url_expr="string:${object_url}"
visible="True">
<permission value="View"/>
</action>
<action title="Edit" action_id="edit" category="object" condition_expr=""
description="" icon_expr="" link_target=""
url_expr="string:${object_url}/edit" visible="True">
<permission value="Modify portal content"/>
</action>
</object>

View File

@ -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')

View File

@ -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)