style: format code with black

This commit is contained in:
Ankush Menat
2022-03-28 18:52:46 +05:30
parent 21e00da3d6
commit 494bd9ef78
1395 changed files with 91704 additions and 62532 deletions

View File

@@ -1 +1 @@
global_test_dependencies = ['User', 'Company', 'Item']
global_test_dependencies = ["User", "Company", "Item"]

View File

@@ -4,7 +4,8 @@ import frappe
from erpnext import encode_company_abbr
test_records = frappe.get_test_records('Company')
test_records = frappe.get_test_records("Company")
class TestInit(unittest.TestCase):
def test_encode_company_abbr(self):
@@ -12,23 +13,30 @@ class TestInit(unittest.TestCase):
abbr = "NFECT"
names = [
"Warehouse Name", "ERPNext Foundation India", "Gold - Member - {a}".format(a=abbr),
" - {a}".format(a=abbr), "ERPNext - Foundation - India",
"Warehouse Name",
"ERPNext Foundation India",
"Gold - Member - {a}".format(a=abbr),
" - {a}".format(a=abbr),
"ERPNext - Foundation - India",
"ERPNext Foundation India - {a}".format(a=abbr),
"No-Space-{a}".format(a=abbr), "- Warehouse"
"No-Space-{a}".format(a=abbr),
"- Warehouse",
]
expected_names = [
"Warehouse Name - {a}".format(a=abbr), "ERPNext Foundation India - {a}".format(a=abbr),
"Gold - Member - {a}".format(a=abbr), " - {a}".format(a=abbr),
"Warehouse Name - {a}".format(a=abbr),
"ERPNext Foundation India - {a}".format(a=abbr),
"Gold - Member - {a}".format(a=abbr),
" - {a}".format(a=abbr),
"ERPNext - Foundation - India - {a}".format(a=abbr),
"ERPNext Foundation India - {a}".format(a=abbr), "No-Space-{a} - {a}".format(a=abbr),
"- Warehouse - {a}".format(a=abbr)
"ERPNext Foundation India - {a}".format(a=abbr),
"No-Space-{a} - {a}".format(a=abbr),
"- Warehouse - {a}".format(a=abbr),
]
for i in range(len(names)):
enc_name = encode_company_abbr(names[i], abbr=abbr)
self.assertTrue(
enc_name == expected_names[i],
"{enc} is not same as {exp}".format(enc=enc_name, exp=expected_names[i])
"{enc} is not same as {exp}".format(enc=enc_name, exp=expected_names[i]),
)

View File

@@ -10,9 +10,9 @@ from frappe.desk import notifications
class TestNotifications(unittest.TestCase):
def test_get_notifications_for_targets(self):
'''
Test notification config entries for targets as percentages
'''
"""
Test notification config entries for targets as percentages
"""
company = frappe.get_all("Company")[0]
frappe.db.set_value("Company", company.name, "monthly_sales_target", 10000)
@@ -21,7 +21,7 @@ class TestNotifications(unittest.TestCase):
config = notifications.get_notification_config()
doc_target_percents = notifications.get_notifications_for_targets(config, {})
self.assertEqual(doc_target_percents['Company'][company.name], 10)
self.assertEqual(doc_target_percents["Company"][company.name], 10)
frappe.db.set_value("Company", company.name, "monthly_sales_target", 2000)
frappe.db.set_value("Company", company.name, "total_monthly_sales", 0)
@@ -29,4 +29,4 @@ class TestNotifications(unittest.TestCase):
config = notifications.get_notification_config()
doc_target_percents = notifications.get_notifications_for_targets(config, {})
self.assertEqual(doc_target_percents['Company'][company.name], 0)
self.assertEqual(doc_target_percents["Company"][company.name], 0)

View File

@@ -14,11 +14,11 @@ from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
class TestPointOfSale(unittest.TestCase):
@classmethod
def setUpClass(cls) -> None:
frappe.db.savepoint('before_test_point_of_sale')
frappe.db.savepoint("before_test_point_of_sale")
@classmethod
def tearDownClass(cls) -> None:
frappe.db.rollback(save_point='before_test_point_of_sale')
frappe.db.rollback(save_point="before_test_point_of_sale")
def test_item_search(self):
"""

View File

@@ -7,15 +7,16 @@ import erpnext
@erpnext.allow_regional
def test_method():
return 'original'
return "original"
class TestInit(unittest.TestCase):
def test_regional_overrides(self):
frappe.flags.country = 'India'
self.assertEqual(test_method(), 'overridden')
frappe.flags.country = "India"
self.assertEqual(test_method(), "overridden")
frappe.flags.country = 'Maldives'
self.assertEqual(test_method(), 'original')
frappe.flags.country = "Maldives"
self.assertEqual(test_method(), "original")
frappe.flags.country = 'France'
self.assertEqual(test_method(), 'overridden')
frappe.flags.country = "France"
self.assertEqual(test_method(), "overridden")

View File

@@ -8,12 +8,11 @@ class TestSearch(unittest.TestCase):
# Search for the word "cond", part of the word "conduire" (Lead) in french.
def test_contact_search_in_foreign_language(self):
try:
frappe.local.lang = 'fr'
output = filter_dynamic_link_doctypes("DocType", "cond", "name", 0, 20, {
'fieldtype': 'HTML',
'fieldname': 'contact_html'
})
result = [['found' for x in y if x=="Lead"] for y in output]
self.assertTrue(['found'] in result)
frappe.local.lang = "fr"
output = filter_dynamic_link_doctypes(
"DocType", "cond", "name", 0, 20, {"fieldtype": "HTML", "fieldname": "contact_html"}
)
result = [["found" for x in y if x == "Lead"] for y in output]
self.assertTrue(["found"] in result)
finally:
frappe.local.lang = 'en'
frappe.local.lang = "en"

File diff suppressed because it is too large Load Diff

View File

@@ -7,132 +7,143 @@ from erpnext.buying.doctype.purchase_order.test_purchase_order import create_pur
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_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)
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()])
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'])
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'])
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')
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')
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)
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)
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):
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.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)
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'
}
]
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)
}).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)
frappe.get_doc(
{
"doctype": "Order Assignment",
"po": po,
"supplier": supplier,
}
).insert(ignore_if_duplicate=True)

View File

@@ -25,32 +25,126 @@ class TestWoocommerce(unittest.TestCase):
woo_settings.save(ignore_permissions=True)
def test_sales_order_for_woocommerce(self):
frappe.flags.woocomm_test_order_data = {"id":75,"parent_id":0,"number":"74","order_key":"wc_order_5aa1281c2dacb","created_via":"checkout","version":"3.3.3","status":"processing","currency":"INR","date_created":"2018-03-08T12:10:04","date_created_gmt":"2018-03-08T12:10:04","date_modified":"2018-03-08T12:10:04","date_modified_gmt":"2018-03-08T12:10:04","discount_total":"0.00","discount_tax":"0.00","shipping_total":"150.00","shipping_tax":"0.00","cart_tax":"0.00","total":"649.00","total_tax":"0.00","prices_include_tax":False,"customer_id":12,"customer_ip_address":"103.54.99.5","customer_user_agent":"mozilla\\/5.0 (x11; linux x86_64) applewebkit\\/537.36 (khtml, like gecko) chrome\\/64.0.3282.186 safari\\/537.36","customer_note":"","billing":{"first_name":"Tony","last_name":"Stark","company":"_Test Company","address_1":"Mumbai","address_2":"","city":"Dadar","state":"MH","postcode":"123","country":"IN","email":"tony@gmail.com","phone":"123457890"},"shipping":{"first_name":"Tony","last_name":"Stark","company":"","address_1":"Mumbai","address_2":"","city":"Dadar","state":"MH","postcode":"123","country":"IN"},"payment_method":"cod","payment_method_title":"Cash on delivery","transaction_id":"","date_paid":"","date_paid_gmt":"","date_completed":"","date_completed_gmt":"","cart_hash":"8e76b020d5790066496f244860c4703f","meta_data":[],"line_items":[{"id":80,"name":"Marvel","product_id":56,"variation_id":0,"quantity":1,"tax_class":"","subtotal":"499.00","subtotal_tax":"0.00","total":"499.00","total_tax":"0.00","taxes":[],"meta_data":[],"sku":"","price":499}],"tax_lines":[],"shipping_lines":[{"id":81,"method_title":"Flat rate","method_id":"flat_rate:1","total":"150.00","total_tax":"0.00","taxes":[],"meta_data":[{"id":623,"key":"Items","value":"Marvel × 1"}]}],"fee_lines":[],"coupon_lines":[],"refunds":[]}
frappe.flags.woocomm_test_order_data = {
"id": 75,
"parent_id": 0,
"number": "74",
"order_key": "wc_order_5aa1281c2dacb",
"created_via": "checkout",
"version": "3.3.3",
"status": "processing",
"currency": "INR",
"date_created": "2018-03-08T12:10:04",
"date_created_gmt": "2018-03-08T12:10:04",
"date_modified": "2018-03-08T12:10:04",
"date_modified_gmt": "2018-03-08T12:10:04",
"discount_total": "0.00",
"discount_tax": "0.00",
"shipping_total": "150.00",
"shipping_tax": "0.00",
"cart_tax": "0.00",
"total": "649.00",
"total_tax": "0.00",
"prices_include_tax": False,
"customer_id": 12,
"customer_ip_address": "103.54.99.5",
"customer_user_agent": "mozilla\\/5.0 (x11; linux x86_64) applewebkit\\/537.36 (khtml, like gecko) chrome\\/64.0.3282.186 safari\\/537.36",
"customer_note": "",
"billing": {
"first_name": "Tony",
"last_name": "Stark",
"company": "_Test Company",
"address_1": "Mumbai",
"address_2": "",
"city": "Dadar",
"state": "MH",
"postcode": "123",
"country": "IN",
"email": "tony@gmail.com",
"phone": "123457890",
},
"shipping": {
"first_name": "Tony",
"last_name": "Stark",
"company": "",
"address_1": "Mumbai",
"address_2": "",
"city": "Dadar",
"state": "MH",
"postcode": "123",
"country": "IN",
},
"payment_method": "cod",
"payment_method_title": "Cash on delivery",
"transaction_id": "",
"date_paid": "",
"date_paid_gmt": "",
"date_completed": "",
"date_completed_gmt": "",
"cart_hash": "8e76b020d5790066496f244860c4703f",
"meta_data": [],
"line_items": [
{
"id": 80,
"name": "Marvel",
"product_id": 56,
"variation_id": 0,
"quantity": 1,
"tax_class": "",
"subtotal": "499.00",
"subtotal_tax": "0.00",
"total": "499.00",
"total_tax": "0.00",
"taxes": [],
"meta_data": [],
"sku": "",
"price": 499,
}
],
"tax_lines": [],
"shipping_lines": [
{
"id": 81,
"method_title": "Flat rate",
"method_id": "flat_rate:1",
"total": "150.00",
"total_tax": "0.00",
"taxes": [],
"meta_data": [{"id": 623, "key": "Items", "value": "Marvel × 1"}],
}
],
"fee_lines": [],
"coupon_lines": [],
"refunds": [],
}
order()
self.assertTrue(frappe.get_value("Customer",{"woocommerce_email":"tony@gmail.com"}))
self.assertTrue(frappe.get_value("Item",{"woocommerce_id": 56}))
self.assertTrue(frappe.get_value("Sales Order",{"woocommerce_id":75}))
self.assertTrue(frappe.get_value("Customer", {"woocommerce_email": "tony@gmail.com"}))
self.assertTrue(frappe.get_value("Item", {"woocommerce_id": 56}))
self.assertTrue(frappe.get_value("Sales Order", {"woocommerce_id": 75}))
frappe.flags.woocomm_test_order_data = {}
def emulate_request():
# Emulate Woocommerce Request
headers = {
"X-Wc-Webhook-Event":"created",
"X-Wc-Webhook-Signature":"h1SjzQMPwd68MF5bficeFq20/RkQeRLsb9AVCUz/rLs="
"X-Wc-Webhook-Event": "created",
"X-Wc-Webhook-Signature": "h1SjzQMPwd68MF5bficeFq20/RkQeRLsb9AVCUz/rLs=",
}
# Emulate Request Data
data = """{"id":74,"parent_id":0,"number":"74","order_key":"wc_order_5aa1281c2dacb","created_via":"checkout","version":"3.3.3","status":"processing","currency":"INR","date_created":"2018-03-08T12:10:04","date_created_gmt":"2018-03-08T12:10:04","date_modified":"2018-03-08T12:10:04","date_modified_gmt":"2018-03-08T12:10:04","discount_total":"0.00","discount_tax":"0.00","shipping_total":"150.00","shipping_tax":"0.00","cart_tax":"0.00","total":"649.00","total_tax":"0.00","prices_include_tax":false,"customer_id":12,"customer_ip_address":"103.54.99.5","customer_user_agent":"mozilla\\/5.0 (x11; linux x86_64) applewebkit\\/537.36 (khtml, like gecko) chrome\\/64.0.3282.186 safari\\/537.36","customer_note":"","billing":{"first_name":"Tony","last_name":"Stark","company":"Woocommerce","address_1":"Mumbai","address_2":"","city":"Dadar","state":"MH","postcode":"123","country":"IN","email":"tony@gmail.com","phone":"123457890"},"shipping":{"first_name":"Tony","last_name":"Stark","company":"","address_1":"Mumbai","address_2":"","city":"Dadar","state":"MH","postcode":"123","country":"IN"},"payment_method":"cod","payment_method_title":"Cash on delivery","transaction_id":"","date_paid":null,"date_paid_gmt":null,"date_completed":null,"date_completed_gmt":null,"cart_hash":"8e76b020d5790066496f244860c4703f","meta_data":[],"line_items":[{"id":80,"name":"Marvel","product_id":56,"variation_id":0,"quantity":1,"tax_class":"","subtotal":"499.00","subtotal_tax":"0.00","total":"499.00","total_tax":"0.00","taxes":[],"meta_data":[],"sku":"","price":499}],"tax_lines":[],"shipping_lines":[{"id":81,"method_title":"Flat rate","method_id":"flat_rate:1","total":"150.00","total_tax":"0.00","taxes":[],"meta_data":[{"id":623,"key":"Items","value":"Marvel × 1"}]}],"fee_lines":[],"coupon_lines":[],"refunds":[]}"""
# Build URL
port = frappe.get_site_config().webserver_port or '8000'
port = frappe.get_site_config().webserver_port or "8000"
if os.environ.get('CI'):
host = 'localhost'
if os.environ.get("CI"):
host = "localhost"
else:
host = frappe.local.site
url = "http://{site}:{port}/api/method/erpnext.erpnext_integrations.connectors.woocommerce_connection.order".format(site=host, port=port)
url = "http://{site}:{port}/api/method/erpnext.erpnext_integrations.connectors.woocommerce_connection.order".format(
site=host, port=port
)
r = requests.post(url=url, headers=headers, data=data)

View File

@@ -7,11 +7,14 @@ from frappe.www.printview import get_html_and_style
class TestFormLoads(FrappeTestCase):
@change_settings("Print Settings", {"allow_print_for_cancelled": 1})
def test_load(self):
erpnext_modules = frappe.get_all("Module Def", filters={"app_name": "erpnext"}, pluck="name")
doctypes = frappe.get_all("DocType", {"istable": 0, "issingle": 0, "is_virtual": 0, "module": ("in", erpnext_modules)}, pluck="name")
doctypes = frappe.get_all(
"DocType",
{"istable": 0, "issingle": 0, "is_virtual": 0, "module": ("in", erpnext_modules)},
pluck="name",
)
for doctype in doctypes:
last_doc = frappe.db.get_value(doctype, {}, "name", order_by="modified desc")
@@ -23,7 +26,7 @@ class TestFormLoads(FrappeTestCase):
def assertFormLoad(self, doctype, docname):
# reset previous response
frappe.response = frappe._dict({"docs":[]})
frappe.response = frappe._dict({"docs": []})
frappe.response.docinfo = None
try:
@@ -31,8 +34,12 @@ class TestFormLoads(FrappeTestCase):
except Exception as e:
self.fail(f"Failed to load {doctype}-{docname}: {e}")
self.assertTrue(frappe.response.docs, msg=f"expected document in reponse, found: {frappe.response.docs}")
self.assertTrue(frappe.response.docinfo, msg=f"expected docinfo in reponse, found: {frappe.response.docinfo}")
self.assertTrue(
frappe.response.docs, msg=f"expected document in reponse, found: {frappe.response.docs}"
)
self.assertTrue(
frappe.response.docinfo, msg=f"expected docinfo in reponse, found: {frappe.response.docinfo}"
)
def assertDocPrint(self, doctype, docname):
doc = frappe.get_doc(doctype, docname)
@@ -44,9 +51,8 @@ class TestFormLoads(FrappeTestCase):
messages_after = frappe.get_message_log()
if len(messages_after) > len(messages_before):
new_messages = messages_after[len(messages_before):]
self.fail("Print view showing error/warnings: \n"
+ "\n".join(str(msg) for msg in new_messages))
new_messages = messages_after[len(messages_before) :]
self.fail("Print view showing error/warnings: \n" + "\n".join(str(msg) for msg in new_messages))
# html should exist
self.assertTrue(bool(ret["html"]))

View File

@@ -18,4 +18,4 @@ def create_records():
gd.set("default_company", "Test Bulk")
gd.save()
frappe.clear_cache()
create_so()
create_so()

View File

@@ -9,54 +9,67 @@ def create_employee_records():
frappe.db.sql("DELETE FROM tabEmployee WHERE company='Test Org Chart'")
emp1 = create_employee('Test Employee 1', 'CEO')
emp2 = create_employee('Test Employee 2', 'CTO')
emp3 = create_employee('Test Employee 3', 'Head of Marketing and Sales', emp1)
emp4 = create_employee('Test Employee 4', 'Project Manager', emp2)
emp5 = create_employee('Test Employee 5', 'Engineer', emp2)
emp6 = create_employee('Test Employee 6', 'Analyst', emp3)
emp7 = create_employee('Test Employee 7', 'Software Developer', emp4)
emp1 = create_employee("Test Employee 1", "CEO")
emp2 = create_employee("Test Employee 2", "CTO")
emp3 = create_employee("Test Employee 3", "Head of Marketing and Sales", emp1)
emp4 = create_employee("Test Employee 4", "Project Manager", emp2)
emp5 = create_employee("Test Employee 5", "Engineer", emp2)
emp6 = create_employee("Test Employee 6", "Analyst", emp3)
emp7 = create_employee("Test Employee 7", "Software Developer", emp4)
employees = [emp1, emp2, emp3, emp4, emp5, emp6, emp7]
return employees
@frappe.whitelist()
def get_employee_records():
return frappe.db.get_list('Employee', filters={
'company': 'Test Org Chart'
}, pluck='name', order_by='name')
return frappe.db.get_list(
"Employee", filters={"company": "Test Org Chart"}, pluck="name", order_by="name"
)
def create_company():
company = frappe.db.exists('Company', 'Test Org Chart')
company = frappe.db.exists("Company", "Test Org Chart")
if not company:
company = frappe.get_doc({
'doctype': 'Company',
'company_name': 'Test Org Chart',
'country': 'India',
'default_currency': 'INR'
}).insert().name
company = (
frappe.get_doc(
{
"doctype": "Company",
"company_name": "Test Org Chart",
"country": "India",
"default_currency": "INR",
}
)
.insert()
.name
)
return company
def create_employee(first_name, designation, reports_to=None):
employee = frappe.db.exists('Employee', {'first_name': first_name, 'designation': designation})
employee = frappe.db.exists("Employee", {"first_name": first_name, "designation": designation})
if not employee:
employee = frappe.get_doc({
'doctype': 'Employee',
'first_name': first_name,
'company': 'Test Org Chart',
'gender': 'Female',
'date_of_birth': getdate('08-12-1998'),
'date_of_joining': getdate('01-01-2021'),
'designation': designation,
'reports_to': reports_to
}).insert().name
employee = (
frappe.get_doc(
{
"doctype": "Employee",
"first_name": first_name,
"company": "Test Org Chart",
"gender": "Female",
"date_of_birth": getdate("08-12-1998"),
"date_of_joining": getdate("01-01-2021"),
"designation": designation,
"reports_to": reports_to,
}
)
.insert()
.name
)
return employee
def create_missing_designation():
if not frappe.db.exists('Designation', 'CTO'):
frappe.get_doc({
'doctype': 'Designation',
'designation_name': 'CTO'
}).insert()
if not frappe.db.exists("Designation", "CTO"):
frappe.get_doc({"doctype": "Designation", "designation_name": "CTO"}).insert()

View File

@@ -9,83 +9,77 @@ from frappe.core.doctype.report.report import get_report_module_dotted_path
ReportFilters = Dict[str, Any]
ReportName = NewType("ReportName", str)
def create_test_contact_and_address():
frappe.db.sql('delete from tabContact')
frappe.db.sql('delete from `tabContact Email`')
frappe.db.sql('delete from `tabContact Phone`')
frappe.db.sql('delete from tabAddress')
frappe.db.sql('delete from `tabDynamic Link`')
frappe.db.sql("delete from tabContact")
frappe.db.sql("delete from `tabContact Email`")
frappe.db.sql("delete from `tabContact Phone`")
frappe.db.sql("delete from tabAddress")
frappe.db.sql("delete from `tabDynamic Link`")
frappe.get_doc({
"doctype": "Address",
"address_title": "_Test Address for Customer",
"address_type": "Office",
"address_line1": "Station Road",
"city": "_Test City",
"state": "Test State",
"country": "India",
"links": [
{
"link_doctype": "Customer",
"link_name": "_Test Customer"
}
]
}).insert()
frappe.get_doc(
{
"doctype": "Address",
"address_title": "_Test Address for Customer",
"address_type": "Office",
"address_line1": "Station Road",
"city": "_Test City",
"state": "Test State",
"country": "India",
"links": [{"link_doctype": "Customer", "link_name": "_Test Customer"}],
}
).insert()
contact = frappe.get_doc({
"doctype": 'Contact',
"first_name": "_Test Contact for _Test Customer",
"links": [
{
"link_doctype": "Customer",
"link_name": "_Test Customer"
}
]
})
contact = frappe.get_doc(
{
"doctype": "Contact",
"first_name": "_Test Contact for _Test Customer",
"links": [{"link_doctype": "Customer", "link_name": "_Test Customer"}],
}
)
contact.add_email("test_contact_customer@example.com", is_primary=True)
contact.add_phone("+91 0000000000", is_primary_phone=True)
contact.insert()
contact_two = frappe.get_doc({
"doctype": 'Contact',
"first_name": "_Test Contact 2 for _Test Customer",
"links": [
{
"link_doctype": "Customer",
"link_name": "_Test Customer"
}
]
})
contact_two = frappe.get_doc(
{
"doctype": "Contact",
"first_name": "_Test Contact 2 for _Test Customer",
"links": [{"link_doctype": "Customer", "link_name": "_Test Customer"}],
}
)
contact_two.add_email("test_contact_two_customer@example.com", is_primary=True)
contact_two.add_phone("+92 0000000000", is_primary_phone=True)
contact_two.insert()
def execute_script_report(
report_name: ReportName,
module: str,
filters: ReportFilters,
default_filters: Optional[ReportFilters] = None,
optional_filters: Optional[ReportFilters] = None
):
report_name: ReportName,
module: str,
filters: ReportFilters,
default_filters: Optional[ReportFilters] = None,
optional_filters: Optional[ReportFilters] = None,
):
"""Util for testing execution of a report with specified filters.
Tests the execution of report with default_filters + filters.
Tests the execution using optional_filters one at a time.
Args:
report_name: Human readable name of report (unscrubbed)
module: module to which report belongs to
filters: specific values for filters
default_filters: default values for filters such as company name.
optional_filters: filters which should be tested one at a time in addition to default filters.
report_name: Human readable name of report (unscrubbed)
module: module to which report belongs to
filters: specific values for filters
default_filters: default values for filters such as company name.
optional_filters: filters which should be tested one at a time in addition to default filters.
"""
if default_filters is None:
default_filters = {}
test_filters = []
report_execute_fn = frappe.get_attr(get_report_module_dotted_path(module, report_name) + ".execute")
report_execute_fn = frappe.get_attr(
get_report_module_dotted_path(module, report_name) + ".execute"
)
report_filters = frappe._dict(default_filters).copy().update(filters)
test_filters.append(report_filters)