more test cases for stock entry
diff --git a/stock/doctype/stock_entry/test_stock_entry.py b/stock/doctype/stock_entry/test_stock_entry.py
index 3cd285d..caf3291 100644
--- a/stock/doctype/stock_entry/test_stock_entry.py
+++ b/stock/doctype/stock_entry/test_stock_entry.py
@@ -160,7 +160,21 @@
self.assertEquals(expected_gl_entries[i][1], gle.debit)
self.assertEquals(expected_gl_entries[i][2], gle.credit)
- def test_sales_invoice_return_of_non_packing_item(self):
+ def _clear_stock(self):
+ webnotes.conn.sql("delete from `tabStock Ledger Entry`")
+ webnotes.conn.sql("""delete from `tabBin`""")
+
+ def _insert_material_receipt(self):
+ self._clear_stock()
+ material_receipt = webnotes.bean(copy=test_records[0])
+ material_receipt.insert()
+ material_receipt.submit()
+
+ def _get_actual_qty(self):
+ return flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item",
+ "warehouse": "_Test Warehouse"}, "actual_qty"))
+
+ def _test_sales_invoice_return(self, item_code, delivered_qty, returned_qty):
from stock.doctype.stock_entry.stock_entry import NotUpdateStockError
from accounts.doctype.sales_invoice.test_sales_invoice \
@@ -174,39 +188,36 @@
se = webnotes.bean(copy=test_records[0])
se.doc.purpose = "Sales Return"
se.doc.sales_invoice_no = si.doc.name
- se.doclist[1].qty = 2.0
+ se.doclist[1].qty = returned_qty
+ se.doclist[1].transfer_qty = returned_qty
self.assertRaises(NotUpdateStockError, se.insert)
- webnotes.conn.sql("delete from `tabStock Ledger Entry`")
- webnotes.conn.sql("""delete from `tabBin`""")
- material_receipt = webnotes.bean(copy=test_records[0])
- material_receipt.insert()
- material_receipt.submit()
+ self._insert_material_receipt()
# check currency available qty in bin
- actual_qty_0 = flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item",
- "warehouse": "_Test Warehouse"}, "actual_qty"))
+ actual_qty_0 = self._get_actual_qty()
# insert a pos invoice with update stock
si = webnotes.bean(copy=sales_invoice_test_records[1])
si.doc.is_pos = si.doc.update_stock = 1
si.doclist[1].warehouse = "_Test Warehouse"
+ si.doclist[1].item_code = item_code
si.insert()
si.submit()
# check available bin qty after invoice submission
- actual_qty_1 = flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item",
- "warehouse": "_Test Warehouse"}, "actual_qty"))
- self.assertEquals(actual_qty_0 - 5, actual_qty_1)
+ actual_qty_1 = self._get_actual_qty()
+
+ self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1)
# check if item is validated
se = webnotes.bean(copy=test_records[0])
se.doc.purpose = "Sales Return"
se.doc.sales_invoice_no = si.doc.name
se.doc.posting_date = "2013-03-10"
- se.doclist[1].item_code = "_Test Item Home Desktop 100"
- se.doclist[1].qty = 2.0
- se.doclist[1].transfer_qty = 2.0
+ se.doclist[1].item_code = "_Test Item Home Desktop 200"
+ se.doclist[1].qty = returned_qty
+ se.doclist[1].transfer_qty = returned_qty
# check if stock entry gets submitted
self.assertRaises(webnotes.DoesNotExistError, se.insert)
@@ -216,68 +227,91 @@
se.doc.purpose = "Sales Return"
se.doc.posting_date = "2013-03-10"
se.doc.sales_invoice_no = si.doc.name
- se.doclist[1].qty = 2.0
- se.doclist[1].transfer_qty = 2.0
+ se.doclist[1].qty = returned_qty
+ se.doclist[1].transfer_qty = returned_qty
+ # in both cases item code remains _Test Item when returning
se.insert()
se.submit()
# check if available qty is increased
- actual_qty_2 = flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item",
- "warehouse": "_Test Warehouse"}, "actual_qty"))
- self.assertEquals(actual_qty_1 + 2, actual_qty_2)
+ actual_qty_2 = self._get_actual_qty()
+
+ self.assertEquals(actual_qty_1 + returned_qty, actual_qty_2)
+
+ def test_sales_invoice_return_of_non_packing_item(self):
+ self._test_sales_invoice_return("_Test Item", 5, 2)
def test_sales_invoice_return_of_packing_item(self):
- webnotes.conn.sql("delete from `tabStock Ledger Entry`")
- webnotes.conn.sql("""delete from `tabBin`""")
- material_receipt = webnotes.bean(copy=test_records[0])
- material_receipt.insert()
- material_receipt.submit()
+ self._test_sales_invoice_return("_Test Sales BOM Item", 25, 20)
- # check currency available qty in bin
- actual_qty_0 = flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item",
- "warehouse": "_Test Warehouse"}, "actual_qty"))
+ def _test_delivery_note_return(self, item_code, delivered_qty, returned_qty):
+ self._insert_material_receipt()
- from accounts.doctype.sales_invoice.test_sales_invoice \
- import test_records as sales_invoice_test_records
-
- # insert a pos invoice with update stock
- si = webnotes.bean(copy=sales_invoice_test_records[1])
- si.doc.is_pos = si.doc.update_stock = 1
- si.doclist[1].item_code = "_Test Sales BOM Item"
- si.doclist[1].warehouse = "_Test Warehouse"
- si.insert()
- si.submit()
+ actual_qty_0 = self._get_actual_qty()
- # check available bin qty after invoice submission
- actual_qty_1 = flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item",
- "warehouse": "_Test Warehouse"}, "actual_qty"))
- self.assertEquals(actual_qty_0 - 25, actual_qty_1)
+ # insert and submit delivery note
+ from stock.doctype.delivery_note.test_delivery_note \
+ import test_records as delivery_note_test_records
+ dn = webnotes.bean(copy=delivery_note_test_records[0])
+ dn.doclist[1].item_code = item_code
+ dn.insert()
+ dn.submit()
+ actual_qty_1 = self._get_actual_qty()
+
+ self.assertEquals(actual_qty_0 - delivered_qty, actual_qty_1)
+
+ # insert and submit stock entry for sales return
se = webnotes.bean(copy=test_records[0])
se.doc.purpose = "Sales Return"
- se.doc.posting_date = "2013-03-10"
- se.doc.sales_invoice_no = si.doc.name
- se.doclist[1].qty = 20.0
- se.doclist[1].transfer_qty = 20.0
- se.insert()
+ se.doc.delivery_note_no = dn.doc.name
+ se.doc.posting_date = "2013-03-01"
+ se.doclist[1].qty = se.doclist[1].transfer_qty = returned_qty
+ se.insert()
se.submit()
- # check if available qty is increased
- actual_qty_2 = flt(webnotes.conn.get_value("Bin", {"item_code": "_Test Item",
- "warehouse": "_Test Warehouse"}, "actual_qty"))
- self.assertEquals(actual_qty_1 + 20, actual_qty_2)
+ actual_qty_2 = self._get_actual_qty()
+ self.assertEquals(actual_qty_1 + returned_qty, actual_qty_2)
+ def test_delivery_note_return_of_non_packing_item(self):
+ self._test_delivery_note_return("_Test Item", 5, 2)
- # def test_delivery_note_return_of_non_packing_item(self):
- # pass
- #
- # def test_delivery_note_return_of_packing_item(self):
- # pass
- #
- # def test_purchase_receipt_return(self):
- # pass
+ def test_delivery_note_return_of_packing_item(self):
+ self._test_delivery_note_return("_Test Sales BOM Item", 25, 20)
+
+ def test_purchase_receipt_return(self):
+ self._clear_stock()
+
+ actual_qty_0 = self._get_actual_qty()
+
+ from stock.doctype.purchase_receipt.test_purchase_receipt \
+ import test_records as purchase_receipt_test_records
+
+ # submit purchase receipt
+ pr = webnotes.bean(copy=purchase_receipt_test_records[0])
+ pr.insert()
+ pr.submit()
+
+ actual_qty_1 = self._get_actual_qty()
+
+ self.assertEquals(actual_qty_0 + 10, actual_qty_1)
+
+ # submit purchase return
+ se = webnotes.bean(copy=test_records[0])
+ se.doc.purpose = "Purchase Return"
+ se.doc.purchase_receipt_no = pr.doc.name
+ se.doc.posting_date = "2013-03-01"
+ se.doclist[1].qty = se.doclist[1].transfer_qty = 5
+ se.doclist[1].s_warehouse = "_Test Warehouse"
+ se.insert()
+ se.submit()
+
+ actual_qty_2 = self._get_actual_qty()
+
+ self.assertEquals(actual_qty_1 - 5, actual_qty_2)
+
test_records = [
[