-
Notifications
You must be signed in to change notification settings - Fork 7.9k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Browse files
Browse the repository at this point in the history
* fix: Webform Permission for custom doctype (#26232) * fix: Webform Permission for custom doctype * fix: sider fix * fix: app check condition for getting correct list_context * chore: Better naming convention * test: Added test case to check permission for webform of custom doctype * chore: linting issue * chore: linting issue * fix: sider fix * test: minor changes * chore: linter and better naming method * chore: linter fix (cherry picked from commit 9aa6f52) # Conflicts: # erpnext/hooks.py * chore: Resolved Conflicts Co-authored-by: Shariq Ansari <30859809+shariquerik@users.noreply.github.com>
- Loading branch information
1 parent
72c22a4
commit 10cffe8
Showing
3 changed files
with
173 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,138 @@ | ||
import unittest | ||
|
||
import frappe | ||
|
||
from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order | ||
|
||
|
||
class TestWebsite(unittest.TestCase): | ||
def test_permission_for_custom_doctype(self): | ||
create_user('Supplier 1', 'supplier1@gmail.com') | ||
create_user('Supplier 2', 'supplier2@gmail.com') | ||
create_supplier_with_contact('Supplier1', 'All Supplier Groups', 'Supplier 1', 'supplier1@gmail.com') | ||
create_supplier_with_contact('Supplier2', 'All Supplier Groups', 'Supplier 2', 'supplier2@gmail.com') | ||
po1 = create_purchase_order(supplier='Supplier1') | ||
po2 = create_purchase_order(supplier='Supplier2') | ||
|
||
create_custom_doctype() | ||
create_webform() | ||
create_order_assignment(supplier='Supplier1', po = po1.name) | ||
create_order_assignment(supplier='Supplier2', po = po2.name) | ||
|
||
frappe.set_user("Administrator") | ||
# checking if data consist of all order assignment of Supplier1 and Supplier2 | ||
self.assertTrue('Supplier1' and 'Supplier2' in [data.supplier for data in get_data()]) | ||
|
||
frappe.set_user("supplier1@gmail.com") | ||
# checking if data only consist of order assignment of Supplier1 | ||
self.assertTrue('Supplier1' in [data.supplier for data in get_data()]) | ||
self.assertFalse([data.supplier for data in get_data() if data.supplier != 'Supplier1']) | ||
|
||
frappe.set_user("supplier2@gmail.com") | ||
# checking if data only consist of order assignment of Supplier2 | ||
self.assertTrue('Supplier2' in [data.supplier for data in get_data()]) | ||
self.assertFalse([data.supplier for data in get_data() if data.supplier != 'Supplier2']) | ||
|
||
frappe.set_user("Administrator") | ||
|
||
def get_data(): | ||
webform_list_contexts = frappe.get_hooks('webform_list_context') | ||
if webform_list_contexts: | ||
context = frappe._dict(frappe.get_attr(webform_list_contexts[0])('Buying') or {}) | ||
kwargs = dict(doctype='Order Assignment', order_by = 'modified desc') | ||
return context.get_list(**kwargs) | ||
|
||
def create_user(name, email): | ||
frappe.get_doc({ | ||
'doctype': 'User', | ||
'send_welcome_email': 0, | ||
'user_type': 'Website User', | ||
'first_name': name, | ||
'email': email, | ||
'roles': [{"doctype": "Has Role", "role": "Supplier"}] | ||
}).insert(ignore_if_duplicate = True) | ||
|
||
def create_supplier_with_contact(name, group, contact_name, contact_email): | ||
supplier = frappe.get_doc({ | ||
'doctype': 'Supplier', | ||
'supplier_name': name, | ||
'supplier_group': group | ||
}).insert(ignore_if_duplicate = True) | ||
|
||
if not frappe.db.exists('Contact', contact_name+'-1-'+name): | ||
new_contact = frappe.new_doc("Contact") | ||
new_contact.first_name = contact_name | ||
new_contact.is_primary_contact = True, | ||
new_contact.append('links', { | ||
"link_doctype": "Supplier", | ||
"link_name": supplier.name | ||
}) | ||
new_contact.append('email_ids', { | ||
"email_id": contact_email, | ||
"is_primary": 1 | ||
}) | ||
|
||
new_contact.insert(ignore_mandatory=True) | ||
|
||
def create_custom_doctype(): | ||
frappe.get_doc({ | ||
'doctype': 'DocType', | ||
'name': 'Order Assignment', | ||
'module': 'Buying', | ||
'custom': 1, | ||
'autoname': 'field:po', | ||
'fields': [ | ||
{'label': 'PO', 'fieldname': 'po', 'fieldtype': 'Link', 'options': 'Purchase Order'}, | ||
{'label': 'Supplier', 'fieldname': 'supplier', 'fieldtype': 'Data', "fetch_from": "po.supplier"} | ||
], | ||
'permissions': [ | ||
{ | ||
"create": 1, | ||
"delete": 1, | ||
"email": 1, | ||
"export": 1, | ||
"print": 1, | ||
"read": 1, | ||
"report": 1, | ||
"role": "System Manager", | ||
"share": 1, | ||
"write": 1 | ||
}, | ||
{ | ||
"read": 1, | ||
"role": "Supplier" | ||
} | ||
] | ||
}).insert(ignore_if_duplicate = True) | ||
|
||
def create_webform(): | ||
frappe.get_doc({ | ||
'doctype': 'Web Form', | ||
'module': 'Buying', | ||
'title': 'SO Schedule', | ||
'route': 'so-schedule', | ||
'doc_type': 'Order Assignment', | ||
'web_form_fields': [ | ||
{ | ||
'doctype': 'Web Form Field', | ||
'fieldname': 'po', | ||
'fieldtype': 'Link', | ||
'options': 'Purchase Order', | ||
'label': 'PO' | ||
}, | ||
{ | ||
'doctype': 'Web Form Field', | ||
'fieldname': 'supplier', | ||
'fieldtype': 'Data', | ||
'label': 'Supplier' | ||
} | ||
] | ||
|
||
}).insert(ignore_if_duplicate = True) | ||
|
||
def create_order_assignment(supplier, po): | ||
frappe.get_doc({ | ||
'doctype': 'Order Assignment', | ||
'po': po, | ||
'supplier': supplier, | ||
}).insert(ignore_if_duplicate = True) |