|
- 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)
|