[ui test] leave type,leave control panel and leave allocation in HR (#10136)

* changes in attendance

* added test for leave type

* added test for leave control panel

* added test for leave allocation

* codacy fixes
diff --git a/erpnext/hr/doctype/attendance/test_attendance.js b/erpnext/hr/doctype/attendance/test_attendance.js
index 044d716..82347ad 100644
--- a/erpnext/hr/doctype/attendance/test_attendance.js
+++ b/erpnext/hr/doctype/attendance/test_attendance.js
@@ -3,15 +3,8 @@
 QUnit.test("Test: Attendance [HR]", function (assert) {
 	assert.expect(4);
 	let done = assert.async();
-	let employee_code;
 
 	frappe.run_serially([
-		// get employee's auto generated name
-		() => frappe.set_route("List", "Employee", "List"),
-		() => frappe.timeout(0.5),
-		() => frappe.click_link('Test Employee'),
-		() => frappe.timeout(0.5),
-		() => employee_code = frappe.get_route()[2],
 		// test attendance creation for one employee
 		() => frappe.set_route("List", "Attendance", "List"),
 		() => frappe.timeout(0.5),
@@ -21,7 +14,8 @@
 			"Form for new Attendance opened successfully."),
 		// set values in form
 		() => cur_frm.set_value("company", "Test Company"),
-		() => cur_frm.set_value("employee", employee_code),
+		() => frappe.db.get_value('Employee', {'employee_name':'Test Employee 1'}, 'name'),
+		(employee) => cur_frm.set_value("employee", employee.message.name),
 		() => cur_frm.save(),
 		() => frappe.timeout(1),
 		// check docstatus of attendance before submit [Draft]
diff --git a/erpnext/hr/doctype/employee/test_employee.js b/erpnext/hr/doctype/employee/test_employee.js
index 77d1433..64a6b7a 100644
--- a/erpnext/hr/doctype/employee/test_employee.js
+++ b/erpnext/hr/doctype/employee/test_employee.js
@@ -10,7 +10,7 @@
 		() => frappe.set_route("List", "Employee", "List"),
 		() => frappe.new_doc("Employee"),
 		() => frappe.timeout(1),
-		() => cur_frm.set_value("employee_name", "Test Employee"),
+		() => cur_frm.set_value("employee_name", "Test Employee 1"),
 		() => cur_frm.set_value("salutation", "Ms"),
 		() => cur_frm.set_value("company", "Test Company"),
 		() => cur_frm.set_value("date_of_joining", frappe.datetime.add_months(today_date, -2)),	// joined 2 month from now
@@ -26,7 +26,7 @@
 		() => cur_frm.save(),
 		() => frappe.timeout(1),
 		// check name of employee
-		() => assert.equal("Test Employee", cur_frm.doc.employee_name,
+		() => assert.equal("Test Employee 1", cur_frm.doc.employee_name,
 			'name of employee correctly saved'),
 		// check auto filled gender according to salutation
 		() => assert.equal("Female", cur_frm.doc.gender,
diff --git a/erpnext/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.js b/erpnext/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.js
index c7cd3a3..a71ba0f 100644
--- a/erpnext/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.js
+++ b/erpnext/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.js
@@ -3,29 +3,46 @@
 QUnit.test("Test: Employee attendance tool [HR]", function (assert) {
 	assert.expect(3);
 	let done = assert.async();
-	let attendance_date = frappe.datetime.add_days(frappe.datetime.nowdate(), -1);	// previous day
+	let today_date = frappe.datetime.nowdate();
+	let date_of_attendance = frappe.datetime.add_days(today_date, -1);	// previous day
 
 	frappe.run_serially([
+		// create employee
+		() => {
+			return frappe.tests.make('Employee', [
+				{salutation: "Mr"},
+				{employee_name: "Test Employee 2"},
+				{company: "Test Company"},
+				{date_of_joining: frappe.datetime.add_months(today_date, -2)},	// joined 2 month from now
+				{date_of_birth: frappe.datetime.add_months(today_date, -240)},	// age is 20 years
+				{employment_type: "Test Employment type"},
+				{holiday_list: "Test Holiday list"},
+				{branch: "Test Branch"},
+				{department: "Test Department"},
+				{designation: "Test Designation"}
+			]);
+		},
 		() => frappe.set_route("Form", "Employee Attendance Tool"),
 		() => frappe.timeout(0.5),
 		() => assert.equal("Employee Attendance Tool", cur_frm.doctype,
 			"Form for Employee Attendance Tool opened successfully."),
 		// set values in form
-		() => cur_frm.set_value("date", attendance_date),
+		() => cur_frm.set_value("date", date_of_attendance),
 		() => cur_frm.set_value("branch", "Test Branch"),
 		() => cur_frm.set_value("department", "Test Department"),
 		() => cur_frm.set_value("company", "Test Company"),
-		() => frappe.timeout(0.5),
-		() => frappe.click_check('Test Employee'),
-		() => frappe.tests.click_button('Mark Present'),
+		() => frappe.timeout(1),
+		() => frappe.click_button('Check all'),
+		() => frappe.click_button('Mark Present'),
 		// check if attendance is marked
 		() => frappe.set_route("List", "Attendance", "List"),
 		() => frappe.timeout(1),
 		() => {
-			assert.equal("Test Employee", cur_list.data[0].employee_name,
-				"attendance marked correctly saved");
-			assert.equal(attendance_date, cur_list.data[0].attendance_date,
-				"attendance date is set correctly");
+			assert.deepEqual(["Test Employee 2", "Test Employee 1"], [cur_list.data[0].employee_name, cur_list.data[1].employee_name],
+				"marked attendance correctly saved for both employee");
+			let marked_attendance = cur_list.data.filter(d => d.attendance_date == date_of_attendance);
+			assert.equal(marked_attendance.length, 2,
+				'both the attendance are marked for correct date');
 		},
 		() => done()
 	]);
diff --git a/erpnext/hr/doctype/leave_allocation/test_leave_allocation.js b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.js
new file mode 100644
index 0000000..5d189d2
--- /dev/null
+++ b/erpnext/hr/doctype/leave_allocation/test_leave_allocation.js
@@ -0,0 +1,37 @@
+QUnit.module('hr');
+
+QUnit.test("Test: Leave allocation [HR]", function (assert) {
+	assert.expect(3);
+	let done = assert.async();
+	let today_date = frappe.datetime.nowdate();
+
+	frappe.run_serially([
+		// test creating leave alloction
+		() => frappe.set_route("List", "Leave Allocation", "List"),
+		() => frappe.new_doc("Leave Allocation"),
+		() => frappe.timeout(1),
+		() => frappe.db.get_value('Employee', {'employee_name':'Test Employee 1'}, 'name'),
+		(employee) => cur_frm.set_value("employee", employee.message.name),
+		() => cur_frm.set_value("leave_type", "Test Leave type"),
+		() => cur_frm.set_value("to_date", frappe.datetime.add_months(today_date, 2)),	// for two months
+		() => cur_frm.set_value("description", "This is just for testing"),
+		() => cur_frm.set_value("new_leaves_allocated", 2),
+		() => frappe.click_check('Add unused leaves from previous allocations'),
+		// save form
+		() => cur_frm.save(),
+		() => frappe.timeout(1),
+		() => cur_frm.savesubmit(),
+		() => frappe.timeout(1),
+		() => assert.equal("Confirm", cur_dialog.title,
+			'confirmation for leave alloction shown'),
+		() => frappe.click_button('Yes'),
+		() => frappe.timeout(1),
+		// check auto filled from date
+		() => assert.equal(today_date, cur_frm.doc.from_date,
+			"from date correctly set"),
+		// check for total leaves
+		() => assert.equal(cur_frm.doc.carry_forwarded_leaves + 2, cur_frm.doc.total_leaves_allocated,
+			"total leave calculation is correctly set"),
+		() => done()
+	]);
+});
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.js b/erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.js
new file mode 100644
index 0000000..e71ff6e
--- /dev/null
+++ b/erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.js
@@ -0,0 +1,36 @@
+QUnit.module('hr');
+
+QUnit.test("Test: Leave control panel [HR]", function (assert) {
+	assert.expect(2);
+	let done = assert.async();
+	let today_date = frappe.datetime.nowdate();
+
+	frappe.run_serially([
+		// test leave allocation using leave control panel
+		() => frappe.set_route("Form", "Leave Control Panel"),
+		() => frappe.timeout(1),
+		() => cur_frm.set_value("leave_type", "Test Leave type"),
+		() => cur_frm.set_value("company", "Test Company"),
+		() => cur_frm.set_value("employment_type", "Test Employment Type"),
+		() => cur_frm.set_value("branch", "Test Branch"),
+		() => cur_frm.set_value("department", "Test Department"),
+		() => cur_frm.set_value("designation", "Test Designation"),
+		() => cur_frm.set_value("from_date", frappe.datetime.add_months(today_date, -2)),
+		() => cur_frm.set_value("to_date", frappe.datetime.add_days(today_date, -1)),	// for two months [not today]
+		() => cur_frm.set_value("no_of_days", 3),
+		// allocate leaves
+		() => frappe.click_button('Allocate'),
+		() => frappe.timeout(1),
+		() => assert.equal("Message", cur_dialog.title,
+			"leave alloction message shown"),
+		() => frappe.click_button('Close'),
+		() => frappe.set_route("List", "Leave Allocation", "List"),
+		() => frappe.timeout(1),
+		() => {
+			let leave_allocated = cur_list.data.filter(d => d.leave_type == "Test Leave type");
+			assert.equal(2, leave_allocated.length,
+				'leave allocation successfully done for both the employee');
+		},
+		() => done()
+	]);
+});
\ No newline at end of file
diff --git a/erpnext/hr/doctype/leave_type/test_leave_type.js b/erpnext/hr/doctype/leave_type/test_leave_type.js
new file mode 100644
index 0000000..4cde49b
--- /dev/null
+++ b/erpnext/hr/doctype/leave_type/test_leave_type.js
@@ -0,0 +1,22 @@
+QUnit.module('hr');
+
+QUnit.test("Test: Leave type [HR]", function (assert) {
+	assert.expect(1);
+	let done = assert.async();
+
+	frappe.run_serially([
+		// test leave type creation
+		() => frappe.set_route("List", "Leave Type", "List"),
+		() => frappe.new_doc("Leave Type"),
+		() => frappe.timeout(1),
+		() => cur_frm.set_value("leave_type_name", "Test Leave type"),
+		() => cur_frm.set_value("max_days_allowed", "5"),
+		() => frappe.click_check('Is Carry Forward'),
+		// save form
+		() => cur_frm.save(),
+		() => frappe.timeout(1),
+		() => assert.equal("Test Leave type", cur_frm.doc.leave_type_name,
+			'leave type correctly saved'),
+		() => done()
+	]);
+});
\ No newline at end of file
diff --git a/erpnext/tests/ui/tests.txt b/erpnext/tests/ui/tests.txt
index f51c1de..b86f1ee 100644
--- a/erpnext/tests/ui/tests.txt
+++ b/erpnext/tests/ui/tests.txt
@@ -20,10 +20,13 @@
 erpnext/hr/doctype/employee/test_employee.js
 erpnext/hr/doctype/employee_attendance_tool/test_employee_attendance_tool.js
 erpnext/hr/doctype/attendance/test_attendance.js
+erpnext/hr/doctype/leave_type/test_leave_type.js
+erpnext/hr/doctype/leave_control_panel/test_leave_control_panel.js
+erpnext/hr/doctype/leave_allocation/test_leave_allocation.js
 erpnext/schools/doctype/academic_year/test_academic_year.js
 erpnext/schools/doctype/academic_term/test_academic_term.js
 erpnext/schools/doctype/school_settings/test_school_settings.js
 erpnext/schools/doctype/student_batch_name/test_student_batch_name.js
 erpnext/schools/doctype/student_category/test_student_category.js
 erpnext/schools/doctype/room/test_room.js
-erpnext/schools/doctype/instructor/test_instructor.js
+erpnext/schools/doctype/instructor/test_instructor.js
\ No newline at end of file