[#2164] Add test case for delivered qty in Sales Order
diff --git a/erpnext/selling/doctype/sales_order/test_sales_order.py b/erpnext/selling/doctype/sales_order/test_sales_order.py
index 8195a1b..f872292 100644
--- a/erpnext/selling/doctype/sales_order/test_sales_order.py
+++ b/erpnext/selling/doctype/sales_order/test_sales_order.py
@@ -34,12 +34,10 @@
 		self.assertRaises(frappe.ValidationError, make_delivery_note,
 			so.name)
 
-		sales_order = frappe.get_doc("Sales Order", so.name)
-		sales_order.submit()
-		dn = make_delivery_note(so.name)
+		dn = self.make_next_doc_testcase(so, "Delivery Note")
 
 		self.assertEquals(dn.doctype, "Delivery Note")
-		self.assertEquals(len(dn.get("delivery_note_details")), len(sales_order.get("sales_order_details")))
+		self.assertEquals(len(dn.get("delivery_note_details")), len(so.get("sales_order_details")))
 
 	def test_make_sales_invoice(self):
 		from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice
@@ -49,22 +47,77 @@
 		self.assertRaises(frappe.ValidationError, make_sales_invoice,
 			so.name)
 
-		sales_order = frappe.get_doc("Sales Order", so.name)
-		sales_order.submit()
-		si = make_sales_invoice(so.name)
+		si = self.make_next_doc_testcase(so, "Sales Invoice")
 
 		self.assertEquals(si.doctype, "Sales Invoice")
-		self.assertEquals(len(si.get("entries")), len(sales_order.get("sales_order_details")))
+		self.assertEquals(len(si.get("entries")), len(so.get("sales_order_details")))
 		self.assertEquals(len(si.get("entries")), 1)
 
-		si.debit_to = "_Test Receivable - _TC"
-		si.posting_date = "2013-10-10"
+		si.set("debit_to", "_Test Receivable - _TC")
+		si.set("posting_date", "2013-10-10")
 		si.insert()
 		si.submit()
 
-		si1 = make_sales_invoice(so.name)
+		si1 = self.make_next_doc_testcase(so, "Sales Invoice")
 		self.assertEquals(len(si1.get("entries")), 0)
 
+	def test_update_qty(self):
+		so = frappe.copy_doc(test_records[0]).insert()
+
+		dn = self.make_next_doc_testcase(so, "Delivery Note")
+
+		dn.get("delivery_note_details")[0].qty = 6
+		dn.posting_date = "2013-10-10"
+		dn.insert()
+
+		delivery_note = frappe.get_doc("Delivery Note", dn.name)
+		delivery_note.submit()
+
+		sales_order = frappe.get_doc("Sales Order", so.name)
+
+		self.assertEquals(sales_order.get("sales_order_details")[0].delivered_qty, 6)
+
+		#Check delivered_qty after make_sales_invoice without update_stock checked
+		si1 = self.make_next_doc_testcase(sales_order, "Sales Invoice")
+
+		si1.set("debit_to", "_Test Receivable - _TC")
+		si1.set("posting_date", "2013-10-10")
+		si1.get("entries")[0].qty = 1
+		si1.insert()
+		si1.submit()
+
+		sales_order = frappe.get_doc("Sales Order", sales_order.name)
+
+		self.assertEquals(sales_order.get("sales_order_details")[0].delivered_qty, 6)
+
+		#Check delivered_qty after make_sales_invoice with update_stock checked
+		si2 = self.make_next_doc_testcase(sales_order, "Sales Invoice")
+
+		si2.set("debit_to", "_Test Receivable - _TC")
+		si2.set("posting_date", "2013-10-10")
+		si2.set("update_stock", 1)
+		si2.get("entries")[0].qty = 3
+		si2.insert()
+		si2.submit()
+
+		sales_order = frappe.get_doc("Sales Order", sales_order.name)
+
+		self.assertEquals(sales_order.get("sales_order_details")[0].delivered_qty, 9)
+
+	def make_next_doc_testcase(self, so, next_doc = None):
+
+		if so.docstatus < 1:
+			so.submit()
+
+		if next_doc == "Delivery Note":
+			from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note
+			next_doc = make_delivery_note(so.name)
+
+		if next_doc == "Sales Invoice":
+			from erpnext.selling.doctype.sales_order.sales_order import make_sales_invoice
+			next_doc = make_sales_invoice(so.name)
+		
+		return next_doc
 
 	def create_so(self, so_doc = None):
 		if not so_doc: