Fix Leave Application test cases
diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.py b/erpnext/hr/doctype/leave_application/test_leave_application.py
index f7f688a..4e85074 100644
--- a/erpnext/hr/doctype/leave_application/test_leave_application.py
+++ b/erpnext/hr/doctype/leave_application/test_leave_application.py
@@ -47,15 +47,16 @@
 		for dt in ["Leave Application", "Leave Allocation", "Salary Slip"]:
 			frappe.db.sql("delete from `tab%s`" % dt)
 
+	@classmethod
+	def setUpClass(cls):
+		set_leave_approver()
+
 	def tearDown(self):
 		frappe.set_user("Administrator")
 
-	def _clear_roles(self):
-		frappe.db.sql("""delete from `tabHas Role` where parent in
-			("test@example.com", "test1@example.com", "test2@example.com")""")
-
 	def _clear_applications(self):
 		frappe.db.sql("""delete from `tabLeave Application`""")
+		frappe.db.sql("""delete from `tabDepartment Approver` where parentfield = 'Leave Approver'""")
 
 	def get_application(self, doc):
 		application = frappe.copy_doc(doc)
@@ -64,11 +65,6 @@
 		return application
 
 	def test_block_list(self):
-		self._clear_roles()
-
-		from frappe.utils.user import add_role
-		add_role("test1@example.com", "HR User")
-		add_role("test1@example.com", "Leave Approver")
 		clear_user_permissions_for_doctype("Employee")
 
 		frappe.db.set_value("Department", "_Test Department - _TC",
@@ -81,7 +77,7 @@
 		application.status = "Approved"
 		self.assertRaises(LeaveDayBlockedError, application.submit)
 
-		frappe.set_user("test1@example.com")
+		frappe.set_user("test@example.com")
 
 		# clear other applications
 		frappe.db.sql("delete from `tabLeave Application`")
@@ -90,13 +86,8 @@
 		self.assertTrue(application.insert())
 
 	def test_overlap(self):
-		self._clear_roles()
 		self._clear_applications()
 
-		from frappe.utils.user import add_role
-		add_role("test@example.com", "Employee")
-		add_role("test2@example.com", "Leave Approver")
-
 		frappe.set_user("test@example.com")
 
 		make_allocation_record()
@@ -108,13 +99,8 @@
 		self.assertRaises(OverlapError, application.insert)
 
 	def test_overlap_with_half_day_1(self):
-		self._clear_roles()
 		self._clear_applications()
 
-		from frappe.utils.user import add_role
-		add_role("test@example.com", "Employee")
-		add_role("test2@example.com", "Leave Approver")
-
 		frappe.set_user("test@example.com")
 
 		make_allocation_record()
@@ -143,13 +129,8 @@
 		self.assertRaises(OverlapError, application.insert)
 
 	def test_overlap_with_half_day_2(self):
-		self._clear_roles()
 		self._clear_applications()
 
-		from frappe.utils.user import add_role
-		add_role("test@example.com", "Employee")
-		add_role("test2@example.com", "Leave Approver")
-
 		frappe.set_user("test@example.com")
 
 		make_allocation_record()
@@ -166,13 +147,8 @@
 		self.assertRaises(OverlapError, application.insert)
 
 	def test_overlap_with_half_day_3(self):
-		self._clear_roles()
 		self._clear_applications()
 
-		from frappe.utils.user import add_role
-		add_role("test@example.com", "Employee")
-		add_role("test2@example.com", "Leave Approver")
-
 		frappe.set_user("test@example.com")
 
 		make_allocation_record()
@@ -200,61 +176,42 @@
 		application.half_day_date = "2013-01-05"
 		application.insert()
 
-	def test_global_block_list(self):
-		self._clear_roles()
-
-		from frappe.utils.user import add_role
-		add_role("test1@example.com", "Employee")
-		add_role("test@example.com", "Leave Approver")
-
-		make_allocation_record(employee="_T-Employee-00002")
-
-		application = self.get_application(_test_records[1])
-
-		frappe.db.set_value("Leave Block List", "_Test Leave Block List",
-			"applies_to_all_departments", 1)
-		frappe.db.set_value("Employee", "_T-Employee-00002", "department",
-			"_Test Department - _TC")
-
-		frappe.set_user("test1@example.com")
-		application.insert()
-		application.status = "Approved"
-		frappe.set_user("test@example.com")
-		self.assertRaises(LeaveDayBlockedError, application.submit)
-
-		frappe.db.set_value("Leave Block List", "_Test Leave Block List",
-			"applies_to_all_departments", 0)
 
 	def test_optional_leave(self):
 		leave_period = get_leave_period()
 		today = nowdate()
 		from datetime import date
-		holiday_list = frappe.get_doc(dict(
-			doctype = 'Holiday List',
-			holiday_list_name = 'test holiday list for optional holiday',
-			from_date = date(date.today().year, 1, 1),
-			to_date = date(date.today().year, 12, 31),
-			holidays = [
-				dict(holiday_date = today, description = 'test')
-			]
-		)).insert()
+		holiday_list = 'Test Holiday List for Optional Holiday'
+		if not frappe.db.exists('Holiday List', holiday_list):
+			frappe.get_doc(dict(
+				doctype = 'Holiday List',
+				holiday_list_name = holiday_list,
+				from_date = date(date.today().year, 1, 1),
+				to_date = date(date.today().year, 12, 31),
+				holidays = [
+					dict(holiday_date = today, description = 'Test')
+				]
+			)).insert()
 		employee = get_employee()
 
-		frappe.db.set_value('Leave Period', leave_period.name, 'optional_holiday_list', holiday_list.name)
-		leave_type = frappe.get_doc(dict(
-			leave_type_name = 'Test Optional Type',
-			doctype = 'Leave Type',
-			is_optional_leave = 1
-		)).insert()
+		frappe.db.set_value('Leave Period', leave_period.name, 'optional_holiday_list', holiday_list)
+		leave_type = 'Test Optional Type'
+		if not frappe.db.exists('Leave Type', leave_type):
+			frappe.get_doc(dict(
+				leave_type_name = leave_type,
+				doctype = 'Leave Type',
+				is_optional_leave = 1
+			)).insert()
 
-		allocate_leaves(employee, leave_period, leave_type.name, 10)
+		allocate_leaves(employee, leave_period, leave_type, 10)
 
 		date = add_days(today, - 1)
 
 		leave_application = frappe.get_doc(dict(
 			doctype = 'Leave Application',
 			employee = employee.name,
-			leave_type = leave_type.name,
+			company = '_Test Company',
+			leave_type = leave_type,
 			from_date = date,
 			to_date = date,
 		))
@@ -269,7 +226,7 @@
 		leave_application.submit()
 
 		# check leave balance is reduced
-		self.assertEqual(get_leave_balance_on(employee.name, leave_type.name, today), 9)
+		self.assertEqual(get_leave_balance_on(employee.name, leave_type, today), 9)
 
 	def test_leaves_allowed(self):
 		employee = get_employee()
@@ -389,29 +346,30 @@
 	def test_earned_leave(self):
 		leave_period = get_leave_period()
 		employee = get_employee()
-
-		leave_type = frappe.get_doc(dict(
-			leave_type_name = 'Test Earned Leave Type',
-			doctype = 'Leave Type',
-			is_earned_leave = 1,
-			earned_leave_frequency = 'Monthly',
-			rounding = 0.5,
-			max_leaves_allowed = 6
-		)).insert()
+		leave_type = 'Test Earned Leave Type'
+		if not frappe.db.exists('Leave Type', leave_type):
+			leave_type = frappe.get_doc(dict(
+				leave_type_name = leave_type,
+				doctype = 'Leave Type',
+				is_earned_leave = 1,
+				earned_leave_frequency = 'Monthly',
+				rounding = 0.5,
+				max_leaves_allowed = 6
+			)).insert()
 		leave_policy = frappe.get_doc({
 			"doctype": "Leave Policy",
-			"leave_policy_details": [{"leave_type": leave_type.name, "annual_allocation": 6}]
+			"leave_policy_details": [{"leave_type": leave_type, "annual_allocation": 6}]
 		}).insert()
 		frappe.db.set_value("Employee", employee.name, "leave_policy", leave_policy.name)
 
-		allocate_leaves(employee, leave_period, leave_type.name, 0, eligible_leaves = 12)
+		allocate_leaves(employee, leave_period, leave_type, 0, eligible_leaves = 12)
 
 		from erpnext.hr.utils import allocate_earned_leaves
 		i = 0
 		while(i<14):
 			allocate_earned_leaves()
 			i += 1
-		self.assertEqual(get_leave_balance_on(employee.name, leave_type.name, nowdate()), 6)
+		self.assertEqual(get_leave_balance_on(employee.name, leave_type, nowdate()), 6)
 
 def make_allocation_record(employee=None, leave_type=None):
 	frappe.db.sql("delete from `tabLeave Allocation`")
@@ -431,6 +389,14 @@
 def get_employee():
 	return frappe.get_doc("Employee", "_T-Employee-00001")
 
+def set_leave_approver():
+	employee = get_employee()
+	dept_doc = frappe.get_doc("Department", employee.department)
+	dept_doc.append('leave_approver', {
+		'approver': 'test@example.com'
+	})
+	dept_doc.save(ignore_permissions=True)
+
 def get_leave_period():
 	leave_period_name = frappe.db.exists({
 		"doctype": "Leave Period",
@@ -449,7 +415,7 @@
 			)).insert()
 
 def allocate_leaves(employee, leave_period, leave_type, new_leaves_allocated, eligible_leaves=0):
-	frappe.get_doc({
+	allocate_leave = frappe.get_doc({
 		"doctype": "Leave Allocation",
 		"__islocal": 1,
 		"employee": employee.name,
@@ -460,3 +426,6 @@
 		"new_leaves_allocated": new_leaves_allocated,
 		"docstatus": 1
 	}).insert()
+
+	allocate_leave.submit()
+