138 lines
4.0 KiB
Python
138 lines
4.0 KiB
Python
|
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)
|