[minor] don't rollback when running all tests, fixed test cases
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 c21d63f..b9ac8bd 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 @@
 
 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 a562c67..c65b9ac 100644
--- a/accounts/doctype/purchase_invoice/purchase_invoice.py
+++ b/accounts/doctype/purchase_invoice/purchase_invoice.py
@@ -434,7 +434,7 @@
 	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 c89f7c4..7a900e3 100644
--- a/hr/doctype/leave_application/test_leave_application.py
+++ b/hr/doctype/leave_application/test_leave_application.py
@@ -7,6 +7,9 @@
 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 @@
 		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 @@
 			"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 @@
 		return application
 
 	def test_block_list(self):
-		webnotes.session.user = "Administrator"
 		self._clear_roles()
 		
 		from webnotes.profile import add_role
@@ -54,7 +58,6 @@
 		self.assertTrue(application.insert())
 		
 	def test_overlap(self):
-		webnotes.session.user = "Administrator"
 		self._clear_roles()
 		self._clear_applications()
 		
@@ -72,7 +75,6 @@
 		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 @@
 			"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 e266cd8..34814d9 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 @@
 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 5954475..97a2f96 100644
--- a/manufacturing/doctype/bom/bom.py
+++ b/manufacturing/doctype/bom/bom.py
@@ -332,6 +332,7 @@
 			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 da98faf..2f4424e 100644
--- a/manufacturing/doctype/bom/test_bom.py
+++ b/manufacturing/doctype/bom/test_bom.py
@@ -10,7 +10,7 @@
 	[
 		{
 			"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 @@
 			"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 @@
 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 34a0cc0..4976dfe 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 @@
 
 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 7c90f6a..adc5a54 100644
--- a/selling/doctype/customer/test_customer.py
+++ b/selling/doctype/customer/test_customer.py
@@ -17,6 +17,8 @@
 			(("_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 @@
 		# 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 cf3881d..366035e 100644
--- a/selling/doctype/quotation/test_quotation.py
+++ b/selling/doctype/quotation/test_quotation.py
@@ -11,17 +11,19 @@
 	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()
 		
-		quotation = webnotes.bean("Quotation","_T-Quotation-00001")
+		self.assertRaises(webnotes.ValidationError, make_sales_order, quotation.doc.name)
+		
 		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 8bd759a..0ee58a7 100644
--- a/selling/doctype/sales_order/test_sales_order.py
+++ b/selling/doctype/sales_order/test_sales_order.py
@@ -72,6 +72,10 @@
 		
 	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 @@
 			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 ca95a50..2c4308b 100644
--- a/stock/doctype/delivery_note/test_delivery_note.py
+++ b/stock/doctype/delivery_note/test_delivery_note.py
@@ -9,20 +9,22 @@
 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 @@
 		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 @@
 		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 @@
 		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 ad88c8c..c8930ab 100644
--- a/stock/doctype/item/test_item.py
+++ b/stock/doctype/item/test_item.py
@@ -81,9 +81,9 @@
 		"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 @@
 		"inspection_required": "No",
 		"is_pro_applicable": "No",
 		"is_sub_contracted_item": "No",
+		"is_manufactured_item": "No",
 		"stock_uom": "_Test UOM"
 	}],
 	[{
@@ -207,4 +208,45 @@
 		"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 a6b5aa2..8e45768 100644
--- a/support/doctype/newsletter/newsletter.py
+++ b/support/doctype/newsletter/newsletter.py
@@ -76,14 +76,17 @@
 		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 fae3e40..3f4e021 100644
--- a/support/doctype/newsletter/test_newsletter.py
+++ b/support/doctype/newsletter/test_newsletter.py
@@ -45,20 +45,23 @@
 		"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 9df34c2..21da30b 100644
--- a/utilities/demo/make_demo.py
+++ b/utilities/demo/make_demo.py
@@ -426,7 +426,7 @@
 	
 	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")