blob: af50a057b8a81b3ae82e955d1b85b2f7effd54c7 [file] [log] [blame]
Shariq Ansari9aa6f522021-09-14 12:49:08 +05301import unittest
2
3import frappe
4
5from erpnext.buying.doctype.purchase_order.test_purchase_order import create_purchase_order
Gursheen Kaur Anand5113a412023-06-28 11:22:40 +05306from erpnext.buying.doctype.supplier.test_supplier import create_supplier
Shariq Ansari9aa6f522021-09-14 12:49:08 +05307
8
9class TestWebsite(unittest.TestCase):
10 def test_permission_for_custom_doctype(self):
Ankush Menat494bd9e2022-03-28 18:52:46 +053011 create_user("Supplier 1", "supplier1@gmail.com")
12 create_user("Supplier 2", "supplier2@gmail.com")
Gursheen Kaur Anand5113a412023-06-28 11:22:40 +053013
14 supplier1 = create_supplier(supplier_name="Supplier1")
15 supplier2 = create_supplier(supplier_name="Supplier2")
16 supplier1.append("portal_users", {"user": "supplier1@gmail.com"})
17 supplier1.save()
18 supplier2.append("portal_users", {"user": "supplier2@gmail.com"})
19 supplier2.save()
20
Ankush Menat494bd9e2022-03-28 18:52:46 +053021 po1 = create_purchase_order(supplier="Supplier1")
22 po2 = create_purchase_order(supplier="Supplier2")
Shariq Ansari9aa6f522021-09-14 12:49:08 +053023
24 create_custom_doctype()
25 create_webform()
Ankush Menat494bd9e2022-03-28 18:52:46 +053026 create_order_assignment(supplier="Supplier1", po=po1.name)
27 create_order_assignment(supplier="Supplier2", po=po2.name)
Shariq Ansari9aa6f522021-09-14 12:49:08 +053028
29 frappe.set_user("Administrator")
30 # checking if data consist of all order assignment of Supplier1 and Supplier2
Ankush Menat494bd9e2022-03-28 18:52:46 +053031 self.assertTrue("Supplier1" and "Supplier2" in [data.supplier for data in get_data()])
Shariq Ansari9aa6f522021-09-14 12:49:08 +053032
33 frappe.set_user("supplier1@gmail.com")
34 # checking if data only consist of order assignment of Supplier1
Ankush Menat494bd9e2022-03-28 18:52:46 +053035 self.assertTrue("Supplier1" in [data.supplier for data in get_data()])
36 self.assertFalse([data.supplier for data in get_data() if data.supplier != "Supplier1"])
Shariq Ansari9aa6f522021-09-14 12:49:08 +053037
38 frappe.set_user("supplier2@gmail.com")
39 # checking if data only consist of order assignment of Supplier2
Ankush Menat494bd9e2022-03-28 18:52:46 +053040 self.assertTrue("Supplier2" in [data.supplier for data in get_data()])
41 self.assertFalse([data.supplier for data in get_data() if data.supplier != "Supplier2"])
Shariq Ansari9aa6f522021-09-14 12:49:08 +053042
43 frappe.set_user("Administrator")
44
Ankush Menat494bd9e2022-03-28 18:52:46 +053045
Shariq Ansari9aa6f522021-09-14 12:49:08 +053046def get_data():
Ankush Menat494bd9e2022-03-28 18:52:46 +053047 webform_list_contexts = frappe.get_hooks("webform_list_context")
Shariq Ansari9aa6f522021-09-14 12:49:08 +053048 if webform_list_contexts:
Ankush Menat494bd9e2022-03-28 18:52:46 +053049 context = frappe._dict(frappe.get_attr(webform_list_contexts[0])("Buying") or {})
50 kwargs = dict(doctype="Order Assignment", order_by="modified desc")
Shariq Ansari9aa6f522021-09-14 12:49:08 +053051 return context.get_list(**kwargs)
52
Ankush Menat494bd9e2022-03-28 18:52:46 +053053
Shariq Ansari9aa6f522021-09-14 12:49:08 +053054def create_user(name, email):
Ankush Menat494bd9e2022-03-28 18:52:46 +053055 frappe.get_doc(
56 {
57 "doctype": "User",
58 "send_welcome_email": 0,
59 "user_type": "Website User",
60 "first_name": name,
61 "email": email,
62 "roles": [{"doctype": "Has Role", "role": "Supplier"}],
63 }
64 ).insert(ignore_if_duplicate=True)
65
Shariq Ansari9aa6f522021-09-14 12:49:08 +053066
Shariq Ansari9aa6f522021-09-14 12:49:08 +053067def create_custom_doctype():
Ankush Menat494bd9e2022-03-28 18:52:46 +053068 frappe.get_doc(
69 {
70 "doctype": "DocType",
71 "name": "Order Assignment",
72 "module": "Buying",
73 "custom": 1,
74 "autoname": "field:po",
75 "fields": [
76 {"label": "PO", "fieldname": "po", "fieldtype": "Link", "options": "Purchase Order"},
77 {
78 "label": "Supplier",
79 "fieldname": "supplier",
80 "fieldtype": "Data",
81 "fetch_from": "po.supplier",
82 },
83 ],
84 "permissions": [
85 {
86 "create": 1,
87 "delete": 1,
88 "email": 1,
89 "export": 1,
90 "print": 1,
91 "read": 1,
92 "report": 1,
93 "role": "System Manager",
94 "share": 1,
95 "write": 1,
96 },
97 {"read": 1, "role": "Supplier"},
98 ],
99 }
100 ).insert(ignore_if_duplicate=True)
101
Shariq Ansari9aa6f522021-09-14 12:49:08 +0530102
103def create_webform():
Ankush Menat494bd9e2022-03-28 18:52:46 +0530104 frappe.get_doc(
105 {
106 "doctype": "Web Form",
107 "module": "Buying",
108 "title": "SO Schedule",
109 "route": "so-schedule",
110 "doc_type": "Order Assignment",
111 "web_form_fields": [
112 {
113 "doctype": "Web Form Field",
114 "fieldname": "po",
115 "fieldtype": "Link",
116 "options": "Purchase Order",
117 "label": "PO",
118 },
119 {
120 "doctype": "Web Form Field",
121 "fieldname": "supplier",
122 "fieldtype": "Data",
123 "label": "Supplier",
124 },
125 ],
126 }
127 ).insert(ignore_if_duplicate=True)
Shariq Ansari9aa6f522021-09-14 12:49:08 +0530128
Shariq Ansari9aa6f522021-09-14 12:49:08 +0530129
130def create_order_assignment(supplier, po):
Ankush Menat494bd9e2022-03-28 18:52:46 +0530131 frappe.get_doc(
132 {
133 "doctype": "Order Assignment",
134 "po": po,
135 "supplier": supplier,
136 }
137 ).insert(ignore_if_duplicate=True)