From 229c0d9a96f04313e87b273e0846fe395467b671 Mon Sep 17 00:00:00 2001 From: Mangesh-Khairnar Date: Tue, 16 Apr 2019 23:36:08 +0530 Subject: [PATCH] test: check default user permission overlap validation --- .../user_permission/test_user_permission.py | 47 ++++++++++++------- .../user_permission/user_permission.py | 4 +- 2 files changed, 31 insertions(+), 20 deletions(-) diff --git a/frappe/core/doctype/user_permission/test_user_permission.py b/frappe/core/doctype/user_permission/test_user_permission.py index b83d103013..79da4328a0 100644 --- a/frappe/core/doctype/user_permission/test_user_permission.py +++ b/frappe/core/doctype/user_permission/test_user_permission.py @@ -8,17 +8,28 @@ import frappe import unittest class TestUserPermission(unittest.TestCase): + def test_default_user_permission(self): + user = create_user('test_bulk_creation_update@example.com') + param = get_params(user, 'User', user.name, True) + add_user_permissions(param) + + #create a duplicate entry with default + perm_user = create_user('test_perm@example.com') + + param = get_params(user, 'User', perm_user.name, True) + self.assertRaises(frappe.ValidationError, add_user_permissions, param) + def test_apply_to_all(self): ''' Create User permission for User having access to all applicable Doctypes''' - user = get_user() - param = get_params(user, apply = 1) + user = create_user('test_bulk_creation_update@example.com') + param = get_params(user, 'User', user.name) created = add_user_permissions(param) self.assertEquals(created, 1) def test_for_applicable_on_update_from_apply_to_all(self): ''' Update User Permission from all to some applicable Doctypes''' - user = get_user() - param = get_params(user, applicable = ["Chat Room", "Chat Message"]) + user = create_user('test_bulk_creation_update@example.com') + param = get_params(user, 'User', user.name , applicable = ["Chat Room", "Chat Message"]) create = add_user_permissions(param) frappe.db.commit() @@ -33,8 +44,8 @@ class TestUserPermission(unittest.TestCase): def test_for_apply_to_all_on_update_from_applicable(self): ''' Update User Permission from some to all applicable Doctypes''' - user = get_user() - param = get_params(user, apply = 1) + user = create_user('test_bulk_creation_update@example.com') + param = get_params(user, 'User', user.name) created = add_user_permissions(param) created_apply_to_all = frappe.db.exists("User Permission", get_exists_param(user)) removed_applicable_first = frappe.db.exists("User Permission", get_exists_param(user, applicable = "Chat Room")) @@ -46,26 +57,26 @@ class TestUserPermission(unittest.TestCase): self.assertIsNone(removed_applicable_second) self.assertEquals(created, 1) -def get_user(): - if frappe.db.exists('User', 'test_bulk_creation_update@example.com'): - return frappe.get_doc('User', 'test_bulk_creation_update@example.com') +def create_user(user): + if frappe.db.exists('User', user): + return frappe.get_doc('User', user) else: user = frappe.new_doc('User') - user.email = 'test_bulk_creation_update@example.com' - user.first_name = 'Test_Bulk_Creation' + user.email = user + user.first_name = user.split("@")[0] user.add_roles("System Manager") return user -def get_params(user, apply = None , applicable = None): +def get_params(user, doctype, docname, is_default=False, applicable=None): ''' Return param to insert ''' param = { "user": user.name, - "doctype":"User", - "docname":user.name + "doctype":doctype, + "docname":docname, + "is_default": is_default, + "apply_to_all_doctypes": 1, + "applicable_doctypes": [] } - if apply: - param.update({"apply_to_all_doctypes": 1}) - param.update({"applicable_doctypes": []}) if applicable: param.update({"apply_to_all_doctypes": 0}) param.update({"applicable_doctypes": applicable}) @@ -82,4 +93,4 @@ def get_exists_param(user, applicable = None): param.update({"applicable_for": applicable}) else: param.update({"apply_to_all_doctypes": 1}) - return param + return param \ No newline at end of file diff --git a/frappe/core/doctype/user_permission/user_permission.py b/frappe/core/doctype/user_permission/user_permission.py index f650b543fa..604bfc7973 100644 --- a/frappe/core/doctype/user_permission/user_permission.py +++ b/frappe/core/doctype/user_permission/user_permission.py @@ -14,7 +14,7 @@ from frappe.desk.form.linked_with import get_linked_doctypes class UserPermission(Document): def validate(self): self.validate_user_permission() - self.validate_permission_overlap() + self.validate_default_permission() def on_update(self): frappe.cache().delete_value('user_permissions') @@ -38,7 +38,7 @@ class UserPermission(Document): if duplicate_exists: frappe.throw(_("User permission already exists"), frappe.DuplicateEntryError) - def validate_permission_overlap(self): + def validate_default_permission(self): ''' validate user permission overlap for default value of a particular doctype ''' overlap_exists = [] if self.is_default: