diff --git a/mail_tracking_mailgun/tests/test_mailgun.py b/mail_tracking_mailgun/tests/test_mailgun.py index 2dffc3a3b..ea7db6b24 100644 --- a/mail_tracking_mailgun/tests/test_mailgun.py +++ b/mail_tracking_mailgun/tests/test_mailgun.py @@ -475,3 +475,28 @@ def test_manual_check_exceptions(self, mock_request): mock_request.get.return_value.json.return_value = {} with self.assertRaises(UserError): self.tracking_email.action_manual_check_mailgun() + + @patch(f"{_packagepath}.wizards.res_config_settings.requests") + def test_register_webhooks_error(self, mock_request): + mock_request.post.return_value.status_code = 500 + mock_request.post.return_value.json.return_value = {"message": "fail"} + with self.assertRaises(UserError): + self.env["res.config.settings"].mail_tracking_mailgun_register_webhooks() + + @patch(f"{_packagepath}.wizards.res_config_settings.requests") + def test_unregister_webhooks_error_on_get(self, mock_request): + mock_request.get.return_value.status_code = 500 + mock_request.get.return_value.json.return_value = {"message": "fail"} + with self.assertRaises(UserError): + self.env["res.config.settings"].mail_tracking_mailgun_unregister_webhooks() + + @patch(f"{_packagepath}.wizards.res_config_settings.requests") + def test_unregister_webhooks_error_on_delete(self, mock_request): + mock_request.get.return_value.status_code = 200 + mock_request.get.return_value.json.return_value = { + "webhooks": {"clicked": {"url": "https://example.com/hook"}} + } + mock_request.delete.return_value.status_code = 500 + mock_request.delete.return_value.json.return_value = {"message": "fail"} + with self.assertRaises(UserError): + self.env["res.config.settings"].mail_tracking_mailgun_unregister_webhooks() diff --git a/mail_tracking_mailgun/wizards/res_config_settings.py b/mail_tracking_mailgun/wizards/res_config_settings.py index 73d7dc023..9687be129 100644 --- a/mail_tracking_mailgun/wizards/res_config_settings.py +++ b/mail_tracking_mailgun/wizards/res_config_settings.py @@ -6,7 +6,8 @@ import requests -from odoo import fields, models +from odoo import _, fields, models +from odoo.exceptions import UserError _logger = logging.getLogger(__name__) @@ -83,6 +84,14 @@ def mail_tracking_mailgun_unregister_webhooks(self): .sudo() .get_param("mailgun.timeout", MAILGUN_TIMEOUT), ) + if webhooks.status_code != 200: + raise UserError( + _("Error %(status)s: %(response)s.") + % { + "status": webhooks.status_code, + "response": webhooks.json(), + } + ) webhooks.raise_for_status() for event, data in webhooks.json()["webhooks"].items(): # Modern webhooks return a list of URLs; old ones just one @@ -103,6 +112,14 @@ def mail_tracking_mailgun_unregister_webhooks(self): .sudo() .get_param("mailgun.timeout", MAILGUN_TIMEOUT), ) + if response.status_code != 200: + raise UserError( + _("Error %(status)s: %(response)s.") + % { + "status": response.status_code, + "response": response.json(), + } + ) response.raise_for_status() def mail_tracking_mailgun_register_webhooks(self): @@ -123,4 +140,12 @@ def mail_tracking_mailgun_register_webhooks(self): .get_param("mailgun.timeout", MAILGUN_TIMEOUT), ) # Assert correct registration + if response.status_code != 200: + raise UserError( + _("Error %(status)s: %(response)s.") + % { + "status": response.status_code, + "response": response.json(), + } + ) response.raise_for_status()