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)