Commit 5e7ad3b7 authored by Jérome Perrin's avatar Jérome Perrin

ERP5: check constraints in notificiation tool's sendMessage

parent caa86d0c
...@@ -233,6 +233,7 @@ class NotificationTool(BaseTool): ...@@ -233,6 +233,7 @@ class NotificationTool(BaseTool):
attachment_list=None, attachment_document_list=None, attachment_list=None, attachment_document_list=None,
notifier_list=None, priority_level=None, notifier_list=None, priority_level=None,
store_as_event=False, store_as_event=False,
check_consistency=True,
message_text_format='text/plain', message_text_format='text/plain',
event_keyword_argument_dict=None, event_keyword_argument_dict=None,
portal_type_list=None): portal_type_list=None):
...@@ -271,6 +272,13 @@ class NotificationTool(BaseTool): ...@@ -271,6 +272,13 @@ class NotificationTool(BaseTool):
store_as_event -- whenever CRM is available, store store_as_event -- whenever CRM is available, store
notifications as events notifications as events
check_consistency -- Check that the created events match their constraints.
If any of the event have an unsatisified constraint, a
ValueError is raised.
Note that if `store_as_event` is true, some draft
events are created anyway, so caller may want to
abort transaction.
event_keyword_argument_dict -- additional keyword arguments which is used for event_keyword_argument_dict -- additional keyword arguments which is used for
constructor of event document. constructor of event document.
...@@ -317,12 +325,6 @@ class NotificationTool(BaseTool): ...@@ -317,12 +325,6 @@ class NotificationTool(BaseTool):
raise IndexError, "Can't find person document which reference is '%s'" % person raise IndexError, "Can't find person document which reference is '%s'" % person
else: else:
person = person_value person = person_value
email_value = person.getDefaultEmailValue()
if email_value is None:
# For backward compatibility. I recommend to use ValueError.(yusei)
raise AttributeError, "Can't find default email address of %s" % person.getRelativeUrl()
if not email_value.asText():
raise AttributeError, "Default email address of %s is empty" % person.getRelativeUrl()
to_person_list.append(person) to_person_list.append(person)
# prepare low-level arguments if needed. # prepare low-level arguments if needed.
...@@ -367,6 +369,12 @@ class NotificationTool(BaseTool): ...@@ -367,6 +369,12 @@ class NotificationTool(BaseTool):
event.setAggregateValueList(attachment_document_list) event.setAggregateValueList(attachment_document_list)
event_list.append(event) event_list.append(event)
if check_consistency:
for event in event_list:
constraint_message_list = event.checkConsistency()
if constraint_message_list:
raise ValueError(constraint_message_list)
for event in event_list: for event in event_list:
if event.isTempObject() or (not portal.portal_workflow.isTransitionPossible(event, 'start')): if event.isTempObject() or (not portal.portal_workflow.isTransitionPossible(event, 'start')):
event.send(**low_level_kw) event.send(**low_level_kw)
......
...@@ -369,11 +369,9 @@ class TestNotificationTool(ERP5TypeTestCase): ...@@ -369,11 +369,9 @@ class TestNotificationTool(ERP5TypeTestCase):
""" """
Check that notification fails when the destination hasn't a email adress Check that notification fails when the destination hasn't a email adress
""" """
self.assertRaises( with self.assertRaises(ValueError):
AttributeError, self.portal.portal_notifications.sendMessage(
self.portal.portal_notifications.sendMessage, recipient='userWithoutEmail', subject='Subject', message='Message')
recipient='userWithoutEmail', subject='Subject', message='Message'
)
def test_08_PersonWithoutEmail(self): def test_08_PersonWithoutEmail(self):
sequence_list = SequenceList() sequence_list = SequenceList()
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment