[TEST] mail: added tests for the composer, includes a first bench of tests for notifications and send emails.

bzr revid: tde@openerp.com-20120824161117-abur02jlgs08my21
This commit is contained in:
Thibault Delavallée 2012-08-24 18:11:17 +02:00
parent d583b98a97
commit d19ad1ff4b
1 changed files with 58 additions and 24 deletions

View File

@ -20,6 +20,7 @@
##############################################################################
from openerp.tests import common
import tools
MAIL_TEMPLATE = """Return-Path: <whatever-2a840@postmaster.twitter.com>
To: {to}
@ -78,6 +79,9 @@ class test_mail(common.TransactionCase):
self.res_users = self.registry('res.users')
self.res_partner = self.registry('res.partner')
# Install mock SMTP gateway
self.registry('ir.mail_server').send_email = lambda *a,**kwargs: True
# groups@.. will cause the creation of new mail groups
self.mail_group_model_id = self.ir_model.search(self.cr, self.uid, [('model','=', 'mail.group')])[0]
self.mail_alias.create(self.cr, self.uid, {'alias_name': 'groups',
@ -235,41 +239,71 @@ class test_mail(common.TransactionCase):
cr, uid = self.cr, self.uid
mail_compose = self.registry('mail.compose.message')
user_admin = self.res_users.browse(cr, uid, uid)
self.res_users.write(cr, uid, [uid], {'signature': 'Admin'})
user_admin.refresh()
group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id)
# print 'pigs message_ids: %s' % group_pigs.message_ids
# print 'pigs follower_ids: %s' % group_pigs.message_follower_ids
# Create partner Bert Poilu
partner_bert_id = self.res_partner.create(cr, uid, {'name': 'Bert Poilu', 'email': 'bert@poil.poil'})
partner_raoul_id = self.res_partner.create(cr, uid, {'name': 'Raoul Grosbedon'})
# Mail data
_subject = 'Pigs'
_mail_subject = '%s posted a comment on %s' % (user_admin.name, group_pigs.name)
_body_text = 'Pigs rules'
_body_html = '<b>Pigs</b> rules'
# Create partners
# 0 - Create an email address for Admin, to check email sending
self.res_users.write(cr, uid, [uid], {'email': 'a@a'})
# 1 - Bert Tartopoils, with email, should receive emails for comments and emails
partner_bert_id = self.res_partner.create(cr, uid, {'name': 'Bert Tartopoils', 'email': 'b@b'})
# 2 - Raoul Grosbedon, without email, to test email verification; should receive emails for every message
partner_raoul_id = self.res_partner.create(cr, uid, {'name': 'Raoul Grosbedon', 'notification_email_pref': 'all'})
# 3 - Roger Poilvache, with email, should never receive emails
partner_roger_id = self.res_partner.create(cr, uid, {'name': 'Roger Poilvache', 'email': 'r@r', 'notification_email_pref': 'none'})
# Create a new comment on group_pigs
compose_id = mail_compose.create(cr, uid,
{'subject': 'Pigs', 'body_text': 'Pigs rules', 'partner_ids': [(4, partner_bert_id), (4, partner_raoul_id)]},
{'subject': _subject, 'body_text': _body_text, 'partner_ids': [(4, partner_bert_id), (4, partner_raoul_id), (4, partner_roger_id)]},
{'mail.compose.message': 'comment', 'default_model': 'mail.group', 'default_res_id': self.group_pigs_id})
# print 'wizard id: %s' % compose_id
compose = mail_compose.browse(cr, uid, compose_id)
# print 'wizard partner_ids: %s' % compose.partner_ids
self.assertTrue(compose.model == 'mail.group' and compose.res_id == self.group_pigs_id)
self.assertTrue(compose.model == 'mail.group' and compose.res_id == self.group_pigs_id,
'Wizard message has model %s and res_id %s; should be mail.group and %s' % (compose.model, compose.res_id, self.group_pigs_id))
# Send the comment
# Post the comment, get created message
mail_compose.send_mail(cr, uid, [compose_id])
group_pigs.refresh()
# print 'pigs message_ids: %s' % group_pigs.message_ids[0]
new_message = group_pigs.message_ids[0]
new_partner_ids = [partner.id for partner in new_message.partner_ids]
first_com = group_pigs.message_ids[0]
# print 'pigs new_message subject: %s' % new_message.subject
# print 'pigs new_message body: %s' % new_message.body
# print 'pigs new_message partner_ids: %s' % new_message.partner_ids
notif_ids = self.mail_notification.search(cr, uid, [('message_id', '=', new_message.id)])
# print notif_ids
# Check message content
self.assertTrue(first_com.subject == False and first_com.body == _body_text,
'Posted comment subject is %s and body is %s; should be False and %s' % (first_com.subject, first_com.body, _body_text))
# Message partners = notified people = writer + partner_ids
self.assertTrue(len(new_partner_ids) == 3, 'There should be 3 partners linked to the newly posted comment.')
self.assertTrue(len(notif_ids) == 3, 'There should be only 3 entries in mail_notification')
self.assertTrue(all(id in [user_admin.partner_id.id, partner_bert_id, partner_raoul_id] for id in new_partner_ids),
'Admin, Bert and Roaul should be the 3 partners of the newly created message')
first_com_pids = [partner.id for partner in first_com.partner_ids]
notif_ids = self.mail_notification.search(cr, uid, [('message_id', '=', first_com.id)])
self.assertTrue(len(first_com_pids) == 4, 'There are %s partners linked to the newly posted comment; should be 4' % (len(first_com_pids)))
self.assertTrue(len(notif_ids) == 4, 'There are %s 3 entries in mail_notification: should be 4' % (len(notif_ids)))
self.assertTrue(all(id in [user_admin.partner_id.id, partner_bert_id, partner_raoul_id, partner_roger_id] for id in first_com_pids),
'Admin, Bert Raoul and Roger should be the 4 partners of the newly created message')
# Fetch latest created email, that should be the email send to partners
mail_ids = self.mail_mail.search(cr, uid, [], limit=1)
mail = self.mail_mail.browse(cr, uid, mail_ids[0])
mail_emails = tools.email_split(mail.email_to)
# Check email subject, body, and email_to
expected_emails = ['a@a', 'b@b']
self.assertTrue(mail.subject == _mail_subject and _body_text in mail.body,
'Send email subject is \'%s\' and should be %s; body is %s and should contain %s' % (mail.subject, _mail_subject, mail.body, _body_text))
self.assertTrue(all(email in mail_emails for email in expected_emails) and len(mail_emails) == 2,
'Send email emails are %s; should be %s' % (mail_emails, expected_emails))
# Create a reply to the last comment, with default partners
compose_id = mail_compose.create(cr, uid,
{}, {'mail.compose.message.mode': 'reply', 'default_model': 'mail.thread', 'default_res_id': self.group_pigs_id,
'active_id': first_com.id})
compose = mail_compose.browse(cr, uid, compose_id)
self.assertTrue(compose.model == 'mail.group' and compose.res_id == self.group_pigs_id,
'Wizard message has model: %s and res_id:%s; should be mail.group and %s' % (compose.model, compose.res_id, self.group_pigs_id))
self.assertTrue(compose.parent_id.id == first_com.id and len(compose.partner_ids) == 5,
'Wizard parent_id is %d; should be %d; or wrong partner_ids (TO BE CONTINUED)' % (compose.parent_id.id, first_com.id))