test: Check for doc event validations and cache methods
This commit is contained in:
parent
6ab38e5d65
commit
e13f99dcb1
2 changed files with 45 additions and 1 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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()
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue