70 lines
2 KiB
Python
70 lines
2 KiB
Python
# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
|
|
# License: MIT. See LICENSE
|
|
|
|
import unittest
|
|
|
|
import frappe
|
|
from frappe.cache_manager import clear_controller_cache
|
|
from frappe.desk.doctype.todo.todo import ToDo
|
|
|
|
|
|
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
|