From e13f99dcb1577a7bfaa26f206be4eb0389c7786f Mon Sep 17 00:00:00 2001 From: Deepesh Garg Date: Mon, 27 Sep 2021 12:56:08 +0530 Subject: [PATCH] test: Check for doc event validations and cache methods --- .../doctype/server_script/server_script.py | 4 +- .../server_script/test_server_script.py | 42 +++++++++++++++++++ 2 files changed, 45 insertions(+), 1 deletion(-) diff --git a/frappe/core/doctype/server_script/server_script.py b/frappe/core/doctype/server_script/server_script.py index 03b33443eb..14f173f906 100644 --- a/frappe/core/doctype/server_script/server_script.py +++ b/frappe/core/doctype/server_script/server_script.py @@ -11,6 +11,8 @@ from frappe.model.document import Document from frappe.utils.safe_exec import get_safe_globals, safe_exec, NamespaceDict from frappe import _ +class CommitNotAllowed(frappe.ValidationError): + pass class ServerScript(Document): def validate(self): @@ -101,7 +103,7 @@ class ServerScript(Document): for line in self.script.splitlines(): line = line.strip() if not line.startswith('#') and "frappe.db.commit()" in line: - frappe.throw(_("Commit cannot be used in DocType Event server script")) + frappe.throw(_("Commit cannot be used in DocType Event server script"), CommitNotAllowed) def execute_scheduled_method(self): """Specific to Scheduled Jobs via Server Scripts diff --git a/frappe/core/doctype/server_script/test_server_script.py b/frappe/core/doctype/server_script/test_server_script.py index 6c028ff136..cf49430ff4 100644 --- a/frappe/core/doctype/server_script/test_server_script.py +++ b/frappe/core/doctype/server_script/test_server_script.py @@ -5,6 +5,7 @@ import frappe import unittest import requests from frappe.utils import get_site_url +from frappe.core.doctype.server_script.server_script import CommitNotAllowed scripts = [ dict( @@ -59,6 +60,26 @@ conditions = '1 = 1' reference_doctype = 'Note', script = ''' frappe.method_that_doesnt_exist("do some magic") +''' + ), + dict( + name='test_todo_commit', + script_type = 'DocType Event', + doctype_event = 'Before Save', + reference_doctype = 'ToDo', + disabled = 1, + script = ''' +frappe.db.commit() +''' + ), + dict( + name='test_cache_methods', + script_type = 'DocType Event', + doctype_event = 'Before Save', + reference_doctype = 'ToDo', + disabled = 1, + script = ''' +frappe.cache.set_value('test_key', doc.name) ''' ) ] @@ -119,3 +140,24 @@ class TestServerScript(unittest.TestCase): self.assertTrue("invalid python code" in str(se.exception).lower(), msg="Python code validation not working") + + def test_commit_in_doctype_event(self): + server_script = frappe.get_doc('Server Script', 'test_todo_commit') + server_script.disabled = 0 + server_script.save() + + self.assertRaises(CommitNotAllowed, frappe.get_doc(dict(doctype='ToDo', description='test me')).insert) + + server_script.disabled = 1 + server_script.save() + + def test_cache_methods_in_server_script(self): + server_script = frappe.get_doc('Server Script', 'test_cache_methods') + server_script.disabled = 0 + server_script.save() + + todo = frappe.get_doc(dict(doctype='ToDo', description='test me')).insert() + self.assertEqual(todo.name, frappe.cache().get_value('test_key')) + + server_script.disabled = 1 + server_script.save()