From dcd54209fcfc4d8e8226edaecad9a10985a3d650 Mon Sep 17 00:00:00 2001 From: tunde Date: Thu, 22 Jun 2017 11:02:19 +0100 Subject: [PATCH 1/6] parameterises sql string --- erpnext/templates/pages/rfq.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/templates/pages/rfq.py b/erpnext/templates/pages/rfq.py index abc28904c32..aaf41104966 100644 --- a/erpnext/templates/pages/rfq.py +++ b/erpnext/templates/pages/rfq.py @@ -29,7 +29,7 @@ def get_supplier(): def check_supplier_has_docname_access(supplier): status = True if frappe.form_dict.name not in frappe.db.sql_list("""select parent from `tabRequest for Quotation Supplier` - where supplier = '{supplier}'""".format(supplier=supplier)): + where supplier = %s""", (supplier,)): status = False return status From 94500fd17be3183992c5af0de259c91eea0867ae Mon Sep 17 00:00:00 2001 From: tunde Date: Thu, 22 Jun 2017 17:34:54 +0100 Subject: [PATCH 2/6] adds test case --- .../test_request_for_quotation.py | 40 +++++++++++++++++-- 1 file changed, 37 insertions(+), 3 deletions(-) diff --git a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py index 4f205c57032..d180a0a875e 100644 --- a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py @@ -3,8 +3,10 @@ # See license.txt from __future__ import unicode_literals -import frappe import unittest + +import frappe +from erpnext.templates.pages.rfq import check_supplier_has_docname_access from frappe.utils import nowdate class TestRequestforQuotation(unittest.TestCase): @@ -28,6 +30,30 @@ class TestRequestforQuotation(unittest.TestCase): self.assertEquals(sq1.get('items')[0].item_code, "_Test Item") self.assertEquals(sq1.get('items')[0].qty, 5) + def test_make_supplier_quotation_with_special_characters(self): + from erpnext.buying.doctype.request_for_quotation.request_for_quotation import make_supplier_quotation + + frappe.delete_doc_if_exists("Supplier", "_Test Supplier '1", force=1) + supplier = frappe.new_doc("Supplier") + supplier.supplier_name = "_Test Supplier '1" + supplier.supplier_type = "_Test Supplier Type" + supplier.insert() + + rfq = make_request_for_quotation(supplier_wt_appos) + + sq = make_supplier_quotation(rfq.name, supplier_wt_appos[0].get("supplier")) + sq.submit() + + frappe.form_dict.name = rfq.name + + self.assertEqual( + check_supplier_has_docname_access(supplier_wt_appos[0].get('supplier')), + True + ) + + # reset form_dict + frappe.form_dict.name = None + def test_make_supplier_quotation_from_portal(self): from erpnext.buying.doctype.request_for_quotation.request_for_quotation import create_supplier_quotation rfq = make_request_for_quotation() @@ -44,8 +70,11 @@ class TestRequestforQuotation(unittest.TestCase): self.assertEquals(supplier_quotation_doc.get('items')[0].amount, 500) -def make_request_for_quotation(): - supplier_data = get_supplier_data() +def make_request_for_quotation(supplier_data=None): + """ + :param supplier_data: List containing supplier data + """ + supplier_data = supplier_data if supplier_data else get_supplier_data() rfq = frappe.new_doc('Request for Quotation') rfq.transaction_date = nowdate() rfq.status = 'Draft' @@ -77,3 +106,8 @@ def get_supplier_data(): "supplier": "_Test Supplier 1", "supplier_name": "_Test Supplier 1" }] + +supplier_wt_appos = [{ + "supplier": "_Test Supplier '1", + "supplier_name": "_Test Supplier '1", +}] From bce13cd0e3e8653935b6f514d4a0dd5f15609a21 Mon Sep 17 00:00:00 2001 From: tunde Date: Mon, 26 Jun 2017 08:43:25 +0100 Subject: [PATCH 3/6] fixes failing test --- .../doctype/request_for_quotation/test_request_for_quotation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py index d180a0a875e..e4868219b31 100644 --- a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py @@ -44,7 +44,7 @@ class TestRequestforQuotation(unittest.TestCase): sq = make_supplier_quotation(rfq.name, supplier_wt_appos[0].get("supplier")) sq.submit() - frappe.form_dict.name = rfq.name + frappe.form_dict['name'] = rfq.name self.assertEqual( check_supplier_has_docname_access(supplier_wt_appos[0].get('supplier')), From ea7768d3f34b91e479907cadf763d1e46fa539f7 Mon Sep 17 00:00:00 2001 From: tunde Date: Mon, 26 Jun 2017 10:17:53 +0100 Subject: [PATCH 4/6] fixes form_dict failure in travis test --- .../doctype/request_for_quotation/test_request_for_quotation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py index e4868219b31..7211263ac96 100644 --- a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py @@ -44,7 +44,7 @@ class TestRequestforQuotation(unittest.TestCase): sq = make_supplier_quotation(rfq.name, supplier_wt_appos[0].get("supplier")) sq.submit() - frappe.form_dict['name'] = rfq.name + frappe.local.form_dict.name = rfq.name self.assertEqual( check_supplier_has_docname_access(supplier_wt_appos[0].get('supplier')), From 8859eb23a38aee967ba4d579450c441b650d0978 Mon Sep 17 00:00:00 2001 From: tunde Date: Mon, 26 Jun 2017 12:01:41 +0100 Subject: [PATCH 5/6] set form_dict correctly --- .../doctype/request_for_quotation/test_request_for_quotation.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py index 7211263ac96..ef4e8b2cbc0 100644 --- a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py @@ -44,7 +44,7 @@ class TestRequestforQuotation(unittest.TestCase): sq = make_supplier_quotation(rfq.name, supplier_wt_appos[0].get("supplier")) sq.submit() - frappe.local.form_dict.name = rfq.name + frappe.local.form_dict = dict(name=rfq.name) self.assertEqual( check_supplier_has_docname_access(supplier_wt_appos[0].get('supplier')), From 5824ae98d900378e200da8b9701a3d324939ba07 Mon Sep 17 00:00:00 2001 From: tunde Date: Mon, 26 Jun 2017 12:42:11 +0100 Subject: [PATCH 6/6] calls `local` to build `frappe.form_dict` in order to pass failing test --- .../request_for_quotation/test_request_for_quotation.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py index ef4e8b2cbc0..2e8b946f9db 100644 --- a/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py +++ b/erpnext/buying/doctype/request_for_quotation/test_request_for_quotation.py @@ -44,7 +44,8 @@ class TestRequestforQuotation(unittest.TestCase): sq = make_supplier_quotation(rfq.name, supplier_wt_appos[0].get("supplier")) sq.submit() - frappe.local.form_dict = dict(name=rfq.name) + frappe.form_dict = frappe.local("form_dict") + frappe.form_dict.name = rfq.name self.assertEqual( check_supplier_has_docname_access(supplier_wt_appos[0].get('supplier')),