seitime-frappe/frappe/tests/test_hooks.py

74 lines
2 KiB
Python

# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# MIT License. See license.txt
import unittest
import frappe
from frappe.desk.doctype.todo.todo import ToDo
from frappe.cache_manager import clear_controller_cache
class TestHooks(unittest.TestCase):
def test_hooks(self):
hooks = frappe.get_hooks()
self.assertTrue(isinstance(hooks.get("app_name"), list))
self.assertTrue(isinstance(hooks.get("doc_events"), dict))
self.assertTrue(isinstance(hooks.get("doc_events").get("*"), dict))
self.assertTrue(isinstance(hooks.get("doc_events").get("*"), dict))
self.assertTrue("frappe.desk.notifications.clear_doctype_notifications" in
hooks.get("doc_events").get("*").get("on_update"))
def test_override_doctype_class(self):
from frappe import hooks
# Set hook
hooks.override_doctype_class = {
'ToDo': ['frappe.tests.test_hooks.CustomToDo']
}
# Clear cache
frappe.cache().delete_value('app_hooks')
clear_controller_cache('ToDo')
todo = frappe.get_doc(doctype='ToDo', description='asdf')
self.assertTrue(isinstance(todo, CustomToDo))
def test_has_permission(self):
from frappe import hooks
# Set hook
address_has_permission_hook = hooks.has_permission.get('Address', [])
if isinstance(address_has_permission_hook, str):
address_has_permission_hook = [address_has_permission_hook]
address_has_permission_hook.append(
'frappe.tests.test_hooks.custom_has_permission'
)
hooks.has_permission['Address'] = address_has_permission_hook
# Clear cache
frappe.cache().delete_value('app_hooks')
# Init User and Address
username = "test@example.com"
user = frappe.get_doc("User", username)
user.add_roles("System Manager")
address = frappe.new_doc("Address")
# Test!
self.assertTrue(
frappe.has_permission("Address", doc=address, user=username)
)
address.flags.dont_touch_me = True
self.assertFalse(
frappe.has_permission("Address", doc=address, user=username)
)
def custom_has_permission(doc, ptype, user):
if doc.flags.dont_touch_me:
return False
class CustomToDo(ToDo):
pass