Browse Source

Merge pull request #12842 from NagariaHussain/feat-enable-disable-wh

feat: Add Enable/Disable Webhook via Check Field
version-14
mergify[bot] 4 years ago
committed by GitHub
parent
commit
eb80f5dffb
No known key found for this signature in database GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 76 additions and 2 deletions
  1. +3
    -1
      frappe/integrations/doctype/webhook/__init__.py
  2. +65
    -0
      frappe/integrations/doctype/webhook/test_webhook.py
  3. +8
    -1
      frappe/integrations/doctype/webhook/webhook.json

+ 3
- 1
frappe/integrations/doctype/webhook/__init__.py View File

@@ -21,7 +21,9 @@ def run_webhooks(doc, method):
if webhooks is None: if webhooks is None:
# query webhooks # query webhooks
webhooks_list = frappe.get_all('Webhook', webhooks_list = frappe.get_all('Webhook',
fields=["name", "`condition`", "webhook_docevent", "webhook_doctype"])
fields=["name", "`condition`", "webhook_docevent", "webhook_doctype"],
filters={"enabled": True}
)


# make webhooks map for cache # make webhooks map for cache
webhooks = {} webhooks = {}


+ 65
- 0
frappe/integrations/doctype/webhook/test_webhook.py View File

@@ -10,6 +10,44 @@ from frappe.integrations.doctype.webhook.webhook import get_webhook_headers, get




class TestWebhook(unittest.TestCase): class TestWebhook(unittest.TestCase):
@classmethod
def setUpClass(cls):
# delete any existing webhooks
frappe.db.sql("DELETE FROM tabWebhook")
# create test webhooks
cls.create_sample_webhooks()

@classmethod
def create_sample_webhooks(cls):
samples_webhooks_data = [
{
"webhook_doctype": "User",
"webhook_docevent": "after_insert",
"request_url": "https://httpbin.org/post",
"condition": "doc.email",
"enabled": True
},
{
"webhook_doctype": "User",
"webhook_docevent": "after_insert",
"request_url": "https://httpbin.org/post",
"condition": "doc.first_name",
"enabled": False
}
]

cls.sample_webhooks = []
for wh_fields in samples_webhooks_data:
wh = frappe.new_doc("Webhook")
wh.update(wh_fields)
wh.insert()
cls.sample_webhooks.append(wh)

@classmethod
def tearDownClass(cls):
# delete any existing webhooks
frappe.db.sql("DELETE FROM tabWebhook")

def setUp(self): def setUp(self):
# retrieve or create a User webhook for `after_insert` # retrieve or create a User webhook for `after_insert`
webhook_fields = { webhook_fields = {
@@ -30,10 +68,37 @@ class TestWebhook(unittest.TestCase):
self.user.email = frappe.mock("email") self.user.email = frappe.mock("email")
self.user.save() self.user.save()


# Create another test user specific to this test
self.test_user = frappe.new_doc("User")
self.test_user.email = "user1@integration.webhooks.test.com"
self.test_user.first_name = "user1"

def tearDown(self) -> None: def tearDown(self) -> None:
self.user.delete() self.user.delete()
self.test_user.delete()
super().tearDown() super().tearDown()


def test_webhook_trigger_with_enabled_webhooks(self):
"""Test webhook trigger for enabled webhooks"""

frappe.cache().delete_value('webhooks')
frappe.flags.webhooks = None

# Insert the user to db
self.test_user.insert()
self.assertTrue("User" in frappe.flags.webhooks)
# only 1 hook (enabled) must be queued
self.assertEqual(
len(frappe.flags.webhooks.get("User")),
1
)
self.assertTrue(self.test_user.email in frappe.flags.webhooks_executed)
self.assertEqual(
frappe.flags.webhooks_executed.get(self.test_user.email)[0],
self.sample_webhooks[0].name
)

def test_validate_doc_events(self): def test_validate_doc_events(self):
"Test creating a submit-related webhook for a non-submittable DocType" "Test creating a submit-related webhook for a non-submittable DocType"




+ 8
- 1
frappe/integrations/doctype/webhook/webhook.json View File

@@ -11,6 +11,7 @@
"webhook_doctype", "webhook_doctype",
"cb_doc_events", "cb_doc_events",
"webhook_docevent", "webhook_docevent",
"enabled",
"sb_condition", "sb_condition",
"condition", "condition",
"cb_condition", "cb_condition",
@@ -147,10 +148,16 @@
"fieldname": "webhook_secret", "fieldname": "webhook_secret",
"fieldtype": "Password", "fieldtype": "Password",
"label": "Webhook Secret" "label": "Webhook Secret"
},
{
"default": "1",
"fieldname": "enabled",
"fieldtype": "Check",
"label": "Enabled"
} }
], ],
"links": [], "links": [],
"modified": "2020-01-13 01:53:04.459968",
"modified": "2021-04-14 05:35:28.532049",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Integrations", "module": "Integrations",
"name": "Webhook", "name": "Webhook",


Loading…
Cancel
Save