seitime-frappe/frappe/tests/test_form_load.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

149 lines
No EOL
4.3 KiB
Python

# Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
# License: MIT. See LICENSE
import frappe, unittest
from frappe.desk.form.load import getdoctype, getdoc
from frappe.core.page.permission_manager.permission_manager import update, reset, add
from frappe.custom.doctype.property_setter.property_setter import make_property_setter
test_dependencies = ['Blog Category', 'Blogger']
class TestFormLoad(unittest.TestCase):
def test_load(self):
getdoctype("DocType")
meta = list(filter(lambda d: d.name=="DocType", frappe.response.docs))[0]
self.assertEqual(meta.name, "DocType")
self.assertTrue(meta.get("__js"))
frappe.response.docs = []
getdoctype("Event")
meta = list(filter(lambda d: d.name=="Event", frappe.response.docs))[0]
self.assertTrue(meta.get("__calendar_js"))
def test_fieldlevel_permissions_in_load(self):
blog = frappe.get_doc({
"doctype": "Blog Post",
"blog_category": "-test-blog-category-1",
"blog_intro": "Test Blog Intro",
"blogger": "_Test Blogger 1",
"content": "Test Blog Content",
"title": "_Test Blog Post {}".format(frappe.utils.now()),
"published": 0
})
blog.insert()
user = frappe.get_doc('User', 'test@example.com')
user_roles = frappe.get_roles()
user.remove_roles(*user_roles)
user.add_roles('Blogger')
blog_post_property_setter = make_property_setter('Blog Post', 'published', 'permlevel', 1, 'Int')
reset('Blog Post')
# test field level permission before role level permissions are defined
frappe.set_user(user.name)
blog_doc = get_blog(blog.name)
self.assertEqual(blog_doc.published, None)
# this will be ignored because user does not
# have write access on `published` field (or on permlevel 1 fields)
blog_doc.published = 1
blog_doc.save()
# since published field has higher permlevel
self.assertEqual(blog_doc.published, 0)
# test field level permission after role level permissions are defined
frappe.set_user('Administrator')
add('Blog Post', 'Website Manager', 1)
update('Blog Post', 'Website Manager', 1, 'write', 1)
frappe.set_user(user.name)
blog_doc = get_blog(blog.name)
self.assertEqual(blog_doc.name, blog.name)
# since published field has higher permlevel
self.assertEqual(blog_doc.published, None)
# this will be ignored because user does not
# have write access on `published` field (or on permlevel 1 fields)
blog_doc.published = 1
blog_doc.save()
# since published field has higher permlevel
self.assertEqual(blog_doc.published, 0)
frappe.set_user('Administrator')
user.add_roles('Website Manager')
frappe.set_user(user.name)
doc = frappe.get_doc('Blog Post', blog.name)
doc.published = 1
doc.save()
blog_doc = get_blog(blog.name)
# now user should be allowed to read field with higher permlevel
# (after adding Website Manager role)
self.assertEqual(blog_doc.published, 1)
frappe.set_user('Administrator')
# reset user roles
user.remove_roles('Blogger', 'Website Manager')
user.add_roles(*user_roles)
blog_doc.delete()
frappe.delete_doc(blog_post_property_setter.doctype, blog_post_property_setter.name)
def test_fieldlevel_permissions_in_load_for_child_table(self):
contact = frappe.new_doc('Contact')
contact.first_name = '_Test Contact 1'
contact.append('phone_nos', {'phone': '123456'})
contact.insert()
user = frappe.get_doc('User', 'test@example.com')
user_roles = frappe.get_roles()
user.remove_roles(*user_roles)
user.add_roles('Accounts User')
make_property_setter('Contact Phone', 'phone', 'permlevel', 1, 'Int')
reset('Contact Phone')
add('Contact', 'Sales User', 1)
update('Contact', 'Sales User', 1, 'write', 1)
frappe.set_user(user.name)
contact = frappe.get_doc('Contact', '_Test Contact 1')
contact.phone_nos[0].phone = '654321'
contact.save()
self.assertEqual(contact.phone_nos[0].phone, '123456')
frappe.set_user('Administrator')
user.add_roles('Sales User')
frappe.set_user(user.name)
contact.phone_nos[0].phone = '654321'
contact.save()
contact = frappe.get_doc('Contact', '_Test Contact 1')
self.assertEqual(contact.phone_nos[0].phone, '654321')
frappe.set_user('Administrator')
# reset user roles
user.remove_roles('Accounts User', 'Sales User')
user.add_roles(*user_roles)
contact.delete()
def get_blog(blog_name):
frappe.response.docs = []
getdoc('Blog Post', blog_name)
doc = frappe.response.docs[0]
return doc