From 2915a939a87947024cbe74cffeb22bdfab103f21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Thu, 2 Sep 2021 13:11:19 +0000 Subject: [PATCH] [IMP] test_mail_full: add some tests, notably for SMS deletion closes odoo/odoo#75895 Signed-off-by: Thibault Delavallee (tde) --- addons/sms/models/sms_sms.py | 4 +- addons/sms/tests/common.py | 2 + addons/test_mail_full/tests/test_sms_sms.py | 55 +++++++++++++++++++-- 3 files changed, 55 insertions(+), 6 deletions(-) diff --git a/addons/sms/models/sms_sms.py b/addons/sms/models/sms_sms.py index e0907d93d4a..d3d7e17ff64 100644 --- a/addons/sms/models/sms_sms.py +++ b/addons/sms/models/sms_sms.py @@ -198,8 +198,8 @@ class SmsSms(models.Model): notifications = self.env['mail.notification'].sudo().search([ ('notification_type', '=', 'sms'), ('sms_id', 'in', sms_ids), - ('notification_status', 'not in', ('sent', 'canceled'))] - ) + ('notification_status', 'not in', ('sent', 'canceled')), + ]) if notifications: notifications.write({ 'notification_status': 'sent' if state == 'success' else 'exception', diff --git a/addons/sms/tests/common.py b/addons/sms/tests/common.py index ed1351ebae5..34687b68344 100644 --- a/addons/sms/tests/common.py +++ b/addons/sms/tests/common.py @@ -43,6 +43,8 @@ class MockSMS(common.BaseCase): res.update(state='wrong_number_format') elif error and error == 'unregistered': res.update(state='unregistered') + elif error and error == 'server_error': + res.update(state='server_error') elif error and error == 'jsonrpc_exception': raise exceptions.AccessError( 'The url that this service requested returned an error. Please contact the author of the app. The url it tried to contact was ' + local_endpoint diff --git a/addons/test_mail_full/tests/test_sms_sms.py b/addons/test_mail_full/tests/test_sms_sms.py index 20682517fbb..eb5419baf8a 100644 --- a/addons/test_mail_full/tests/test_sms_sms.py +++ b/addons/test_mail_full/tests/test_sms_sms.py @@ -79,20 +79,22 @@ class TestSMSPost(TestMailFullCommon, MockLinkTracker): sms_0 = self.env['sms.sms'].create({ 'body': 'Welcome to https://test.odoo.com', - 'number': '12', + 'number': '10', 'mailing_id': mailing.id, }) sms_1 = self.env['sms.sms'].create({ 'body': 'Welcome to https://test.odoo.com/r/RAOUL', - 'number': '12', + 'number': '11', }) sms_2 = self.env['sms.sms'].create({ 'body': 'Welcome to https://test.odoo.com/r/RAOUL', - 'number': '12', 'mailing_id': mailing.id, + 'number': '12', + 'mailing_id': mailing.id, }) sms_3 = self.env['sms.sms'].create({ 'body': 'Welcome to https://test.odoo.com/leodagan/r/RAOUL', - 'number': '12', 'mailing_id': mailing.id, + 'number': '13', + 'mailing_id': mailing.id, }) res = (sms_0 | sms_1 | sms_2 | sms_3)._update_body_short_links() @@ -123,6 +125,51 @@ class TestSMSPost(TestMailFullCommon, MockLinkTracker): self.env['sms.sms'].browse(self.sms_all.ids).send(unlink_failed=True, unlink_sent=True, raise_exception=False) self.assertFalse(len(self.sms_all.exists())) + def test_sms_send_delete_default(self): + """ Test default send behavior: keep failed SMS, remove sent. """ + with self.mockSMSGateway(sms_allow_unlink=True, nbr_t_error={ + '+32456000011': 'wrong_number_format', + '+32456000022': 'credit', + '+32456000033': 'server_error', + '+32456000044': 'unregistered', + }): + self.env['sms.sms'].browse(self.sms_all.ids).send(raise_exception=False) + remaining = self.sms_all.exists() + self.assertEqual(len(remaining), 4) + self.assertTrue(all(sms.state == 'error') for sms in remaining) + + def test_sms_send_delete_failed(self): + with self.mockSMSGateway(sms_allow_unlink=True, nbr_t_error={ + '+32456000011': 'wrong_number_format', + '+32456000022': 'wrong_number_format', + }): + self.env['sms.sms'].browse(self.sms_all.ids).send(unlink_failed=True, unlink_sent=False, raise_exception=False) + remaining = self.sms_all.exists() + self.assertEqual(len(remaining), 8) + self.assertTrue(all(sms.state == 'sent') for sms in remaining) + + def test_sms_send_delete_none(self): + with self.mockSMSGateway(sms_allow_unlink=True, nbr_t_error={ + '+32456000011': 'wrong_number_format', + '+32456000022': 'wrong_number_format', + }): + self.env['sms.sms'].browse(self.sms_all.ids).send(unlink_failed=False, unlink_sent=False, raise_exception=False) + self.assertEqual(len(self.sms_all.exists()), 10) + success_sms = self.sms_all[:1] + self.sms_all[3:] + error_sms = self.sms_all[1:3] + self.assertTrue(all(sms.state == 'sent') for sms in success_sms) + self.assertTrue(all(sms.state == 'error') for sms in error_sms) + + def test_sms_send_delete_sent(self): + with self.mockSMSGateway(sms_allow_unlink=True, nbr_t_error={ + '+32456000011': 'wrong_number_format', + '+32456000022': 'wrong_number_format', + }): + self.env['sms.sms'].browse(self.sms_all.ids).send(unlink_failed=False, unlink_sent=True, raise_exception=False) + remaining = self.sms_all.exists() + self.assertEqual(len(remaining), 2) + self.assertTrue(all(sms.state == 'error') for sms in remaining) + def test_sms_send_raise(self): with self.assertRaises(exceptions.AccessError): with self.mockSMSGateway(sim_error='jsonrpc_exception'):