seitime-frappe/frappe/tests/test_hooks.py
Gavin D'souza 3446026555 chore: Update header: license.txt => LICENSE
The license.txt file has been replaced with LICENSE for quite a while
now. INAL but it didn't seem accurate to say "hey, checkout license.txt
although there's no such file". Apart from this, there were
inconsistencies in the headers altogether...this change brings
consistency.
2021-09-03 12:02:59 +05:30

74 lines
2 KiB
Python

# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: MIT. See LICENSE
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