205 lines
9.9 KiB
Python
205 lines
9.9 KiB
Python
# -*- coding: utf-8 -*-
|
|
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import Command
|
|
from odoo.addons.sms.tests.common import SMSCommon
|
|
from odoo.addons.test_mail_sms.tests.common import TestSMSRecipients
|
|
from odoo.tests import tagged
|
|
from odoo.tools import mute_logger
|
|
|
|
|
|
class TestSMSActionsCommon(SMSCommon, TestSMSRecipients):
|
|
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super(TestSMSActionsCommon, cls).setUpClass()
|
|
cls.test_record = cls.env['mail.test.sms'].with_context(**cls._test_context).create({
|
|
'name': 'Test',
|
|
'customer_id': cls.partner_1.id,
|
|
})
|
|
cls.test_record = cls._reset_mail_context(cls.test_record)
|
|
cls.msg = cls.test_record.message_post(body='TEST BODY', author_id=cls.partner_employee.id)
|
|
cls.sms_p1 = cls.env['sms.sms'].create({
|
|
'body': 'TEST BODY',
|
|
'failure_type': 'sms_number_format',
|
|
'mail_message_id': cls.msg.id,
|
|
'uuid': 'e91d874e-d55f-4cf6-9d08-38ff912c6efd',
|
|
'number': cls.partner_1.mobile,
|
|
'partner_id': cls.partner_1.id,
|
|
'state': 'error',
|
|
})
|
|
cls.notif_p1 = cls.env['mail.notification'].create({
|
|
'author_id': cls.msg.author_id.id,
|
|
'mail_message_id': cls.msg.id,
|
|
'res_partner_id': cls.partner_1.id,
|
|
'sms_id_int': cls.sms_p1.id,
|
|
'sms_number': cls.partner_1.mobile,
|
|
'sms_tracker_ids': [Command.create({'sms_uuid': cls.sms_p1.uuid})],
|
|
'notification_type': 'sms',
|
|
'notification_status': 'exception',
|
|
'failure_type': 'sms_number_format',
|
|
})
|
|
cls.sms_p2 = cls.env['sms.sms'].create({
|
|
'body': 'TEST BODY',
|
|
'failure_type': 'sms_credit',
|
|
'mail_message_id': cls.msg.id,
|
|
'number': cls.partner_2.mobile,
|
|
'partner_id': cls.partner_2.id,
|
|
'state': 'error',
|
|
'uuid': 'bab41209-7b14-48c1-ae21-c45ceed7e728',
|
|
})
|
|
cls.notif_p2 = cls.env['mail.notification'].create({
|
|
'author_id': cls.msg.author_id.id,
|
|
'mail_message_id': cls.msg.id,
|
|
'res_partner_id': cls.partner_2.id,
|
|
'sms_id_int': cls.sms_p2.id,
|
|
'sms_number': cls.partner_2.mobile,
|
|
'sms_tracker_ids': [Command.create({'sms_uuid': cls.sms_p2.uuid})],
|
|
'notification_type': 'sms',
|
|
'notification_status': 'exception',
|
|
'failure_type': 'sms_credit',
|
|
})
|
|
|
|
|
|
@tagged('sms_management')
|
|
class TestSMSActions(TestSMSActionsCommon):
|
|
|
|
def test_sms_notify_cancel(self):
|
|
self._reset_bus()
|
|
|
|
with self.with_user('employee'):
|
|
self.test_record.with_user(self.env.user).notify_cancel_by_type('sms')
|
|
self.assertEqual((self.notif_p1 | self.notif_p2).mapped('notification_status'), ['canceled', 'canceled'])
|
|
|
|
self.assertMessageBusNotifications(self.msg)
|
|
|
|
def test_sms_set_cancel(self):
|
|
self._reset_bus()
|
|
self.sms_p1.action_set_canceled()
|
|
self.assertEqual(self.sms_p1.state, 'canceled')
|
|
|
|
self.assertMessageBusNotifications(self.msg)
|
|
self.assertSMSNotification([
|
|
{'partner': self.partner_1, 'number': self.notif_p1.sms_number, 'state': 'canceled', 'failure_type': 'sms_number_format'},
|
|
{'partner': self.partner_2, 'number': self.notif_p2.sms_number, 'state': 'exception', 'failure_type': 'sms_credit'}
|
|
], 'TEST BODY', self.msg, check_sms=False) # do not check new sms as they already exist
|
|
|
|
self._reset_bus()
|
|
self.sms_p2.with_context(sms_skip_msg_notification=True).action_set_canceled()
|
|
self.assertEqual(self.sms_p2.state, 'canceled')
|
|
|
|
self.assertEqual(self.env['bus.bus'].search([]), self.env['bus.bus'], 'SMS: no bus notifications unless asked')
|
|
self.assertSMSNotification([
|
|
{'partner': self.partner_1, 'number': self.notif_p1.sms_number, 'state': 'canceled', 'failure_type': 'sms_number_format'},
|
|
{'partner': self.partner_2, 'number': self.notif_p2.sms_number, 'state': 'canceled', 'failure_type': 'sms_credit'}
|
|
], 'TEST BODY', self.msg, check_sms=False) # do not check new sms as they already exist
|
|
|
|
def test_sms_set_error(self):
|
|
self._reset_bus()
|
|
(self.sms_p1 + self.sms_p2).with_context(sms_skip_msg_notification=True).action_set_canceled()
|
|
self.assertEqual(self.sms_p1.state, 'canceled')
|
|
self.assertEqual(self.sms_p2.state, 'canceled')
|
|
self.assertEqual(self.env['bus.bus'].search([]), self.env['bus.bus'], 'SMS: no bus notifications unless asked')
|
|
|
|
(self.sms_p1 + self.sms_p2).action_set_error('sms_server')
|
|
self.assertEqual(self.sms_p1.state, 'error')
|
|
self.assertEqual(self.sms_p2.state, 'error')
|
|
|
|
self.assertMessageBusNotifications(self.msg)
|
|
self.assertSMSNotification([
|
|
{'partner': self.partner_1, 'number': self.notif_p1.sms_number, 'state': 'exception', 'failure_type': 'sms_server'},
|
|
{'partner': self.partner_2, 'number': self.notif_p2.sms_number, 'state': 'exception', 'failure_type': 'sms_server'}
|
|
], 'TEST BODY', self.msg, check_sms=False) # do not check new sms as they already exist
|
|
|
|
def test_sms_set_outgoing(self):
|
|
self._reset_bus()
|
|
(self.sms_p1 + self.sms_p2).action_set_outgoing()
|
|
self.assertEqual(self.sms_p1.state, 'outgoing')
|
|
self.assertEqual(self.sms_p2.state, 'outgoing')
|
|
|
|
self.assertMessageBusNotifications(self.msg)
|
|
self.assertSMSNotification([
|
|
{'partner': self.partner_1, 'number': self.notif_p1.sms_number, 'state': 'ready'},
|
|
{'partner': self.partner_2, 'number': self.notif_p2.sms_number, 'state': 'ready'}
|
|
], 'TEST BODY', self.msg, check_sms=False) # do not check new sms as they already exist
|
|
|
|
|
|
@tagged('sms_management')
|
|
class TestSMSWizards(TestSMSActionsCommon):
|
|
|
|
@mute_logger('odoo.addons.sms.models.sms_sms')
|
|
def test_sms_resend(self):
|
|
self._reset_bus()
|
|
|
|
with self.with_user('employee'):
|
|
wizard = self.env['sms.resend'].with_context(default_mail_message_id=self.msg.id).create({})
|
|
wizard.write({'recipient_ids': [(1, r.id, {'resend': True}) for r in wizard.recipient_ids]})
|
|
with self.mockSMSGateway():
|
|
wizard.action_resend()
|
|
|
|
self.assertSMSNotification([
|
|
{'partner': self.partner_1, 'state': 'pending'},
|
|
{'partner': self.partner_2, 'state': 'pending'}
|
|
], 'TEST BODY', self.msg, check_sms=True)
|
|
self.assertMessageBusNotifications(self.msg, count=2)
|
|
|
|
@mute_logger('odoo.addons.sms.models.sms_sms')
|
|
def test_sms_resend_update_number(self):
|
|
self._reset_bus()
|
|
|
|
with self.with_user('employee'):
|
|
wizard = self.env['sms.resend'].with_context(default_mail_message_id=self.msg.id).create({})
|
|
wizard.write({'recipient_ids': [(1, r.id, {'resend': True, 'sms_number': self.random_numbers[idx]}) for idx, r in enumerate(wizard.recipient_ids.sorted())]})
|
|
with self.mockSMSGateway():
|
|
wizard.action_resend()
|
|
|
|
self.assertSMSNotification([
|
|
{'partner': self.partner_1, 'state': 'pending', 'number': self.random_numbers_san[0]},
|
|
{'partner': self.partner_2, 'state': 'pending', 'number': self.random_numbers_san[1]}
|
|
], 'TEST BODY', self.msg, check_sms=True)
|
|
self.assertMessageBusNotifications(self.msg, count=2)
|
|
|
|
def test_sms_resend_cancel(self):
|
|
self._reset_bus()
|
|
|
|
with self.with_user('employee'):
|
|
wizard = self.env['sms.resend'].with_context(default_mail_message_id=self.msg.id).create({})
|
|
with self.mockSMSGateway():
|
|
wizard.action_cancel()
|
|
|
|
self.assertSMSNotification([
|
|
{'partner': self.partner_1, 'state': 'canceled', 'number': self.notif_p1.sms_number, 'failure_type': 'sms_number_format'},
|
|
{'partner': self.partner_2, 'state': 'canceled', 'number': self.notif_p2.sms_number, 'failure_type': 'sms_credit'}
|
|
], 'TEST BODY', self.msg, check_sms=False)
|
|
self.assertMessageBusNotifications(self.msg)
|
|
|
|
@mute_logger('odoo.addons.sms.models.sms_sms')
|
|
def test_sms_resend_internals(self):
|
|
self._reset_bus()
|
|
self.assertSMSNotification([
|
|
{'partner': self.partner_1, 'state': 'exception', 'number': self.notif_p1.sms_number, 'failure_type': 'sms_number_format'},
|
|
{'partner': self.partner_2, 'state': 'exception', 'number': self.notif_p2.sms_number, 'failure_type': 'sms_credit'}
|
|
], 'TEST BODY', self.msg, check_sms=False)
|
|
|
|
with self.with_user('employee'):
|
|
wizard = self.env['sms.resend'].with_context(default_mail_message_id=self.msg.id).create({})
|
|
self.assertTrue(wizard.has_insufficient_credit)
|
|
self.assertEqual(set(wizard.mapped('recipient_ids.partner_name')), set((self.partner_1 | self.partner_2).mapped('display_name')))
|
|
wizard.write({'recipient_ids': [(1, r.id, {'resend': True}) for r in wizard.recipient_ids]})
|
|
with self.mockSMSGateway():
|
|
wizard.action_resend()
|
|
|
|
@mute_logger('odoo.addons.sms.models.sms_sms')
|
|
def test_sms_resend_w_cancel(self):
|
|
self._reset_bus()
|
|
|
|
with self.with_user('employee'):
|
|
wizard = self.env['sms.resend'].with_context(default_mail_message_id=self.msg.id).create({})
|
|
wizard.write({'recipient_ids': [(1, r.id, {'resend': True if r.partner_id == self.partner_1 else False}) for r in wizard.recipient_ids]})
|
|
with self.mockSMSGateway():
|
|
wizard.action_resend()
|
|
|
|
self.assertSMSNotification([{'partner': self.partner_1, 'state': 'pending'}], 'TEST BODY', self.msg, check_sms=True)
|
|
self.assertSMSNotification([{'partner': self.partner_2, 'state': 'canceled', 'number': self.notif_p2.sms_number, 'failure_type': 'sms_credit'}], 'TEST BODY', self.msg, check_sms=False)
|
|
self.assertMessageBusNotifications(self.msg, count=2)
|