From f8924bcf6febd806b4daf214057e371265b67e2c Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 15 Oct 2013 12:19:25 +0530 Subject: [PATCH 1/3] [fix] [minor] update serial no in sle while creating auto serial no --- .../sales_invoice/test_sales_invoice.py | 10 +++--- .../purchase_order/test_purchase_order.py | 4 +-- controllers/buying_controller.py | 2 -- .../delivery_note/test_delivery_note.py | 6 ++-- .../material_request/test_material_request.py | 4 +-- .../purchase_receipt/purchase_receipt.py | 4 +-- stock/doctype/serial_no/serial_no.py | 36 +++++++++++-------- stock/doctype/stock_entry/stock_entry.py | 2 +- stock/doctype/stock_entry/test_stock_entry.py | 7 ++-- .../stock_ledger_entry/stock_ledger_entry.py | 5 +-- 10 files changed, 42 insertions(+), 38 deletions(-) diff --git a/accounts/doctype/sales_invoice/test_sales_invoice.py b/accounts/doctype/sales_invoice/test_sales_invoice.py index dee098a3e4..fbb344ec94 100644 --- a/accounts/doctype/sales_invoice/test_sales_invoice.py +++ b/accounts/doctype/sales_invoice/test_sales_invoice.py @@ -641,8 +641,8 @@ class TestSalesInvoice(unittest.TestCase): return new_si - # if yearly, test 3 repetitions, else test 13 repetitions - count = 3 if no_of_months == 12 else 13 + # if yearly, test 3 repetitions, else test 5 repetitions + count = 1 if (no_of_months == 12) else 5 for i in xrange(count): base_si = _test(i) @@ -653,7 +653,7 @@ class TestSalesInvoice(unittest.TestCase): def test_serialized(self): from stock.doctype.stock_entry.test_stock_entry import make_serialized_item - from stock.doctype.stock_ledger_entry.stock_ledger_entry import get_serial_nos + from stock.doctype.serial_no.serial_no import get_serial_nos se = make_serialized_item() serial_nos = get_serial_nos(se.doclist[1].serial_no) @@ -674,7 +674,7 @@ class TestSalesInvoice(unittest.TestCase): return si def test_serialized_cancel(self): - from stock.doctype.stock_ledger_entry.stock_ledger_entry import get_serial_nos + from stock.doctype.serial_no.serial_no import get_serial_nos si = self.test_serialized() si.cancel() @@ -686,7 +686,7 @@ class TestSalesInvoice(unittest.TestCase): "delivery_document_no")) def test_serialize_status(self): - from stock.doctype.stock_ledger_entry.stock_ledger_entry import SerialNoStatusError, get_serial_nos + from stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos from stock.doctype.stock_entry.test_stock_entry import make_serialized_item se = make_serialized_item() diff --git a/buying/doctype/purchase_order/test_purchase_order.py b/buying/doctype/purchase_order/test_purchase_order.py index cef5e4a207..bd5f410f6e 100644 --- a/buying/doctype/purchase_order/test_purchase_order.py +++ b/buying/doctype/purchase_order/test_purchase_order.py @@ -98,11 +98,11 @@ class TestPurchaseOrder(unittest.TestCase): self.assertEquals(len(po.doclist.get({"parentfield": "po_raw_material_details"})), 2) def test_warehouse_company_validation(self): - from controllers.buying_controller import WrongWarehouseCompany + from stock.utils import InvalidWarehouseCompany po = webnotes.bean(copy=test_records[0]) po.doc.company = "_Test Company 1" po.doc.conversion_rate = 0.0167 - self.assertRaises(WrongWarehouseCompany, po.insert) + self.assertRaises(InvalidWarehouseCompany, po.insert) def test_uom_integer_validation(self): from utilities.transaction_base import UOMMustBeIntegerError diff --git a/controllers/buying_controller.py b/controllers/buying_controller.py index 25d76aa66d..fd3428e6ad 100644 --- a/controllers/buying_controller.py +++ b/controllers/buying_controller.py @@ -11,8 +11,6 @@ from setup.utils import get_company_currency from controllers.stock_controller import StockController -class WrongWarehouseCompany(Exception): pass - class BuyingController(StockController): def onload_post_render(self): # contact, address, item details diff --git a/stock/doctype/delivery_note/test_delivery_note.py b/stock/doctype/delivery_note/test_delivery_note.py index 7c525504ae..ca95a50602 100644 --- a/stock/doctype/delivery_note/test_delivery_note.py +++ b/stock/doctype/delivery_note/test_delivery_note.py @@ -160,7 +160,7 @@ class TestDeliveryNote(unittest.TestCase): def test_serialized(self): from stock.doctype.stock_entry.test_stock_entry import make_serialized_item - from stock.doctype.stock_ledger_entry.stock_ledger_entry import get_serial_nos + from stock.doctype.serial_no.serial_no import get_serial_nos se = make_serialized_item() serial_nos = get_serial_nos(se.doclist[1].serial_no) @@ -180,7 +180,7 @@ class TestDeliveryNote(unittest.TestCase): return dn def test_serialized_cancel(self): - from stock.doctype.stock_ledger_entry.stock_ledger_entry import get_serial_nos + from stock.doctype.serial_no.serial_no import get_serial_nos dn = self.test_serialized() dn.cancel() @@ -192,7 +192,7 @@ class TestDeliveryNote(unittest.TestCase): "delivery_document_no")) def test_serialize_status(self): - from stock.doctype.stock_ledger_entry.stock_ledger_entry import SerialNoStatusError, get_serial_nos + from stock.doctype.serial_no.serial_no import SerialNoStatusError, get_serial_nos from stock.doctype.stock_entry.test_stock_entry import make_serialized_item se = make_serialized_item() diff --git a/stock/doctype/material_request/test_material_request.py b/stock/doctype/material_request/test_material_request.py index 8ebad15810..13fdd02c3c 100644 --- a/stock/doctype/material_request/test_material_request.py +++ b/stock/doctype/material_request/test_material_request.py @@ -315,10 +315,10 @@ class TestMaterialRequest(unittest.TestCase): self.assertRaises(webnotes.MappingMismatchError, se.insert) def test_warehouse_company_validation(self): - from controllers.buying_controller import WrongWarehouseCompany + from stock.utils import InvalidWarehouseCompany mr = webnotes.bean(copy=test_records[0]) mr.doc.company = "_Test Company 1" - self.assertRaises(WrongWarehouseCompany, mr.insert) + self.assertRaises(InvalidWarehouseCompany, mr.insert) test_dependencies = ["Currency Exchange"] test_records = [ diff --git a/stock/doctype/purchase_receipt/purchase_receipt.py b/stock/doctype/purchase_receipt/purchase_receipt.py index 6169b1d916..6d4320fe18 100644 --- a/stock/doctype/purchase_receipt/purchase_receipt.py +++ b/stock/doctype/purchase_receipt/purchase_receipt.py @@ -7,7 +7,7 @@ import webnotes from webnotes.utils import cstr, flt, cint from webnotes.model.bean import getlist from webnotes.model.code import get_obj -from webnotes import msgprint +from webnotes import msgprint, _ import webnotes.defaults from stock.utils import update_bin @@ -247,7 +247,7 @@ class DocType(BuyingController): self.update_stock() from stock.doctype.serial_no.serial_no import update_serial_nos_after_submit - update_serial_nos_after_submit(self, "Purchase Receipt", "purchase_receipt_details") + update_serial_nos_after_submit(self, "purchase_receipt_details") purchase_controller.update_last_purchase_rate(self, 1) diff --git a/stock/doctype/serial_no/serial_no.py b/stock/doctype/serial_no/serial_no.py index d806287ecb..f665abc46f 100644 --- a/stock/doctype/serial_no/serial_no.py +++ b/stock/doctype/serial_no/serial_no.py @@ -37,10 +37,7 @@ class DocType(StockController): self.validate_warehouse() self.validate_item() - if self.via_stock_ledger: - self.set_status() - self.set_purchase_details() - self.set_sales_details() + self.on_stock_ledger_entry() def validate_amc_status(self): """ @@ -181,6 +178,12 @@ class DocType(StockController): webnotes.conn.sql("""update `tab%s` set serial_no = %s where name=%s""" % (dt[0], '%s', '%s'), ('\n'.join(serial_nos), item[0])) + + def on_stock_ledger_entry(self): + if self.via_stock_ledger and not self.doc.fields.get("__islocal"): + self.set_status() + self.set_purchase_details() + self.set_sales_details() def process_serial_no(sle): item_det = get_item_details(sle.item_code) @@ -233,6 +236,14 @@ def validate_serial_no(sle, item_det): + sle.item_code), SerialNoRequiredError) def update_serial_nos(sle, item_det): + if not sle.serial_no and sle.actual_qty > 0 and item_det.serial_no_series: + from webnotes.model.doc import make_autoname + serial_nos = [] + for i in xrange(cint(sle.actual_qty)): + serial_nos.append(make_autoname(item_det.serial_no_series)) + + webnotes.conn.set(sle, "serial_no", "\n".join(serial_nos)) + if sle.serial_no: serial_nos = get_serial_nos(sle.serial_no) for serial_no in serial_nos: @@ -243,12 +254,6 @@ def update_serial_nos(sle, item_det): sr.save() elif sle.actual_qty > 0: make_serial_no(serial_no, sle) - elif sle.actual_qty > 0 and item_det.serial_no_series: - from webnotes.model.doc import make_autoname - serial_nos = [] - for i in xrange(cint(sle.actual_qty)): - serial_nos.append(make_serial_no(make_autoname(item_det.serial_no_series), sle)) - sle.serial_no = "\n".join(serial_nos) def get_item_details(item_code): return webnotes.conn.sql("""select name, has_batch_no, docstatus, @@ -270,13 +275,16 @@ def make_serial_no(serial_no, sle): webnotes.msgprint(_("Serial No created") + ": " + sr.doc.name) return sr.doc.name -def update_serial_nos_after_submit(controller, parenttype, parentfield): - if not hasattr(webnotes, "new_stock_ledger_entries"): - return +def update_serial_nos_after_submit(controller, parentfield): + stock_ledger_entries = webnotes.conn.sql("""select voucher_detail_no, serial_no + from `tabStock Ledger Entry` where voucher_type=%s and voucher_no=%s""", + (controller.doc.doctype, controller.doc.name), as_dict=True) + if not stock_ledger_entries: return + for d in controller.doclist.get({"parentfield": parentfield}): serial_no = None - for sle in webnotes.new_stock_ledger_entries: + for sle in stock_ledger_entries: if sle.voucher_detail_no==d.name: serial_no = sle.serial_no break diff --git a/stock/doctype/stock_entry/stock_entry.py b/stock/doctype/stock_entry/stock_entry.py index 7d8130cc85..c620bd9c8e 100644 --- a/stock/doctype/stock_entry/stock_entry.py +++ b/stock/doctype/stock_entry/stock_entry.py @@ -55,7 +55,7 @@ class DocType(StockController): self.update_stock_ledger() from stock.doctype.serial_no.serial_no import update_serial_nos_after_submit - update_serial_nos_after_submit(self, "Stock Entry", "mtn_details") + update_serial_nos_after_submit(self, "mtn_details") self.update_production_order() self.make_gl_entries() diff --git a/stock/doctype/stock_entry/test_stock_entry.py b/stock/doctype/stock_entry/test_stock_entry.py index b41a6269ad..2882072852 100644 --- a/stock/doctype/stock_entry/test_stock_entry.py +++ b/stock/doctype/stock_entry/test_stock_entry.py @@ -44,9 +44,10 @@ class TestStockEntry(unittest.TestCase): def test_warehouse_company_validation(self): self._clear_stock_account_balance() - webnotes.session.user = "test2@example.com" webnotes.bean("Profile", "test2@example.com").get_controller()\ .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") + + webnotes.session.user = "test2@example.com" from stock.utils import InvalidWarehouseCompany st1 = webnotes.bean(copy=test_records[0]) @@ -65,14 +66,14 @@ class TestStockEntry(unittest.TestCase): webnotes.bean("Profile", "test2@example.com").get_controller()\ .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") - + webnotes.session.user = "test@example.com" + st1 = webnotes.bean(copy=test_records[0]) st1.doc.company = "_Test Company 1" st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1" st1.insert() self.assertRaises(UserNotAllowedForWarehouse, st1.submit) - webnotes.session.user = "test2@example.com" st1 = webnotes.bean(copy=test_records[0]) st1.doc.company = "_Test Company 1" st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1" diff --git a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py index bfb0f0aa92..1738efcf3f 100644 --- a/stock/doctype/stock_ledger_entry/stock_ledger_entry.py +++ b/stock/doctype/stock_ledger_entry/stock_ledger_entry.py @@ -14,10 +14,7 @@ class DocType(DocListController): def validate(self): from stock.utils import validate_warehouse_user, validate_warehouse_company - if not hasattr(webnotes, "new_stock_ledger_entries"): - webnotes.new_stock_ledger_entries = [] - - webnotes.new_stock_ledger_entries.append(self.doc) + self.validate_mandatory() self.validate_item() validate_warehouse_user(self.doc.warehouse) From 5101098020fe18d31a965e4a249d682bda2224dc Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Tue, 15 Oct 2013 13:00:53 +0530 Subject: [PATCH 2/3] [fix] [minor] fixes in testcases --- stock/doctype/stock_entry/test_stock_entry.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/stock/doctype/stock_entry/test_stock_entry.py b/stock/doctype/stock_entry/test_stock_entry.py index 2882072852..3a18c69693 100644 --- a/stock/doctype/stock_entry/test_stock_entry.py +++ b/stock/doctype/stock_entry/test_stock_entry.py @@ -43,6 +43,7 @@ class TestStockEntry(unittest.TestCase): webnotes.conn.set_default("company", self.old_default_company) def test_warehouse_company_validation(self): + set_perpetual_inventory(0) self._clear_stock_account_balance() webnotes.bean("Profile", "test2@example.com").get_controller()\ .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") @@ -58,22 +59,23 @@ class TestStockEntry(unittest.TestCase): webnotes.session.user = "Administrator" def test_warehouse_user(self): + set_perpetual_inventory(0) from stock.utils import UserNotAllowedForWarehouse - webnotes.session.user = "test@example.com" webnotes.bean("Profile", "test@example.com").get_controller()\ .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") webnotes.bean("Profile", "test2@example.com").get_controller()\ .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") - webnotes.session.user = "test@example.com" + webnotes.session.user = "test@example.com" st1 = webnotes.bean(copy=test_records[0]) st1.doc.company = "_Test Company 1" st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1" st1.insert() self.assertRaises(UserNotAllowedForWarehouse, st1.submit) + webnotes.session.user = "test2@example.com" st1 = webnotes.bean(copy=test_records[0]) st1.doc.company = "_Test Company 1" st1.doclist[1].t_warehouse="_Test Warehouse 2 - _TC1" From a295bf54214ced9cad2490a562b48409a9a83ebe Mon Sep 17 00:00:00 2001 From: Anand Doshi Date: Tue, 15 Oct 2013 19:52:29 +0530 Subject: [PATCH 3/3] [minor] don't rollback when running all tests, fixed test cases --- .../test_period_closing_voucher.py | 3 ++ .../purchase_invoice/purchase_invoice.py | 2 +- .../test_leave_application.py | 9 ++-- .../leave_block_list/test_leave_block_list.py | 3 ++ manufacturing/doctype/bom/bom.py | 1 + manufacturing/doctype/bom/test_bom.py | 47 +++++++++++++++---- .../time_log_batch/test_time_log_batch.py | 26 ++++++++-- selling/doctype/customer/test_customer.py | 5 ++ selling/doctype/quotation/test_quotation.py | 10 ++-- .../doctype/sales_order/test_sales_order.py | 9 ++-- .../delivery_note/test_delivery_note.py | 28 ++++++----- stock/doctype/item/test_item.py | 46 +++++++++++++++++- support/doctype/newsletter/newsletter.py | 7 ++- support/doctype/newsletter/test_newsletter.py | 9 ++-- utilities/demo/make_demo.py | 2 +- 15 files changed, 160 insertions(+), 47 deletions(-) diff --git a/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py b/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py index c21d63f6ec..b9ac8bd740 100644 --- a/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py +++ b/accounts/doctype/period_closing_voucher/test_period_closing_voucher.py @@ -8,6 +8,9 @@ import webnotes class TestPeriodClosingVoucher(unittest.TestCase): def test_closing_entry(self): + # clear GL Entries + webnotes.conn.sql("""delete from `tabGL Entry`""") + from accounts.doctype.journal_voucher.test_journal_voucher import test_records as jv_records jv = webnotes.bean(copy=jv_records[2]) jv.insert() diff --git a/accounts/doctype/purchase_invoice/purchase_invoice.py b/accounts/doctype/purchase_invoice/purchase_invoice.py index a562c67a38..c65b9acb2b 100644 --- a/accounts/doctype/purchase_invoice/purchase_invoice.py +++ b/accounts/doctype/purchase_invoice/purchase_invoice.py @@ -434,7 +434,7 @@ class DocType(BuyingController): def update_raw_material_cost(self): if self.sub_contracted_items: for d in self.doclist.get({"parentfield": "entries"}): - rm_cost = webnotes.conn.sql(""" select raw_material_cost / quantity + rm_cost = webnotes.conn.sql("""select raw_material_cost / quantity from `tabBOM` where item = %s and is_default = 1 and docstatus = 1 and is_active = 1 """, (d.item_code,)) rm_cost = rm_cost and flt(rm_cost[0][0]) or 0 diff --git a/hr/doctype/leave_application/test_leave_application.py b/hr/doctype/leave_application/test_leave_application.py index c89f7c4537..7a900e3bfe 100644 --- a/hr/doctype/leave_application/test_leave_application.py +++ b/hr/doctype/leave_application/test_leave_application.py @@ -7,6 +7,9 @@ import unittest from hr.doctype.leave_application.leave_application import LeaveDayBlockedError, OverlapError class TestLeaveApplication(unittest.TestCase): + def tearDown(self): + webnotes.session.user = "Administrator" + def _clear_roles(self): webnotes.conn.sql("""delete from `tabUserRole` where parent in ("test@example.com", "test1@example.com", "test2@example.com")""") @@ -15,6 +18,7 @@ class TestLeaveApplication(unittest.TestCase): webnotes.conn.sql("""delete from `tabLeave Application`""") def _add_employee_leave_approver(self, employee, leave_approver): + temp_session_user = webnotes.session.user webnotes.session.user = "Administrator" employee = webnotes.bean("Employee", employee) employee.doclist.append({ @@ -23,6 +27,7 @@ class TestLeaveApplication(unittest.TestCase): "leave_approver": leave_approver }) employee.save() + webnotes.session.user = temp_session_user def get_application(self, doclist): application = webnotes.bean(copy=doclist) @@ -31,7 +36,6 @@ class TestLeaveApplication(unittest.TestCase): return application def test_block_list(self): - webnotes.session.user = "Administrator" self._clear_roles() from webnotes.profile import add_role @@ -54,7 +58,6 @@ class TestLeaveApplication(unittest.TestCase): self.assertTrue(application.insert()) def test_overlap(self): - webnotes.session.user = "Administrator" self._clear_roles() self._clear_applications() @@ -72,7 +75,6 @@ class TestLeaveApplication(unittest.TestCase): self.assertRaises(OverlapError, application.insert) def test_global_block_list(self): - webnotes.session.user = "Administrator" self._clear_roles() from webnotes.profile import add_role @@ -98,7 +100,6 @@ class TestLeaveApplication(unittest.TestCase): "applies_to_all_departments", 0) def test_leave_approval(self): - webnotes.session.user = "Administrator" self._clear_roles() from webnotes.profile import add_role diff --git a/hr/doctype/leave_block_list/test_leave_block_list.py b/hr/doctype/leave_block_list/test_leave_block_list.py index e266cd84d6..34814d9380 100644 --- a/hr/doctype/leave_block_list/test_leave_block_list.py +++ b/hr/doctype/leave_block_list/test_leave_block_list.py @@ -7,6 +7,9 @@ import unittest from hr.doctype.leave_block_list.leave_block_list import get_applicable_block_dates class TestLeaveBlockList(unittest.TestCase): + def tearDown(self): + webnotes.session.user = "Administrator" + def test_get_applicable_block_dates(self): webnotes.session.user = "test@example.com" webnotes.conn.set_value("Department", "_Test Department", "leave_block_list", diff --git a/manufacturing/doctype/bom/bom.py b/manufacturing/doctype/bom/bom.py index 5954475376..97a2f96c6e 100644 --- a/manufacturing/doctype/bom/bom.py +++ b/manufacturing/doctype/bom/bom.py @@ -332,6 +332,7 @@ class DocType: d.amount = flt(d.rate) * flt(d.qty) d.qty_consumed_per_unit = flt(d.qty) / flt(self.doc.quantity) total_rm_cost += d.amount + self.doc.raw_material_cost = total_rm_cost def update_exploded_items(self): diff --git a/manufacturing/doctype/bom/test_bom.py b/manufacturing/doctype/bom/test_bom.py index da98faf8f4..2f4424eb97 100644 --- a/manufacturing/doctype/bom/test_bom.py +++ b/manufacturing/doctype/bom/test_bom.py @@ -10,7 +10,7 @@ test_records = [ [ { "doctype": "BOM", - "item": "_Test Item Home Desktop 100", + "item": "_Test Item Home Desktop Manufactured", "quantity": 1.0, "is_active": 1, "is_default": 1, @@ -58,7 +58,36 @@ test_records = [ "doctype": "BOM Item", "item_code": "_Test Item Home Desktop 100", "parentfield": "bom_materials", - "bom_no": "BOM/_Test Item Home Desktop 100/001", + "qty": 2.0, + "rate": 1000.0, + "amount": 2000.0, + "stock_uom": "_Test UOM" + } + ], + + [ + { + "doctype": "BOM", + "item": "_Test FG Item 2", + "quantity": 1.0, + "is_active": 1, + "is_default": 1, + "docstatus": 1 + }, + { + "doctype": "BOM Item", + "item_code": "_Test Item", + "parentfield": "bom_materials", + "qty": 1.0, + "rate": 5000.0, + "amount": 5000.0, + "stock_uom": "_Test UOM" + }, + { + "doctype": "BOM Item", + "item_code": "_Test Item Home Desktop Manufactured", + "bom_no": "BOM/_Test Item Home Desktop Manufactured/001", + "parentfield": "bom_materials", "qty": 2.0, "rate": 1000.0, "amount": 2000.0, @@ -70,21 +99,21 @@ test_records = [ class TestBOM(unittest.TestCase): def test_get_items(self): from manufacturing.doctype.bom.bom import get_bom_items_as_dict - items_dict = get_bom_items_as_dict(bom="BOM/_Test FG Item/001", qty=1, fetch_exploded=0) - self.assertTrue(test_records[1][1]["item_code"] in items_dict) - self.assertTrue(test_records[1][2]["item_code"] in items_dict) + items_dict = get_bom_items_as_dict(bom="BOM/_Test FG Item 2/001", qty=1, fetch_exploded=0) + self.assertTrue(test_records[2][1]["item_code"] in items_dict) + self.assertTrue(test_records[2][2]["item_code"] in items_dict) self.assertEquals(len(items_dict.values()), 2) def test_get_items_exploded(self): from manufacturing.doctype.bom.bom import get_bom_items_as_dict - items_dict = get_bom_items_as_dict(bom="BOM/_Test FG Item/001", qty=1, fetch_exploded=1) - self.assertTrue(test_records[1][1]["item_code"] in items_dict) - self.assertFalse(test_records[1][2]["item_code"] in items_dict) + items_dict = get_bom_items_as_dict(bom="BOM/_Test FG Item 2/001", qty=1, fetch_exploded=1) + self.assertTrue(test_records[2][1]["item_code"] in items_dict) + self.assertFalse(test_records[2][2]["item_code"] in items_dict) self.assertTrue(test_records[0][1]["item_code"] in items_dict) self.assertTrue(test_records[0][2]["item_code"] in items_dict) self.assertEquals(len(items_dict.values()), 3) def test_get_items_list(self): from manufacturing.doctype.bom.bom import get_bom_items - self.assertEquals(len(get_bom_items(bom="BOM/_Test FG Item/001", qty=1, fetch_exploded=1)), 3) + self.assertEquals(len(get_bom_items(bom="BOM/_Test FG Item 2/001", qty=1, fetch_exploded=1)), 3) diff --git a/projects/doctype/time_log_batch/test_time_log_batch.py b/projects/doctype/time_log_batch/test_time_log_batch.py index 34a0cc06c9..4976dfe46d 100644 --- a/projects/doctype/time_log_batch/test_time_log_batch.py +++ b/projects/doctype/time_log_batch/test_time_log_batch.py @@ -5,15 +5,31 @@ import webnotes, unittest class TimeLogBatchTest(unittest.TestCase): def test_time_log_status(self): - self.assertEquals(webnotes.conn.get_value("Time Log", "_T-Time Log-00001", "status"), "Submitted") - tlb = webnotes.bean("Time Log Batch", "_T-Time Log Batch-00001") + from projects.doctype.time_log.test_time_log import test_records as time_log_records + time_log = webnotes.bean(copy=time_log_records[0]) + time_log.doc.fields.update({ + "from_time": "2013-01-02 10:00:00", + "to_time": "2013-01-02 11:00:00", + "docstatus": 0 + }) + time_log.insert() + time_log.submit() + + self.assertEquals(webnotes.conn.get_value("Time Log", time_log.doc.name, "status"), "Submitted") + tlb = webnotes.bean(copy=test_records[0]) + tlb.doclist[1].time_log = time_log.doc.name + tlb.insert() tlb.submit() - self.assertEquals(webnotes.conn.get_value("Time Log", "_T-Time Log-00001", "status"), "Batched for Billing") + + self.assertEquals(webnotes.conn.get_value("Time Log", time_log.doc.name, "status"), "Batched for Billing") tlb.cancel() - self.assertEquals(webnotes.conn.get_value("Time Log", "_T-Time Log-00001", "status"), "Submitted") + self.assertEquals(webnotes.conn.get_value("Time Log", time_log.doc.name, "status"), "Submitted") test_records = [[ - {"rate": "500"}, + { + "doctype": "Time Log Batch", + "rate": "500" + }, { "doctype": "Time Log Batch Detail", "parenttype": "Time Log Batch", diff --git a/selling/doctype/customer/test_customer.py b/selling/doctype/customer/test_customer.py index 7c90f6a1a8..adc5a549ef 100644 --- a/selling/doctype/customer/test_customer.py +++ b/selling/doctype/customer/test_customer.py @@ -17,6 +17,8 @@ class TestCustomer(unittest.TestCase): (("_Test Customer 1 Renamed",),)) self.assertEqual(webnotes.conn.exists("Customer", "_Test Customer 1"), ()) + webnotes.rename_doc("Customer", "_Test Customer 1 Renamed", "_Test Customer 1") + def test_merge(self): from webnotes.test_runner import make_test_records make_test_records("Sales Invoice") @@ -57,6 +59,9 @@ class TestCustomer(unittest.TestCase): # check that old name doesn't exist self.assertEqual(webnotes.conn.exists("Customer", "_Test Customer"), ()) self.assertEqual(webnotes.conn.exists("Account", "_Test Customer - _TC"), ()) + + # create back _Test Customer + webnotes.bean(copy=test_records[0]).insert() test_ignore = ["Price List"] diff --git a/selling/doctype/quotation/test_quotation.py b/selling/doctype/quotation/test_quotation.py index cf3881d0c3..366035ef1a 100644 --- a/selling/doctype/quotation/test_quotation.py +++ b/selling/doctype/quotation/test_quotation.py @@ -11,17 +11,19 @@ class TestQuotation(unittest.TestCase): def test_make_sales_order(self): from selling.doctype.quotation.quotation import make_sales_order - self.assertRaises(webnotes.ValidationError, make_sales_order, "_T-Quotation-00001") + quotation = webnotes.bean(copy=test_records[0]) + quotation.insert() + + self.assertRaises(webnotes.ValidationError, make_sales_order, quotation.doc.name) - quotation = webnotes.bean("Quotation","_T-Quotation-00001") quotation.submit() - sales_order = make_sales_order("_T-Quotation-00001") + sales_order = make_sales_order(quotation.doc.name) self.assertEquals(sales_order[0]["doctype"], "Sales Order") self.assertEquals(len(sales_order), 2) self.assertEquals(sales_order[1]["doctype"], "Sales Order Item") - self.assertEquals(sales_order[1]["prevdoc_docname"], "_T-Quotation-00001") + self.assertEquals(sales_order[1]["prevdoc_docname"], quotation.doc.name) self.assertEquals(sales_order[0]["customer"], "_Test Customer") sales_order[0]["delivery_date"] = "2014-01-01" diff --git a/selling/doctype/sales_order/test_sales_order.py b/selling/doctype/sales_order/test_sales_order.py index 8bd759a77d..0ee58a7fd2 100644 --- a/selling/doctype/sales_order/test_sales_order.py +++ b/selling/doctype/sales_order/test_sales_order.py @@ -72,6 +72,10 @@ class TestSalesOrder(unittest.TestCase): def create_dn_against_so(self, so, delivered_qty=0): from stock.doctype.delivery_note.test_delivery_note import test_records as dn_test_records + from stock.doctype.delivery_note.test_delivery_note import _insert_purchase_receipt + + _insert_purchase_receipt(so.doclist[1].item_code) + dn = webnotes.bean(webnotes.copy_doclist(dn_test_records[0])) dn.doclist[1].item_code = so.doclist[1].item_code dn.doclist[1].against_sales_order = so.doc.name @@ -272,14 +276,13 @@ class TestSalesOrder(unittest.TestCase): so.doclist[1].reserved_warehouse, 20.0) def test_warehouse_user(self): - webnotes.session.user = "test@example.com" - webnotes.bean("Profile", "test@example.com").get_controller()\ .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") webnotes.bean("Profile", "test2@example.com").get_controller()\ .add_roles("Sales User", "Sales Manager", "Material User", "Material Manager") - + + webnotes.session.user = "test@example.com" from stock.utils import UserNotAllowedForWarehouse so = webnotes.bean(copy = test_records[0]) diff --git a/stock/doctype/delivery_note/test_delivery_note.py b/stock/doctype/delivery_note/test_delivery_note.py index ca95a50602..2c4308bb42 100644 --- a/stock/doctype/delivery_note/test_delivery_note.py +++ b/stock/doctype/delivery_note/test_delivery_note.py @@ -9,20 +9,22 @@ import webnotes.defaults from webnotes.utils import cint from stock.doctype.purchase_receipt.test_purchase_receipt import get_gl_entries, set_perpetual_inventory, test_records as pr_test_records +def _insert_purchase_receipt(item_code=None): + if not item_code: + item_code = pr_test_records[0][1]["item_code"] + + pr = webnotes.bean(copy=pr_test_records[0]) + pr.doclist[1].item_code = item_code + pr.insert() + pr.submit() + class TestDeliveryNote(unittest.TestCase): - def _insert_purchase_receipt(self, item_code=None): - pr = webnotes.bean(copy=pr_test_records[0]) - if item_code: - pr.doclist[1].item_code = item_code - pr.insert() - pr.submit() - def test_over_billing_against_dn(self): self.clear_stock_account_balance() - self._insert_purchase_receipt() + _insert_purchase_receipt() from stock.doctype.delivery_note.delivery_note import make_sales_invoice - self._insert_purchase_receipt() + _insert_purchase_receipt() dn = webnotes.bean(copy=test_records[0]).insert() self.assertRaises(webnotes.ValidationError, make_sales_invoice, @@ -44,7 +46,7 @@ class TestDeliveryNote(unittest.TestCase): set_perpetual_inventory(0) self.assertEqual(cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")), 0) - self._insert_purchase_receipt() + _insert_purchase_receipt() dn = webnotes.bean(copy=test_records[0]) dn.insert() @@ -69,7 +71,7 @@ class TestDeliveryNote(unittest.TestCase): self.assertEqual(cint(webnotes.defaults.get_global_default("auto_accounting_for_stock")), 1) webnotes.conn.set_value("Item", "_Test Item", "valuation_method", "FIFO") - self._insert_purchase_receipt() + _insert_purchase_receipt() dn = webnotes.bean(copy=test_records[0]) dn.doclist[1].expense_account = "Cost of Goods Sold - _TC" @@ -123,8 +125,8 @@ class TestDeliveryNote(unittest.TestCase): self.clear_stock_account_balance() set_perpetual_inventory() - self._insert_purchase_receipt() - self._insert_purchase_receipt("_Test Item Home Desktop 100") + _insert_purchase_receipt() + _insert_purchase_receipt("_Test Item Home Desktop 100") dn = webnotes.bean(copy=test_records[0]) dn.doclist[1].item_code = "_Test Sales BOM Item" diff --git a/stock/doctype/item/test_item.py b/stock/doctype/item/test_item.py index ad88c8cc8f..c8930abc97 100644 --- a/stock/doctype/item/test_item.py +++ b/stock/doctype/item/test_item.py @@ -81,9 +81,9 @@ test_records = [ "is_sales_item": "Yes", "is_service_item": "No", "inspection_required": "No", - "is_pro_applicable": "Yes", + "is_pro_applicable": "No", "is_sub_contracted_item": "No", - "is_manufactured_item": "Yes", + "is_manufactured_item": "No", "stock_uom": "_Test UOM" }, { @@ -109,6 +109,7 @@ test_records = [ "inspection_required": "No", "is_pro_applicable": "No", "is_sub_contracted_item": "No", + "is_manufactured_item": "No", "stock_uom": "_Test UOM" }], [{ @@ -207,4 +208,45 @@ test_records = [ "is_sub_contracted_item": "No", "stock_uom": "_Test UOM" }], + [{ + "doctype": "Item", + "item_code": "_Test Item Home Desktop Manufactured", + "item_name": "_Test Item Home Desktop Manufactured", + "description": "_Test Item Home Desktop Manufactured", + "item_group": "_Test Item Group Desktops", + "default_warehouse": "_Test Warehouse - _TC", + "default_income_account": "Sales - _TC", + "is_stock_item": "Yes", + "is_asset_item": "No", + "has_batch_no": "No", + "has_serial_no": "No", + "is_purchase_item": "Yes", + "is_sales_item": "Yes", + "is_service_item": "No", + "inspection_required": "No", + "is_pro_applicable": "Yes", + "is_sub_contracted_item": "No", + "is_manufactured_item": "Yes", + "stock_uom": "_Test UOM" + }], + [{ + "doctype": "Item", + "item_code": "_Test FG Item 2", + "item_name": "_Test FG Item 2", + "description": "_Test FG Item 2", + "item_group": "_Test Item Group Desktops", + "is_stock_item": "Yes", + "default_warehouse": "_Test Warehouse - _TC", + "default_income_account": "Sales - _TC", + "is_asset_item": "No", + "has_batch_no": "No", + "has_serial_no": "No", + "is_purchase_item": "Yes", + "is_sales_item": "Yes", + "is_service_item": "No", + "inspection_required": "No", + "is_pro_applicable": "Yes", + "is_sub_contracted_item": "Yes", + "stock_uom": "_Test UOM" + }], ] \ No newline at end of file diff --git a/support/doctype/newsletter/newsletter.py b/support/doctype/newsletter/newsletter.py index a6b5aa29e8..8e45768b35 100644 --- a/support/doctype/newsletter/newsletter.py +++ b/support/doctype/newsletter/newsletter.py @@ -76,14 +76,17 @@ class DocType(): sender = self.doc.send_from or webnotes.utils.get_formatted_email(self.doc.owner) from webnotes.utils.email_lib.bulk import send - webnotes.conn.auto_commit_on_many_writes = True + + if not webnotes.flags.in_test: + webnotes.conn.auto_commit_on_many_writes = True send(recipients = self.recipients, sender = sender, subject = self.doc.subject, message = self.doc.message, doctype = self.send_to_doctype, email_field = "email_id", ref_doctype = self.doc.doctype, ref_docname = self.doc.name) - webnotes.conn.auto_commit_on_many_writes = False + if not webnotes.flags.in_test: + webnotes.conn.auto_commit_on_many_writes = False def validate_send(self): if self.doc.fields.get("__islocal"): diff --git a/support/doctype/newsletter/test_newsletter.py b/support/doctype/newsletter/test_newsletter.py index fae3e40c49..3f4e021bb3 100644 --- a/support/doctype/newsletter/test_newsletter.py +++ b/support/doctype/newsletter/test_newsletter.py @@ -45,20 +45,23 @@ test_records =[ "subject": "_Test Newsletter to Lead", "send_to_type": "Lead", "lead_source": "All", - "message": "This is a test newsletter" + "message": "This is a test newsletter", + "send_from": "admin@example.com" }], [{ "doctype": "Newsletter", "subject": "_Test Newsletter to Contact", "send_to_type": "Contact", "contact_type": "Customer", - "message": "This is a test newsletter" + "message": "This is a test newsletter", + "send_from": "admin@example.com" }], [{ "doctype": "Newsletter", "subject": "_Test Newsletter to Custom", "send_to_type": "Custom", "email_list": "test_custom@example.com, test_custom1@example.com, test_custom2@example.com", - "message": "This is a test newsletter" + "message": "This is a test newsletter", + "send_from": "admin@example.com" }], ] diff --git a/utilities/demo/make_demo.py b/utilities/demo/make_demo.py index 9df34c26ae..21da30b978 100644 --- a/utilities/demo/make_demo.py +++ b/utilities/demo/make_demo.py @@ -426,7 +426,7 @@ def import_data(dt, submit=False, overwrite=False): for doctype in dt: print "Importing", doctype.replace("_", " "), "..." - webnotes.form_dict = webnotes._dict() + webnotes.local.form_dict = webnotes._dict() if submit: webnotes.form_dict["params"] = json.dumps({"_submit": 1}) webnotes.uploaded_file = os.path.join(os.path.dirname(__file__), "demo_docs", doctype+".csv")