99 lines
5.1 KiB
Python
99 lines
5.1 KiB
Python
# Part of Odoo. See LICENSE file for full copyright and licensing details.
|
|
|
|
from odoo import Command
|
|
from odoo.addons.test_mail_sms.tests.test_sms_management import TestSMSActionsCommon
|
|
from odoo.tests.common import HttpCase, JsonRpcException
|
|
from odoo.tools import mute_logger
|
|
|
|
|
|
class TestSmsController(HttpCase, TestSMSActionsCommon):
|
|
@classmethod
|
|
def setUpClass(cls):
|
|
super().setUpClass()
|
|
cls.sms_processing, cls.sms_sent = cls.env['sms.sms'].create([
|
|
{
|
|
'body': 'A test about pending state',
|
|
'number': '10',
|
|
'mail_message_id': cls.msg.id,
|
|
'uuid': '8db55b6a9ec6443ca1d69af3ab500e27',
|
|
'state': 'process',
|
|
}, {
|
|
'mail_message_id': cls.msg.id,
|
|
'body': 'A test about sent state',
|
|
'number': '20',
|
|
'uuid': '8505e6f439d4472690c7955de9b210a4',
|
|
'state': 'sent',
|
|
},
|
|
])
|
|
cls.notification_processing, cls.notification_pending = cls.env['mail.notification'].create([
|
|
{
|
|
'mail_message_id': cls.msg.id,
|
|
'notification_type': 'sms',
|
|
'notification_status': 'process',
|
|
'sms_id_int': cls.sms_processing.id,
|
|
'sms_tracker_ids': [Command.create({'sms_uuid': cls.sms_processing.uuid})],
|
|
}, {
|
|
'mail_message_id': cls.msg.id,
|
|
'notification_type': 'sms',
|
|
'notification_status': 'pending',
|
|
'sms_id_int': cls.sms_sent.id,
|
|
'sms_tracker_ids': [Command.create({'sms_uuid': cls.sms_sent.uuid})],
|
|
},
|
|
])
|
|
cls.sms_sent.unlink() # as it would normally be.
|
|
|
|
@mute_logger("odoo.addons.base.models.ir_http")
|
|
def test_webhook_update_notification_from_processing_to_pending(self):
|
|
self.assertTrue(self.sms_processing)
|
|
statuses = [{'sms_status': 'sent', 'uuids': [self.sms_processing.uuid]}]
|
|
self.assertEqual(self._make_webhook_jsonrpc_request(statuses), 'OK')
|
|
self.assertTrue(self.sms_processing.to_delete)
|
|
self.assertEqual(self.notification_processing.notification_status, 'pending')
|
|
|
|
@mute_logger('odoo.addons.base.models.ir_http')
|
|
def test_webhook_update_notification_from_pending_to_bounced(self):
|
|
statuses = [{'sms_status': 'invalid_destination', 'uuids': [self.notification_pending.sms_tracker_ids.sms_uuid]}]
|
|
self.assertEqual(self._make_webhook_jsonrpc_request(statuses), 'OK')
|
|
self.assertEqual(self.notification_pending.notification_status, 'bounce')
|
|
|
|
@mute_logger('odoo.addons.base.models.ir_http')
|
|
def test_webhook_update_notification_from_pending_to_delivered(self):
|
|
statuses = [{'sms_status': 'delivered', 'uuids': [self.notification_pending.sms_tracker_ids.sms_uuid]}]
|
|
self.assertEqual(self._make_webhook_jsonrpc_request(statuses), 'OK')
|
|
self.assertEqual(self.notification_pending.notification_status, 'sent')
|
|
|
|
@mute_logger('odoo.addons.base.models.ir_http')
|
|
def test_webhook_update_notification_from_pending_to_failed(self):
|
|
statuses = [{'sms_status': 'not_delivered', 'uuids': [self.notification_pending.sms_tracker_ids.sms_uuid]}]
|
|
self.assertEqual(self._make_webhook_jsonrpc_request(statuses), 'OK')
|
|
self.assertEqual(self.notification_pending.notification_status, 'exception')
|
|
self.assertEqual(self.notification_pending.failure_type, 'sms_not_delivered')
|
|
|
|
@mute_logger('odoo.addons.base.models.ir_http')
|
|
def test_webhook_update_notification_multiple_statuses(self):
|
|
statuses = [
|
|
{'sms_status': 'sent', 'uuids': [self.notification_processing.sms_tracker_ids.sms_uuid]},
|
|
{'sms_status': 'delivered', 'uuids': [self.notification_pending.sms_tracker_ids.sms_uuid]}
|
|
]
|
|
self.assertEqual(self._make_webhook_jsonrpc_request(statuses), 'OK')
|
|
self.assertTrue(self.sms_processing.to_delete)
|
|
self.assertEqual(self.notification_processing.notification_status, 'pending')
|
|
self.assertEqual(self.notification_pending.notification_status, 'sent')
|
|
|
|
@mute_logger('odoo.addons.base.models.ir_http', 'odoo.addons.sms.controllers.main', 'odoo.http')
|
|
def test_webhook_update_raises_with_wrong_event_data(self):
|
|
statuses = [{'sms_status': 'delivered', 'uuids': ['not a uuid']}]
|
|
with self.assertRaises(JsonRpcException):
|
|
self._make_webhook_jsonrpc_request(statuses)
|
|
|
|
@mute_logger('odoo.addons.base.models.ir_http')
|
|
def test_webhook_update_succeeds_with_non_existent_uuids(self):
|
|
statuses = [{'sms_status': 'delivered', 'uuids': ['00000000000000000000000000000000']}]
|
|
self.assertEqual(self._make_webhook_jsonrpc_request(statuses), 'OK')
|
|
|
|
@mute_logger('odoo.addons.base.models.ir_http')
|
|
def test_webhook_update_succeeds_with_unknown_status(self):
|
|
statuses = [{'sms_status': 'something_new', 'uuids': [self.notification_pending.sms_tracker_ids.sms_uuid]}]
|
|
self.assertEqual(self._make_webhook_jsonrpc_request(statuses), 'OK')
|
|
self.assertEqual(self.notification_pending.notification_status, 'exception')
|