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