diff --git a/erpnext/manufacturing/doctype/work_order/test_work_order.py b/erpnext/manufacturing/doctype/work_order/test_work_order.py
index fc9986b..cb30fda 100644
--- a/erpnext/manufacturing/doctype/work_order/test_work_order.py
+++ b/erpnext/manufacturing/doctype/work_order/test_work_order.py
@@ -8,7 +8,7 @@
 from frappe.utils import flt, time_diff_in_hours, now, add_days, cint
 from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory
 from erpnext.manufacturing.doctype.work_order.work_order \
-	import make_stock_entry, ItemHasVariantError, stop_unstop
+	import make_stock_entry, ItemHasVariantError, stop_unstop, StockOverProductionError, OverProductionError
 from erpnext.stock.doctype.stock_entry import test_stock_entry
 from erpnext.stock.utils import get_bin
 from erpnext.selling.doctype.sales_order.test_sales_order import make_sales_order
@@ -59,8 +59,6 @@
 		return wo_order
 
 	def test_over_production(self):
-		from erpnext.manufacturing.doctype.work_order.work_order import StockOverProductionError
-
 		wo_doc = self.check_planned_qty()
 
 		test_stock_entry.make_stock_entry(item_code="_Test Item",
@@ -279,6 +277,43 @@
 				self.assertEqual(wo_order_details.scrap_warehouse, item.t_warehouse)
 				self.assertEqual(flt(wo_order_details.qty)*flt(scrap_item_details[item.item_code]), item.qty)
 
+	def test_allow_overproduction(self):
+		allow_overproduction("overproduction_percentage_for_work_order", 0)
+		wo_order = make_wo_order_test_record(planned_start_date=now(), qty=2)
+		test_stock_entry.make_stock_entry(item_code="_Test Item",
+			target="_Test Warehouse - _TC", qty=10, basic_rate=5000.0)
+		test_stock_entry.make_stock_entry(item_code="_Test Item Home Desktop 100",
+			target="_Test Warehouse - _TC", qty=10, basic_rate=1000.0)
+
+		s = frappe.get_doc(make_stock_entry(wo_order.name, "Material Transfer for Manufacture", 3))
+		s.insert()
+		self.assertRaises(StockOverProductionError, s.submit)
+
+		allow_overproduction("overproduction_percentage_for_work_order", 50)
+		s.load_from_db()
+		s.submit()
+		self.assertEqual(s.docstatus, 1)
+
+		allow_overproduction("overproduction_percentage_for_work_order", 0)
+
+	def test_over_production_for_sales_order(self):
+		so = make_sales_order(item_code="_Test FG Item", qty=2)
+
+		allow_overproduction("overproduction_percentage_for_sales_order", 0)
+		wo_order = make_wo_order_test_record(planned_start_date=now(),
+			sales_order=so.name, qty=3, do_not_save=True)
+
+		self.assertRaises(OverProductionError, wo_order.save)
+
+		allow_overproduction("overproduction_percentage_for_sales_order", 50)
+		wo_order = make_wo_order_test_record(planned_start_date=now(),
+			sales_order=so.name, qty=3)
+
+		wo_order.submit()
+		self.assertEqual(wo_order.docstatus, 1)
+
+		allow_overproduction("overproduction_percentage_for_sales_order", 0)
+
 def get_scrap_item_details(bom_no):
 	scrap_items = {}
 	for item in frappe.db.sql("""select item_code, stock_qty from `tabBOM Scrap Item`
@@ -287,6 +322,13 @@
 
 	return scrap_items
 
+def allow_overproduction(fieldname, percentage):
+	doc = frappe.get_doc("Manufacturing Settings")
+	doc.update({
+		fieldname: percentage
+	})
+	doc.save()
+
 def make_wo_order_test_record(**args):
 	args = frappe._dict(args)
 
@@ -303,6 +345,7 @@
 	wo_order.use_multi_level_bom=0
 	wo_order.skip_transfer=1
 	wo_order.get_items_and_operations_from_bom()
+	wo_order.sales_order = args.sales_order or None
 
 	if args.source_warehouse:
 		for item in wo_order.get("required_items"):
