From c39970978902a554cfbd407e87fbe9f9ea620b19 Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Mon, 6 Apr 2015 19:29:16 +0530 Subject: [PATCH] fixes to test cases --- .../purchase_invoice/test_purchase_invoice.py | 16 ++--- .../sales_invoice/test_sales_invoice.py | 59 ++++++++++--------- erpnext/controllers/stock_controller.py | 8 ++- .../setup/page/setup_wizard/setup_wizard.py | 2 +- .../page/setup_wizard/test_setup_wizard.py | 3 +- .../test_stock_reconciliation.py | 46 ++++++++------- 6 files changed, 73 insertions(+), 61 deletions(-) diff --git a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py index 3afd9bb473..5ae47d7c4f 100644 --- a/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py +++ b/erpnext/accounts/doctype/purchase_invoice/test_purchase_invoice.py @@ -55,7 +55,7 @@ class TestPurchaseInvoice(unittest.TestCase): order by account asc""", pi.name, as_dict=1) self.assertTrue(gl_entries) - expected_values = sorted([ + expected_values = dict((d[0], d) for d in [ ["_Test Payable - _TC", 0, 720], ["Stock Received But Not Billed - _TC", 750.0, 0], ["Expenses Included In Valuation - _TC", 0.0, 250.0], @@ -64,9 +64,9 @@ class TestPurchaseInvoice(unittest.TestCase): ]) for i, gle in enumerate(gl_entries): - self.assertEquals(expected_values[i][0], gle.account) - self.assertEquals(expected_values[i][1], gle.debit) - self.assertEquals(expected_values[i][2], gle.credit) + self.assertEquals(expected_values[gle.account][0], gle.account) + self.assertEquals(expected_values[gle.account][1], gle.debit) + self.assertEquals(expected_values[gle.account][2], gle.credit) set_perpetual_inventory(0) @@ -88,7 +88,7 @@ class TestPurchaseInvoice(unittest.TestCase): order by account asc""", pi.name, as_dict=1) self.assertTrue(gl_entries) - expected_values = sorted([ + expected_values = dict((d[0], d) for d in [ ["_Test Payable - _TC", 0, 720], ["Stock Received But Not Billed - _TC", 500.0, 0], ["_Test Account Shipping Charges - _TC", 100.0, 0], @@ -96,9 +96,9 @@ class TestPurchaseInvoice(unittest.TestCase): ]) for i, gle in enumerate(gl_entries): - self.assertEquals(expected_values[i][0], gle.account) - self.assertEquals(expected_values[i][1], gle.debit) - self.assertEquals(expected_values[i][2], gle.credit) + self.assertEquals(expected_values[gle.account][0], gle.account) + self.assertEquals(expected_values[gle.account][1], gle.debit) + self.assertEquals(expected_values[gle.account][2], gle.credit) set_perpetual_inventory(0) diff --git a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py index ad49d46ea8..3988a9eb70 100644 --- a/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -4,6 +4,7 @@ from __future__ import unicode_literals import frappe import unittest, copy +import time from erpnext.accounts.utils import get_stock_and_account_difference from erpnext.stock.doctype.purchase_receipt.test_purchase_receipt import set_perpetual_inventory from erpnext.projects.doctype.time_log_batch.test_time_log_batch import * @@ -221,7 +222,7 @@ class TestSalesInvoice(unittest.TestCase): self.assertTrue(gl_entries) - expected_values = sorted([ + expected_values = dict((d[0], d) for d in [ [si.debit_to, 1500, 0.0], [test_records[3]["items"][0]["income_account"], 0.0, 1163.45], [test_records[3]["taxes"][0]["account_head"], 0.0, 130.31], @@ -235,10 +236,10 @@ class TestSalesInvoice(unittest.TestCase): ["_Test Account Service Tax - _TC", 16.88, 0.0], ]) - for i, gle in enumerate(gl_entries): - self.assertEquals(expected_values[i][0], gle.account) - self.assertEquals(expected_values[i][1], gle.debit) - self.assertEquals(expected_values[i][2], gle.credit) + for gle in gl_entries: + self.assertEquals(expected_values[gle.account][0], gle.account) + self.assertEquals(expected_values[gle.account][1], gle.debit) + self.assertEquals(expected_values[gle.account][2], gle.credit) # cancel si.cancel() @@ -439,7 +440,7 @@ class TestSalesInvoice(unittest.TestCase): self.assertTrue(gl_entries) - expected_values = sorted([ + expected_values = dict((d[0], d) for d in [ [si.debit_to, 630.0, 0.0], [test_records[1]["items"][0]["income_account"], 0.0, 500.0], [test_records[1]["taxes"][0]["account_head"], 0.0, 80.0], @@ -447,9 +448,9 @@ class TestSalesInvoice(unittest.TestCase): ]) for i, gle in enumerate(gl_entries): - self.assertEquals(expected_values[i][0], gle.account) - self.assertEquals(expected_values[i][1], gle.debit) - self.assertEquals(expected_values[i][2], gle.credit) + self.assertEquals(expected_values[gle.account][0], gle.account) + self.assertEquals(expected_values[gle.account][1], gle.debit) + self.assertEquals(expected_values[gle.account][2], gle.credit) # cancel si.cancel() @@ -502,7 +503,8 @@ class TestSalesInvoice(unittest.TestCase): [si.debit_to, 0.0, 600.0], ["_Test Account Bank Account - _TC", 600.0, 0.0] ]) - for i, gle in enumerate(gl_entries): + + for i, gle in enumerate(sorted(gl_entries, key=lambda gle: gle.account)): self.assertEquals(expected_gl_entries[i][0], gle.account) self.assertEquals(expected_gl_entries[i][1], gle.debit) self.assertEquals(expected_gl_entries[i][2], gle.credit) @@ -574,16 +576,16 @@ class TestSalesInvoice(unittest.TestCase): order by account asc, debit asc""", si.name, as_dict=1) self.assertTrue(gl_entries) - expected_gl_entries = sorted([ + expected_gl_entries = dict((d[0], d) for d in [ [si.debit_to, 630.0, 0.0], [si_doc.get("items")[0]["income_account"], 0.0, 500.0], [si_doc.get("taxes")[0]["account_head"], 0.0, 80.0], [si_doc.get("taxes")[1]["account_head"], 0.0, 50.0], ]) for i, gle in enumerate(gl_entries): - self.assertEquals(expected_gl_entries[i][0], gle.account) - self.assertEquals(expected_gl_entries[i][1], gle.debit) - self.assertEquals(expected_gl_entries[i][2], gle.credit) + self.assertEquals(expected_gl_entries[gle.account][0], gle.account) + self.assertEquals(expected_gl_entries[gle.account][1], gle.debit) + self.assertEquals(expected_gl_entries[gle.account][2], gle.credit) si.cancel() gle = frappe.db.sql("""select * from `tabGL Entry` @@ -605,16 +607,16 @@ class TestSalesInvoice(unittest.TestCase): order by account asc""", si.name, as_dict=1) self.assertTrue(gl_entries) - expected_values = sorted([ + expected_values = dict((d[0], d) for d in [ [si.debit_to, 630.0, 0.0], [test_records[1]["items"][0]["income_account"], 0.0, 500.0], [test_records[1]["taxes"][0]["account_head"], 0.0, 80.0], [test_records[1]["taxes"][1]["account_head"], 0.0, 50.0], ]) for i, gle in enumerate(gl_entries): - self.assertEquals(expected_values[i][0], gle.account) - self.assertEquals(expected_values[i][1], gle.debit) - self.assertEquals(expected_values[i][2], gle.credit) + self.assertEquals(expected_values[gle.account][0], gle.account) + self.assertEquals(expected_values[gle.account][1], gle.debit) + self.assertEquals(expected_values[gle.account][2], gle.credit) set_perpetual_inventory(0) @@ -630,16 +632,16 @@ class TestSalesInvoice(unittest.TestCase): order by account asc""", si.name, as_dict=1) self.assertTrue(gl_entries) - expected_values = sorted([ + expected_values = dict((d[0], d) for d in [ [si.debit_to, 630.0, 0.0], [test_records[1]["items"][0]["income_account"], 0.0, 500.0], [test_records[1]["taxes"][0]["account_head"], 0.0, 80.0], [test_records[1]["taxes"][1]["account_head"], 0.0, 50.0], ]) for i, gle in enumerate(gl_entries): - self.assertEquals(expected_values[i][0], gle.account) - self.assertEquals(expected_values[i][1], gle.debit) - self.assertEquals(expected_values[i][2], gle.credit) + self.assertEquals(expected_values[gle.account][0], gle.account) + self.assertEquals(expected_values[gle.account][1], gle.debit) + self.assertEquals(expected_values[gle.account][2], gle.credit) set_perpetual_inventory(0) @@ -733,7 +735,7 @@ class TestSalesInvoice(unittest.TestCase): "delivery_document_no")) def test_serialize_status(self): - from erpnext.stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos + from erpnext.stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos, SerialNoDuplicateError from erpnext.stock.doctype.stock_entry.test_stock_entry import make_serialized_item se = make_serialized_item() @@ -751,7 +753,10 @@ class TestSalesInvoice(unittest.TestCase): si.insert() self.assertRaises(SerialNoStatusError, si.submit) - + + # hack! because stock ledger entires are already inserted and are not rolled back! + self.assertRaises(SerialNoDuplicateError, si.cancel) + def create_sales_invoice(**args): si = frappe.new_doc("Sales Invoice") args = frappe._dict(args) @@ -759,13 +764,13 @@ def create_sales_invoice(**args): si.posting_date = args.posting_date if args.posting_time: si.posting_time = args.posting_time - + si.company = args.company or "_Test Company" si.customer = args.customer or "_Test Customer" si.debit_to = args.debit_to or "Debtors - _TC" si.update_stock = args.update_stock si.is_pos = args.is_pos - + si.append("items", { "item_code": args.item or args.item_code or "_Test Item", "warehouse": args.warehouse or "_Test Warehouse - _TC", @@ -775,7 +780,7 @@ def create_sales_invoice(**args): "cost_center": "_Test Cost Center - _TC", "serial_no": args.serial_no }) - + if not args.do_not_save: si.insert() if not args.do_not_submit: diff --git a/erpnext/controllers/stock_controller.py b/erpnext/controllers/stock_controller.py index c640b8b61d..4d1eafb645 100644 --- a/erpnext/controllers/stock_controller.py +++ b/erpnext/controllers/stock_controller.py @@ -197,7 +197,7 @@ class StockController(AccountsController): sl_dict.update(args) return sl_dict - def make_sl_entries(self, sl_entries, is_amended=None, allow_negative_stock=False, + def make_sl_entries(self, sl_entries, is_amended=None, allow_negative_stock=False, via_landed_cost_voucher=False): from erpnext.stock.stock_ledger import make_sl_entries make_sl_entries(sl_entries, is_amended, allow_negative_stock, via_landed_cost_voucher) @@ -237,7 +237,11 @@ def update_gl_entries_after(posting_date, posting_time, for_warehouses=None, for if not existing_gle or not compare_existing_and_expected_gle(existing_gle, expected_gle): _delete_gl_entries(voucher_type, voucher_no) - voucher_obj.make_gl_entries(repost_future_gle=False) + try: + voucher_obj.make_gl_entries(repost_future_gle=False) + except: + print voucher_obj.as_json() + raise else: _delete_gl_entries(voucher_type, voucher_no) diff --git a/erpnext/setup/page/setup_wizard/setup_wizard.py b/erpnext/setup/page/setup_wizard/setup_wizard.py index bf33e0deba..187cef0810 100644 --- a/erpnext/setup/page/setup_wizard/setup_wizard.py +++ b/erpnext/setup/page/setup_wizard/setup_wizard.py @@ -197,7 +197,7 @@ def set_defaults(args): "float_precision": 3, 'date_format': frappe.db.get_value("Country", args.get("country"), "date_format"), 'number_format': number_format, - 'enable_scheduler': 1 + 'enable_scheduler': 1 if not frappe.flags.in_test else 0 }) system_settings.save() diff --git a/erpnext/setup/page/setup_wizard/test_setup_wizard.py b/erpnext/setup/page/setup_wizard/test_setup_wizard.py index 63c0dd4a0e..acc2459e3a 100644 --- a/erpnext/setup/page/setup_wizard/test_setup_wizard.py +++ b/erpnext/setup/page/setup_wizard/test_setup_wizard.py @@ -6,9 +6,10 @@ import frappe from erpnext.setup.page.setup_wizard.test_setup_data import args from erpnext.setup.page.setup_wizard.setup_wizard import setup_account +import frappe.utils.scheduler if __name__=="__main__": frappe.connect() frappe.local.form_dict = frappe._dict(args) setup_account() - \ No newline at end of file + frappe.utils.scheduler.disable_scheduler() diff --git a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py index c006a07d6b..0d3288c363 100644 --- a/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py +++ b/erpnext/stock/doctype/stock_reconciliation/test_stock_reconciliation.py @@ -18,10 +18,10 @@ class TestStockReconciliation(unittest.TestCase): def test_reco_for_fifo(self): self._test_reco_sle_gle("FIFO") - + def test_reco_for_moving_average(self): self._test_reco_sle_gle("Moving Average") - + def _test_reco_sle_gle(self, valuation_method): set_perpetual_inventory() # [[qty, valuation_rate, posting_date, @@ -36,7 +36,7 @@ class TestStockReconciliation(unittest.TestCase): for d in input_data: repost_stock_as_per_valuation_method(valuation_method) - + last_sle = get_previous_sle({ "item_code": "_Test Item", "warehouse": "_Test Warehouse - _TC", @@ -45,51 +45,51 @@ class TestStockReconciliation(unittest.TestCase): }) # submit stock reconciliation - stock_reco = create_stock_reconciliation(qty=d[0], rate=d[1], + stock_reco = create_stock_reconciliation(qty=d[0], rate=d[1], posting_date=d[2], posting_time=d[3]) - + # check stock value - sle = frappe.db.sql("""select * from `tabStock Ledger Entry` + sle = frappe.db.sql("""select * from `tabStock Ledger Entry` where voucher_type='Stock Reconciliation' and voucher_no=%s""", stock_reco.name, as_dict=1) - + qty_after_transaction = flt(d[0]) if d[0] != "" else flt(last_sle.get("qty_after_transaction")) - + valuation_rate = flt(d[1]) if d[1] != "" else flt(last_sle.get("valuation_rate")) - + if qty_after_transaction == last_sle.get("qty_after_transaction") \ and valuation_rate == last_sle.get("valuation_rate"): self.assertFalse(sle) else: self.assertEqual(sle[0].qty_after_transaction, qty_after_transaction) self.assertEqual(sle[0].stock_value, qty_after_transaction * valuation_rate) - + # no gl entries - self.assertTrue(frappe.db.get_value("Stock Ledger Entry", + self.assertTrue(frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Stock Reconciliation", "voucher_no": stock_reco.name})) self.assertFalse(get_stock_and_account_difference(["_Test Account Stock In Hand - _TC"])) - + stock_reco.cancel() - - self.assertFalse(frappe.db.get_value("Stock Ledger Entry", + + self.assertFalse(frappe.db.get_value("Stock Ledger Entry", {"voucher_type": "Stock Reconciliation", "voucher_no": stock_reco.name})) - - self.assertFalse(frappe.db.get_value("GL Entry", + + self.assertFalse(frappe.db.get_value("GL Entry", {"voucher_type": "Stock Reconciliation", "voucher_no": stock_reco.name})) - + set_perpetual_inventory(0) def insert_existing_sle(self): from erpnext.stock.doctype.stock_entry.test_stock_entry import make_stock_entry - - make_stock_entry(posting_date="2012-12-15", posting_time="02:00", item_code="_Test Item", + + make_stock_entry(posting_date="2012-12-15", posting_time="02:00", item_code="_Test Item", target="_Test Warehouse - _TC", qty=10, incoming_rate=700) - make_stock_entry(posting_date="2012-12-25", posting_time="03:00", item_code="_Test Item", + make_stock_entry(posting_date="2012-12-25", posting_time="03:00", item_code="_Test Item", source="_Test Warehouse - _TC", qty=15) - make_stock_entry(posting_date="2013-01-05", posting_time="07:00", item_code="_Test Item", + make_stock_entry(posting_date="2013-01-05", posting_time="07:00", item_code="_Test Item", target="_Test Warehouse - _TC", qty=15, incoming_rate=1200) - + def create_stock_reconciliation(**args): args = frappe._dict(args) sr = frappe.new_doc("Stock Reconciliation") @@ -105,7 +105,9 @@ def create_stock_reconciliation(**args): "qty": args.qty, "valuation_rate": args.rate }) + sr.insert() + sr.submit() return sr