From 31665e538a8e58f4152679d9bd98b39fb4b71136 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Thu, 29 Sep 2011 10:41:02 +0530 Subject: [PATCH] Test Case: stock entry submit and cancel Sandbox created for maintaining testdata and testcases --- erpnext/sandbox/__init__.py | 0 erpnext/sandbox/test_stock_entry.py | 110 +++++++++ erpnext/sandbox/testdata/__init__.py | 0 erpnext/sandbox/testdata/masters.py | 282 ++++++++++++++++++++++++ erpnext/sandbox/testdata/stock_entry.py | 32 +++ 5 files changed, 424 insertions(+) create mode 100644 erpnext/sandbox/__init__.py create mode 100644 erpnext/sandbox/test_stock_entry.py create mode 100644 erpnext/sandbox/testdata/__init__.py create mode 100644 erpnext/sandbox/testdata/masters.py create mode 100644 erpnext/sandbox/testdata/stock_entry.py diff --git a/erpnext/sandbox/__init__.py b/erpnext/sandbox/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/sandbox/test_stock_entry.py b/erpnext/sandbox/test_stock_entry.py new file mode 100644 index 0000000000..273c4424a1 --- /dev/null +++ b/erpnext/sandbox/test_stock_entry.py @@ -0,0 +1,110 @@ +import unittest + +import webnotes +import webnotes.profile +webnotes.user = webnotes.profile.Profile() + + +from webnotes.model.doc import Document +from webnotes.model.code import get_obj +from webnotes.utils import cstr, flt +sql = webnotes.conn.sql + +from sandbox.testdata.masters import * +from sandbox.testdata import stock_entry +#---------------------------------------------------------- + +class TestStockEntry(unittest.TestCase): + def setUp(self): + print "=====================================" + webnotes.conn.begin() + + create_master_records() + print 'Master Data Created' + + for each in stock_entry.mr: + each.save(1) + + for t in stock_entry.mr[1:]: + sql("update `tabStock Entry Detail` set parent = '%s' where name = '%s'" % (stock_entry.mr[0].name, t.name)) + print "Stock Entry Created" + + + #=========================================================================== + def test_stock_entry_onsubmit(self): + print "Test Case: Stock Entry submission" + self.submit_stock_entry() + + expected_sle = (('Stock Entry', stock_entry.mr[0].name, 10, 10, 100, 'No'),) + self.check_sle(expected_sle) + + self.check_bin_qty(10) + self.check_serial_no('submit', 10) + + #=========================================================================== + def test_stock_entry_oncancel(self): + print "Test Case: Stock Entry Cancellation" + self.cancel_stock_entry() + + expected_sle = ( + ('Stock Entry', stock_entry.mr[0].name, 10, 10, 100, 'Yes'), + ('Stock Entry', stock_entry.mr[0].name, -10, None, None, 'Yes'), + ) + self.check_sle(expected_sle) + + self.check_bin_qty(0) + self.check_serial_no('cancel', 10) + + + #=========================================================================== + def submit_stock_entry(self): + ste1 = get_obj('Stock Entry', stock_entry.mr[0].name, with_children=1) + ste1.validate() + ste1.on_submit() + + ste1.doc.docstatus = 1 + ste1.doc.save() + + print "Stock Entry Submitted" + + + #=========================================================================== + def cancel_stock_entry(self): + self.submit_stock_entry() + + ste1 = get_obj('Stock Entry', stock_entry.mr[0].name, with_children=1) + ste1.on_cancel() + + ste1.doc.cancel_reason = "testing" + ste1.doc.docstatus = 2 + ste1.doc.save() + + print "Stock Entry Cancelled" + + #=========================================================================== + def check_sle(self, expected): + print "Checking stock ledger entry........." + sle = sql("select voucher_type, voucher_no, actual_qty, bin_aqat, valuation_rate, is_cancelled from `tabStock Ledger Entry` where item_code = 'it' and warehouse = 'wh1'") + self.assertTrue(sle == expected) + + #=========================================================================== + def check_bin_qty(self, expected_qty): + print "Checking Bin qty........." + bin_qty = sql("select actual_qty from tabBin where item_code = 'it' and warehouse = 'wh1'") + self.assertTrue(bin_qty[0][0] == expected_qty) + + #=========================================================================== + def check_serial_no(self, action, cnt): + print "Checking serial nos........" + if action == 'submit': + status, wh, docstatus = 'In Store', 'wh1', 0 + else: + status, wh, docstatus = 'Not in Use', '', 2 + + ser = sql("select count(name) from `tabSerial No` where item_code = 'it' and warehouse = '%s' and status = '%s' and docstatus = %s" % (wh, status, docstatus)) + + self.assertTrue(ser[0][0] == cnt) + + #=========================================================================== + def tearDown(self): + webnotes.conn.rollback() diff --git a/erpnext/sandbox/testdata/__init__.py b/erpnext/sandbox/testdata/__init__.py new file mode 100644 index 0000000000..e69de29bb2 diff --git a/erpnext/sandbox/testdata/masters.py b/erpnext/sandbox/testdata/masters.py new file mode 100644 index 0000000000..7f2d67c4da --- /dev/null +++ b/erpnext/sandbox/testdata/masters.py @@ -0,0 +1,282 @@ +""" + All master data in one place, can be created by 1 function call + +""" + +import webnotes +from webnotes.model.doc import Document + + +master_groups = { + # Company + #---------------------------------- + 'company': Document( + fielddata={ + 'doctype':'Company', + 'abbr': 'co', + 'company_name' : 'comp', + 'name': 'comp' + } + ), + + # Customer Group + #---------------------------------- + 'customer_group': Document( + fielddata={ + 'doctype':'Customer Group', + 'customer_group_name' : 'cg', + 'name': 'cg', + 'is_group': 'No', + 'parent_customer_group':'', + 'lft' : 1, + 'rgt': 2 + } + ), + + # Item Group + #---------------------------------- + 'item_group': Document( + fielddata = { + 'doctype': 'Item Group', + 'item_group_name': 'ig', + 'lft': 1, + 'rgt': 2, + 'parent_item_group' : '', + 'is_group': 'No', + 'name': 'ig' + } + ), + + # Warehouse Type + #----------------------------- + 'warehouse_type' : Document( + fielddata = { + 'doctype' : 'Warehouse Type', + 'name': 'normal', + 'warehouse_type' : 'normal' + } + ), + + # Supplier Type + #----------------------------- + 'supplier_type' : Document( + fielddata = { + 'doctype': 'Supplier Type', + 'supplier_type': 'stype' + } + ) + +} + + +main_masters = { + # Customer + #---------------------------------- + 'customer': Document( + fielddata={ + 'doctype':'Customer', + 'docstatus':0, + 'customer_name' : 'cust', + 'company' : 'comp', + 'customer_group' : '', + 'name': 'cust' + } + ), + + + # Supplier + #---------------------------------- + 'supplier': Document( + fielddata = { + 'doctype': 'Supplier', + 'supplier_name': 'supp', + 'name': 'supp', + 'supplier_type' : 'stype' + } + ), + + # Customer Account + #---------------------------------- + 'customer_acc': Document( + fielddata={ + 'doctype':'Account', + 'docstatus':0, + 'account_name' : 'cust', + 'debit_or_credit': 'Debit', + 'company' : 'comp', + 'lft': 1, + 'rgt': 2, + 'group_or_ledger' : 'Ledger', + 'is_pl_account': 'No', + 'name' : 'cust - co' + } + ), + + # Customer Account + #---------------------------------- + 'supplier_acc': Document( + fielddata={ + 'doctype':'Account', + 'docstatus':0, + 'account_name' : 'supp', + 'debit_or_credit': 'Credit', + 'company' : 'comp', + 'lft': 5, + 'rgt': 6, + 'group_or_ledger' : 'Ledger', + 'is_pl_account': 'No', + 'name' : 'supp - co' + } + ), + + # Bank Account + #---------------------------------- + 'bank_acc': Document( + fielddata={ + 'doctype':'Account', + 'docstatus':0, + 'account_name' : 'icici', + 'parent_account': '', + 'debit_or_credit': 'Debit', + 'company' : 'comp', + 'lft': 3, + 'rgt': 4, + 'group_or_ledger' : 'Ledger', + 'is_pl_account': 'No', + 'name' : 'icici - co' + } + ), + + # Income Account + #---------------------------------- + 'income_acc': Document( + fielddata={ + 'doctype':'Account', + 'docstatus':0, + 'account_name' : 'income', + 'debit_or_credit': 'Credit', + 'company' : 'comp', + 'lft': 7, + 'rgt': 8, + 'group_or_ledger' : 'Ledger', + 'is_pl_account': 'Yes', + 'name' : 'income - co' + } + ), + + # Expense Account + #---------------------------------- + 'expense_acc': Document( + fielddata={ + 'doctype':'Account', + 'docstatus':0, + 'account_name' : 'expense', + 'debit_or_credit': 'Debit', + 'company' : 'comp', + 'lft': 9, + 'rgt': 10, + 'group_or_ledger' : 'Ledger', + 'is_pl_account': 'Yes', + 'name' : 'expense - co' + } + ), + + # Cost Center + #---------------------------------- + 'cost_center': Document( + fielddata={ + 'doctype':'Cost Center', + 'docstatus':0, + 'cost_center_name' : 'cc', + 'lft': 1, + 'rgt': 2, + 'group_or_ledger' : 'Ledger', + 'name' : 'cc' + } + ), + + # Item + #---------------------------------- + # Stock item / non-serialized + + 'item': [ + Document( + fielddata = { + 'doctype': 'Item', + 'docstatus': 0, + 'name': 'it', + 'item_name': 'it', + 'item_code': 'it', + 'item_group': 'ig', + 'is_stock_item': 'Yes', + 'has_serial_no': 'Yes', + 'stock_uom': 'Nos', + 'is_sales_item': 'Yes', + 'is_purchase_item': 'Yes', + 'is_service_item': 'No', + 'is_sub_contracted_item': 'No', + 'is_pro_applicable': 'Yes', + 'is_manufactured_item': 'Yes' + } + ), + Document( + fielddata = { + 'doctype': 'Ref Rate Detail', + 'parentfield': 'ref_rate_details', + 'parenttype': 'Item', + 'parent' : 'it', + 'price_list_name': 'pl', + 'ref_currency': 'INR', + 'ref_rate': 100 + } + ), + Document( + fielddata = { + 'doctype': 'Item Tax', + 'parentfield': 'item_tax', + 'parenttype': 'Item', + 'parent' : 'it', + 'tax_type' : 'Tax1', + 'tax_rate': 10 + } + ) + ], + + # Warehouse + #----------------------------- + 'warehouse': [ + Document( + fielddata = { + 'doctype': 'Warehouse', + 'name' : 'wh1', + 'warehouse_name' : 'wh1', + 'warehouse_type': 'normal', + 'company': 'comp' + } + ), + Document( + fielddata = { + 'doctype': 'Warehouse', + 'name' : 'wh2', + 'warehouse_name' : 'wh2', + 'warehouse_type': 'normal', + 'company': 'comp' + } + ) + ] +} + + + +# Save all master records +#---------------------------------- +def create_master_records(): + for m in master_groups.keys(): + master_groups[m].save(1) + + for m in main_masters.keys(): + if type(main_masters[m]) == list: + for each in main_masters[m]: + each.save(1) + else: + main_masters[m].save(1) diff --git a/erpnext/sandbox/testdata/stock_entry.py b/erpnext/sandbox/testdata/stock_entry.py new file mode 100644 index 0000000000..e2d1d71c02 --- /dev/null +++ b/erpnext/sandbox/testdata/stock_entry.py @@ -0,0 +1,32 @@ +from webnotes.model.doc import Document + +mr = [ + Document( + fielddata = { + 'doctype': 'Stock Entry', + 'posting_date': '2011-09-01', + 'transfer_date': '2011-09-01', + 'posting_time': '12:00', + 'company': 'comp', + 'fiscal_year' : '2011-2012', + 'purpose': 'Material Receipt', + 'name': 'ste' + } + ), + Document( + fielddata ={ + 'doctype': 'Stock Entry Detail', + 'parenttype': 'Stock Entry', + 'parentfield' : 'mtn_details', + 'parent' : 'ste', + 'item_code' : 'it', + 't_warehouse' : 'wh1', + 'qty' : 10, + 'transfer_qty' : 10, + 'incoming_rate': 100, + 'stock_uom': 'Nos', + 'conversion_factor': 1, + 'serial_no': 'srno1, srno2, srno3, srno4, srno5, srno6, srno7, srno8, srno9, srno10' + } + ) +]