diff options
Diffstat (limited to 'addons/test_mail/tests/test_odoobot.py')
| -rw-r--r-- | addons/test_mail/tests/test_odoobot.py | 132 |
1 files changed, 0 insertions, 132 deletions
diff --git a/addons/test_mail/tests/test_odoobot.py b/addons/test_mail/tests/test_odoobot.py deleted file mode 100644 index 2e4dc55490a..00000000000 --- a/addons/test_mail/tests/test_odoobot.py +++ /dev/null @@ -1,132 +0,0 @@ -# -*- coding: utf-8 -*- -# Part of Odoo. See LICENSE file for full copyright and licensing details. - -from unittest.mock import patch - -from odoo.addons.test_mail.tests.common import TestMailCommon, TestRecipients -from odoo.tests import tagged -from odoo.tools import mute_logger - - -@tagged("odoobot") -class TestOdoobot(TestMailCommon, TestRecipients): - - @classmethod - def setUpClass(cls): - super(TestOdoobot, cls).setUpClass() - cls.test_record = cls.env['mail.test.simple'].with_context(cls._test_context).create({'name': 'Test', 'email_from': 'ignasse@example.com'}) - - cls.odoobot = cls.env.ref("base.partner_root") - cls.message_post_default_kwargs = { - 'body': '', - 'attachment_ids': [], - 'message_type': 'comment', - 'partner_ids': [], - 'subtype_xmlid': 'mail.mt_comment' - } - cls.odoobot_ping_body = '<a href="http://odoo.com/web#model=res.partner&id=%s" class="o_mail_redirect" data-oe-id="%s" data-oe-model="res.partner" target="_blank">@OdooBot</a>' % (cls.odoobot.id, cls.odoobot.id) - cls.test_record_employe = cls.test_record.with_user(cls.user_employee) - - @mute_logger('odoo.addons.mail.models.mail_mail') - def test_fetch_listener(self): - channel = self.env['mail.channel'].with_user(self.user_employee).init_odoobot() - partners = self.env['mail.channel'].channel_fetch_listeners(channel.uuid) - odoobot = self.env.ref("base.partner_root") - odoobot_in_fetch_listeners = [partner for partner in partners if partner['id'] == odoobot.id] - self.assertEqual(len(odoobot_in_fetch_listeners), 1, 'odoobot should appear only once in channel_fetch_listeners') - - @mute_logger('odoo.addons.mail.models.mail_mail') - def test_odoobot_ping(self): - kwargs = self.message_post_default_kwargs.copy() - kwargs.update({'body': self.odoobot_ping_body, 'partner_ids': [self.odoobot.id, self.user_admin.partner_id.id]}) - - with patch('random.choice', lambda x: x[0]): - self.assertNextMessage( - self.test_record_employe.with_context({'mail_post_autofollow': True}).message_post(**kwargs), - sender=self.odoobot, - answer=False - ) - # Odoobot should not be a follower but user_employee and user_admin should - follower = self.test_record.message_follower_ids.mapped('partner_id') - self.assertNotIn(self.odoobot, follower) - self.assertIn(self.user_employee.partner_id, follower) - self.assertIn(self.user_admin.partner_id, follower) - - @mute_logger('odoo.addons.mail.models.mail_mail') - def test_onboarding_flow(self): - kwargs = self.message_post_default_kwargs.copy() - channel = self.env['mail.channel'].with_user(self.user_employee).init_odoobot() - - kwargs['body'] = 'tagada 😊' - self.assertNextMessage( - channel.message_post(**kwargs), - sender=self.odoobot, - answer=("attachment",) - ) - kwargs['body'] = '' - attachment = self.env['ir.attachment'].with_user(self.user_employee).create({ - 'datas': 'bWlncmF0aW9uIHRlc3Q=', - 'name': 'picture_of_your_dog.doc', - 'res_model': 'mail.compose.message', - }) - kwargs['attachment_ids'] = [attachment.id] - last_message = self.assertNextMessage( - channel.message_post(**kwargs), - sender=self.odoobot, - answer=("help",) - ) - kwargs['attachment_ids'] = [] - - channel.execute_command(command="help") - self.assertNextMessage( - last_message, # no message will be post with command help, use last odoobot message instead - sender=self.odoobot, - answer=("@OdooBot",) - ) - # we dont test the end of the flow since it will depends of the installed apps (livechat) - self.user_employee.odoobot_state = "idle" - kwargs['partner_ids'] = [] - kwargs['body'] = "I love you" - self.assertNextMessage( - channel.message_post(**kwargs), - sender=self.odoobot, - answer=("too human for me",) - ) - kwargs['body'] = "Go fuck yourself" - self.assertNextMessage( - channel.message_post(**kwargs), - sender=self.odoobot, - answer=("I have feelings",) - ) - - @mute_logger('odoo.addons.mail.models.mail_mail') - def test_odoobot_no_default_answer(self): - kwargs = self.message_post_default_kwargs.copy() - kwargs.update({'body': "I'm not talking to @odoobot right now", 'partner_ids': []}) - self.assertNextMessage( - self.test_record_employe.message_post(**kwargs), - answer=False - ) - - def assertNextMessage(self, message, answer=None, sender=None): - last_message = self.env['mail.message'].search([('id', '=', message.id + 1)]) - if last_message: - body = last_message.body.replace('<p>', '').replace('</p>', '') - else: - self.assertFalse(answer, "No last message found when an answer was expect") - if answer is not None: - if answer and not last_message: - self.assertTrue(False, "No last message found") - if isinstance(answer, list): - self.assertIn(body, answer) - elif isinstance(answer, tuple): - for elem in answer: - self.assertIn(elem, body) - elif not answer: - self.assertFalse(last_message, "No answer should have been post") - return - else: - self.assertEqual(body, answer) - if sender: - self.assertEqual(sender, last_message.author_id) - return last_message |
