From 25734f2cfd0bb270e4834a2d0c77511795550fe6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 13 Sep 2012 12:35:29 +0200 Subject: [PATCH] [IMP] mail, portal: improved tests. A new TestMailMockup class has been defined, holding the various mockups for the mail gateway, to avoid having duplicate code in tests using emails. Added tests in portal about the invite mechanism. bzr revid: tde@openerp.com-20120913103529-410g9sk32sbbmkgn --- addons/mail/tests/test_mail.py | 28 ++++++++----- addons/portal/tests/test_portal.py | 65 +++++++++++++++++------------- 2 files changed, 56 insertions(+), 37 deletions(-) diff --git a/addons/mail/tests/test_mail.py b/addons/mail/tests/test_mail.py index bf9520f0e68..1fab5dd1732 100644 --- a/addons/mail/tests/test_mail.py +++ b/addons/mail/tests/test_mail.py @@ -84,7 +84,7 @@ Sylvie """ -class test_mail(common.TransactionCase): +class TestMailMockups(common.TransactionCase): def _mock_smtp_gateway(self, *args, **kwargs): return True @@ -98,6 +98,24 @@ class test_mail(common.TransactionCase): self._build_email_kwargs_list.append(kwargs) return self._build_email(*args, **kwargs) + def setUp(self): + super(TestMailMockups, self).setUp() + # Install mock SMTP gateway + self._init_mock_build_email() + self._build_email = self.registry('ir.mail_server').build_email + self.registry('ir.mail_server').build_email = self._mock_build_email + self._send_email = self.registry('ir.mail_server').send_email + self.registry('ir.mail_server').send_email = self._mock_smtp_gateway + + def tearDown(self): + # Remove mocks + self.registry('ir.mail_server').build_email = self._build_email + self.registry('ir.mail_server').send_email = self._send_email + super(TestMailMockups, self).tearDown() + + +class test_mail(TestMailMockups): + def _mock_send_get_mail_body(self, *args, **kwargs): # def _send_get_mail_body(self, cr, uid, mail, partner=None, context=None) body = tools.append_content_to_html(args[2].body_html, kwargs.get('partner').name if kwargs.get('partner') else 'No specific partner') @@ -116,12 +134,6 @@ class test_mail(common.TransactionCase): self.res_users = self.registry('res.users') self.res_partner = self.registry('res.partner') - # Install mock SMTP gateway - self._init_mock_build_email() - self._build_email = self.registry('ir.mail_server').build_email - self.registry('ir.mail_server').build_email = self._mock_build_email - self._send_email = self.registry('ir.mail_server').send_email - self.registry('ir.mail_server').send_email = self._mock_smtp_gateway # Mock send_get_mail_body to test its functionality without other addons override self._send_get_mail_body = self.registry('mail.mail').send_get_mail_body self.registry('mail.mail').send_get_mail_body = self._mock_send_get_mail_body @@ -136,8 +148,6 @@ class test_mail(common.TransactionCase): def tearDown(self): # Remove mocks - self.registry('ir.mail_server').build_email = self._build_email - self.registry('ir.mail_server').send_email = self._send_email self.registry('mail.mail').send_get_mail_body = self._send_get_mail_body super(test_mail, self).tearDown() diff --git a/addons/portal/tests/test_portal.py b/addons/portal/tests/test_portal.py index b98614de5e9..5f2875711df 100644 --- a/addons/portal/tests/test_portal.py +++ b/addons/portal/tests/test_portal.py @@ -19,22 +19,12 @@ # ############################################################################## -from openerp.tests import common +from openerp.addons.mail.tests import test_mail +# from openerp.tests import common +from openerp.tools import append_content_to_html -class test_portal(common.TransactionCase): - - def _mock_smtp_gateway(self, *args, **kwargs): - return True - - def _mock_build_email(self, *args, **kwargs): - self._build_email_args_list.append(args) - self._build_email_kwargs_list.append(kwargs) - return self._build_email(*args, **kwargs) - - def _init_mock_build_email(self): - self._build_email_args_list = [] - self._build_email_kwargs_list = [] +class test_portal(test_mail.TestMailMockups): def setUp(self): super(test_portal, self).setUp() @@ -44,23 +34,42 @@ class test_portal(common.TransactionCase): self.res_users = self.registry('res.users') self.res_partner = self.registry('res.partner') - # Install mock SMTP gateway - self._init_mock_build_email() - self._build_email = self.registry('ir.mail_server').build_email - self.registry('ir.mail_server').build_email = self._mock_build_email - self._send_email = self.registry('ir.mail_server').send_email - self.registry('ir.mail_server').send_email = self._mock_smtp_gateway - # create a 'pigs' group that will be used through the various tests self.group_pigs_id = self.mail_group.create(self.cr, self.uid, {'name': 'Pigs', 'description': 'Fans of Pigs, unite !'}) - def tearDown(self): - # Remove mocks - self.registry('ir.mail_server').build_email = self._build_email - self.registry('ir.mail_server').send_email = self._send_email - super(test_portal, self).tearDown() - def test_00_mail_invite(self): cr, uid = self.cr, self.uid - print 'cacaprout' + user_admin = self.res_users.browse(cr, uid, uid) + self.mail_invite = self.registry('mail.wizard.invite') + base_url = self.registry('ir.config_parameter').get_param(cr, uid, 'web.base.url', default='') + portal_ref = self.registry('ir.model.data').get_object_reference(cr, uid, 'portal', 'portal') + portal_id = portal_ref and portal_ref[1] or False + + # 0 - Admin + p_a_id = user_admin.partner_id.id + # 1 - Bert Tartopoils, with email, should receive emails for comments and emails + p_b_id = self.res_partner.create(cr, uid, {'name': 'Bert Tartopoils', 'email': 'b@b'}) + + # ---------------------------------------- + # CASE1: invite Bert + # ---------------------------------------- + + _sent_email_subject = 'Invitation to follow Pigs' + _sent_email_body = append_content_to_html('
You have been invited to follow Pigs.
', + base_url + '/login?action=signin&partner_id=%s&group=%s&key=%s' % (p_b_id, portal_id, 1234)) + + # Do: create a mail_wizard_invite, validate it + self._init_mock_build_email() + mail_invite_id = self.mail_invite.create(cr, uid, {'partner_ids': [(4, p_b_id)]}, {'default_res_model': 'mail.group', 'default_res_id': self.group_pigs_id}) + self.mail_invite.add_followers(cr, uid, [mail_invite_id]) + group_pigs = self.mail_group.browse(cr, uid, self.group_pigs_id) + + # Test: Pigs followers should contain Admin and Bert + follower_ids = [follower.id for follower in group_pigs.message_follower_ids] + self.assertEqual(set(follower_ids), set([p_a_id, p_b_id]), 'Pigs followers after invite is incorrect') + # Test: sent email subject, body + self.assertEqual(len(self._build_email_kwargs_list), 1, 'sent email number incorrect, should be only for Bert') + for sent_email in self._build_email_kwargs_list: + self.assertEqual(sent_email.get('subject'), _sent_email_subject, 'sent email subject incorrect') + self.assertEqual(sent_email.get('body'), _sent_email_body, 'sent email body incorrect')