test: Check for doc event validations and cache methods

This commit is contained in:
Deepesh Garg 2021-09-27 12:56:08 +05:30
parent 6ab38e5d65
commit e13f99dcb1
2 changed files with 45 additions and 1 deletions

View file

@ -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

View file

@ -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()