diff --git a/frappe/integrations/doctype/webhook/test_webhook.py b/frappe/integrations/doctype/webhook/test_webhook.py index d15e05c51f..3e5c07be8e 100644 --- a/frappe/integrations/doctype/webhook/test_webhook.py +++ b/frappe/integrations/doctype/webhook/test_webhook.py @@ -10,95 +10,88 @@ from frappe.integrations.doctype.webhook.webhook import get_webhook_headers, get class TestWebhook(unittest.TestCase): + def setUp(self): + # retrieve or create a User webhook for `after_insert` + webhook_fields = { + "webhook_doctype": "User", + "webhook_docevent": "after_insert", + "request_url": "https://httpbin.org/post" + } + + if frappe.db.exists("Webhook", webhook_fields): + self.webhook = frappe.get_doc("Webhook", webhook_fields) + else: + self.webhook = frappe.new_doc("Webhook") + self.webhook.update(webhook_fields) + + # create a User document + self.user = frappe.new_doc("User") + self.user.first_name = frappe.mock("name") + self.user.email = frappe.mock("email") + self.user.save() + def test_validate_doc_events(self): "Test creating a submit-related webhook for a non-submittable DocType" - doc = frappe.new_doc("Webhook") - doc.webhook_doctype = "User" - doc.webhook_docevent = "on_submit" - doc.request_url = "https://httpbin.org/post" - self.assertRaises(frappe.ValidationError, doc.save) + self.webhook.webhook_docevent = "on_submit" + self.assertRaises(frappe.ValidationError, self.webhook.save) def test_validate_request_url(self): "Test validation for the webhook request URL" - doc = frappe.new_doc("Webhook") - doc.webhook_doctype = "User" - doc.webhook_docevent = "after_insert" - doc.request_url = "httpbin.org?post" - self.assertRaises(frappe.ValidationError, doc.save) + self.webhook.request_url = "httpbin.org?post" + self.assertRaises(frappe.ValidationError, self.webhook.save) def test_validate_headers(self): "Test validation for request headers" - doc = frappe.new_doc("Webhook") - doc.webhook_doctype = "User" - doc.webhook_docevent = "after_insert" - doc.request_url = "https://httpbin.org/post" - # test incomplete headers - doc.webhook_headers = [{ + self.webhook.set("webhook_headers", [{ "key": "Content-Type" - }] - doc.save() - headers = get_webhook_headers(doc=None, webhook=doc) + }]) + self.webhook.save() + headers = get_webhook_headers(doc=None, webhook=self.webhook) self.assertEqual(headers, None) # test complete headers - doc.webhook_headers = [{ + self.webhook.set("webhook_headers", [{ "key": "Content-Type", "value": "application/json" - }] - doc.save() - headers = get_webhook_headers(doc=None, webhook=doc) + }]) + self.webhook.save() + headers = get_webhook_headers(doc=None, webhook=self.webhook) self.assertEqual(headers, {"Content-Type": "application/json"}) def test_validate_request_body_form(self): "Test validation of Form URL-Encoded request body" - doc = frappe.new_doc("Webhook") - doc.webhook_doctype = "User" - doc.webhook_docevent = "after_insert" - doc.request_url = "https://httpbin.org/post" - doc.request_structure = "Form URL-Encoded" - doc.set("webhook_data", [{ + self.webhook.request_structure = "Form URL-Encoded" + self.webhook.set("webhook_data", [{ "fieldname": "name", "key": "name" }]) - doc.webhook_json = """{ + self.webhook.webhook_json = """{ "name": "Test User" }""" - doc.save() - self.assertEqual(doc.webhook_json, None) + self.webhook.save() + self.assertEqual(self.webhook.webhook_json, None) - user = frappe.new_doc("User") - user.first_name = frappe.mock("name") - user.email = frappe.mock("email") - user.save() - data = get_webhook_data(user, webhook=doc) - self.assertEqual(data, {"name": user.name}) + data = get_webhook_data(doc=self.user, webhook=self.webhook) + self.assertEqual(data, {"name": self.user.name}) def test_validate_request_body_json(self): "Test validation of JSON request body" - doc = frappe.new_doc("Webhook") - doc.webhook_doctype = "User" - doc.webhook_docevent = "after_insert" - doc.request_url = "https://httpbin.org/post" - doc.request_structure = "JSON" - doc.set("webhook_data", [{ + self.webhook.request_structure = "JSON" + self.webhook.set("webhook_data", [{ "fieldname": "name", "key": "name" }]) - doc.webhook_json = """{ - "name": "{{ doc.name }}" + self.webhook.webhook_json = """{ + "name": "{{ self.webhook.name }}" }""" - doc.save() - self.assertEqual(doc.webhook_data, []) + self.webhook.save() + self.assertEqual(self.webhook.webhook_data, []) - user = frappe.new_doc("User") - user.first_name = frappe.mock("name") - user.email = frappe.mock("email") - user.save() - data = get_webhook_data(user, webhook=doc) - self.assertEqual(data, {"name": user.name}) + data = get_webhook_data(doc=self.user, webhook=self.webhook) + self.assertEqual(data, {"name": self.user.name})