Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
25 changes: 25 additions & 0 deletions mail_tracking_mailgun/tests/test_mailgun.py
Original file line number Diff line number Diff line change
Expand Up @@ -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()
27 changes: 26 additions & 1 deletion mail_tracking_mailgun/wizards/res_config_settings.py
Original file line number Diff line number Diff line change
Expand Up @@ -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__)

Expand Down Expand Up @@ -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
Expand All @@ -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):
Expand All @@ -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()
Loading