[tests] Test cases for Item and Warehouse renaming and merging
diff --git a/erpnext/stock/doctype/item/test_item.py b/erpnext/stock/doctype/item/test_item.py
index aceefc0..52cf10d 100644
--- a/erpnext/stock/doctype/item/test_item.py
+++ b/erpnext/stock/doctype/item/test_item.py
@@ -9,6 +9,9 @@
 from erpnext.controllers.item_variant import (create_variant, ItemVariantExistsError,
 	InvalidItemAttributeValueError)
 
+from frappe.model.rename_doc import rename_doc
+from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
+
 test_ignore = ["BOM"]
 test_dependencies = ["Warehouse"]
 
@@ -164,11 +167,32 @@
 		variant.item_name = "_Test Numeric Variant Large 1.1m"
 		self.assertRaises(InvalidItemAttributeValueError, variant.save)
 
-		variant = create_variant("_Test Numeric Template Item", {"Test Size": "Large", "Test Item Length": 1.5})
+		variant = create_variant("_Test Numeric Template Item", 
+			{"Test Size": "Large", "Test Item Length": 1.5})
 		self.assertEquals(variant.item_code, None)
 		variant.item_code = "_Test Numeric Variant-L-1.5"
 		variant.item_name = "_Test Numeric Variant Large 1.5m"
 		variant.save()
+		
+	def test_item_merging(self):
+		create_item("Test Item for Merging 1")
+		create_item("Test Item for Merging 2")
+		
+		make_stock_entry(item_code="Test Item for Merging 1", target="_Test Warehouse - _TC", 
+			qty=1, rate=100)
+		make_stock_entry(item_code="Test Item for Merging 2", target="_Test Warehouse 1 - _TC", 
+			qty=1, rate=100)
+		
+		rename_doc("Item", "Test Item for Merging 1", "Test Item for Merging 2", merge=True)
+		
+		self.assertFalse(frappe.db.exists("Item", "Test Item for Merging 1"))
+		
+		self.assertTrue(frappe.db.get_value("Bin", 
+			{"item_code": "Test Item for Merging 2", "warehouse": "_Test Warehouse - _TC"}))
+			
+		self.assertTrue(frappe.db.get_value("Bin", 
+			{"item_code": "Test Item for Merging - 2", "warehouse": "_Test Warehouse 1 - _TC"}))
+		
 
 def make_item_variant():
 	if not frappe.db.exists("Item", "_Test Variant Item-S"):
@@ -184,3 +208,14 @@
 	return total_qty[0].projected_qty if total_qty else 0.0
 
 test_records = frappe.get_test_records('Item')
+
+def create_item(item_code, is_stock_item=None):
+	if not frappe.db.exists("Item", item_code):
+		item = frappe.new_doc("Item")
+		item.item_code = item_code
+		item.item_name = item_code
+		item.description = item_code
+		item.item_group = "All Item Groups"
+		item.is_stock_item = is_stock_item or 1		
+		item.save()
+		
\ No newline at end of file
diff --git a/erpnext/stock/doctype/warehouse/test_warehouse.py b/erpnext/stock/doctype/warehouse/test_warehouse.py
index 2232584..c9c4b5f 100644
--- a/erpnext/stock/doctype/warehouse/test_warehouse.py
+++ b/erpnext/stock/doctype/warehouse/test_warehouse.py
@@ -1,7 +1,9 @@
 # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 # License: GNU General Public License v3. See license.txt
 from __future__ import unicode_literals
-
+from frappe.model.rename_doc import rename_doc
+from erpnext.stock.doctype.stock_entry.stock_entry_utils import make_stock_entry
+from frappe.utils import cint
 
 import frappe
 import unittest
@@ -21,5 +23,66 @@
 		for child_warehouse in child_warehouses:
 			self.assertEquals(p_warehouse.name, child_warehouse.parent_warehouse)
 			self.assertEquals(child_warehouse.is_group, 0)
+	
+	def test_warehouse_renaming(self):
+		create_warehouse("Test Warehouse for Renaming 1")
 		
+		self.assertTrue(frappe.db.exists("Account", "Test Warehouse for Renaming 1 - _TC"))
+		self.assertTrue(frappe.db.get_value("Account", 
+			filters={"warehouse": "Test Warehouse for Renaming 1 - _TC"}))
 		
+		# Rename with abbr
+		rename_doc("Warehouse", "Test Warehouse for Renaming 1 - _TC", "Test Warehouse for Renaming 2 - _TC")
+		
+		self.assertTrue(frappe.db.exists("Account", "Test Warehouse for Renaming 2 - _TC"))
+		self.assertTrue(frappe.db.get_value("Account", 
+			filters={"warehouse": "Test Warehouse for Renaming 2 - _TC"}))
+			
+		# Rename without abbr
+		rename_doc("Warehouse", "Test Warehouse for Renaming 2 - _TC", "Test Warehouse for Renaming 3")
+		
+		self.assertTrue(frappe.db.exists("Account", "Test Warehouse for Renaming 3 - _TC"))
+		self.assertTrue(frappe.db.get_value("Account", 
+			filters={"warehouse": "Test Warehouse for Renaming 3 - _TC"}))
+		
+	def test_warehouse_merging(self):
+		create_warehouse("Test Warehouse for Merging 1")
+		create_warehouse("Test Warehouse for Merging 2")
+
+		make_stock_entry(item_code="_Test Item", target="Test Warehouse for Merging 1 - _TC",
+			qty=1, rate=100)
+		make_stock_entry(item_code="_Test Item", target="Test Warehouse for Merging 2 - _TC",
+			qty=1, rate=100)
+			
+		existing_bin_qty = (
+			cint(frappe.db.get_value("Bin", 
+				{"item_code": "_Test Item", "warehouse": "Test Warehouse for Merging 1 - _TC"}, "actual_qty"))
+			+ cint(frappe.db.get_value("Bin", 
+				{"item_code": "_Test Item", "warehouse": "Test Warehouse for Merging 2 - _TC"}, "actual_qty"))
+		)
+
+		rename_doc("Warehouse", "Test Warehouse for Merging 1 - _TC", 
+			"Test Warehouse for Merging 2 - _TC", merge=True)
+
+		self.assertFalse(frappe.db.exists("Warehouse", "Test Warehouse for Merging 1 - _TC"))
+
+		bin_qty = frappe.db.get_value("Bin",
+			{"item_code": "_Test Item", "warehouse": "Test Warehouse for Merging 2 - _TC"}, "actual_qty")
+			
+		self.assertEqual(bin_qty, existing_bin_qty)
+		
+		self.assertFalse(frappe.db.exists("Account", "Test Warehouse for Merging 1 - _TC"))
+		self.assertTrue(frappe.db.exists("Account", "Test Warehouse for Merging 2 - _TC"))
+		self.assertTrue(frappe.db.get_value("Account", 
+			filters={"warehouse": "Test Warehouse for Merging 2 - _TC"}))
+			
+						
+def create_warehouse(warehouse_name):
+	if not frappe.db.exists("Warehouse", warehouse_name + " - _TC"):
+		w = frappe.new_doc("Warehouse")
+		w.warehouse_name = warehouse_name
+		w.parent_warehouse = "_Test Warehouse Group - _TC"
+		w.company = "_Test Company"
+		w.save()
+	
+	
\ No newline at end of file