Leave Application - Test - Leave allowed, applicable after, maximum continuos days
diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.py b/erpnext/hr/doctype/leave_application/test_leave_application.py
index e71357c..9b9e964 100644
--- a/erpnext/hr/doctype/leave_application/test_leave_application.py
+++ b/erpnext/hr/doctype/leave_application/test_leave_application.py
@@ -7,7 +7,7 @@
from erpnext.hr.doctype.leave_application.leave_application import LeaveDayBlockedError, OverlapError, NotAnOptionalHoliday, get_leave_balance_on
from frappe.permissions import clear_user_permissions_for_doctype
-from frappe.utils import add_days, nowdate
+from frappe.utils import add_days, nowdate, now_datetime
test_dependencies = ["Leave Allocation", "Leave Block List"]
@@ -275,16 +275,119 @@
self.assertEqual(get_leave_balance_on(employee.name, leave_type.name, today), 9)
def test_leaves_allowed(self):
- # TODO: test cannot allocate more than max leaves
- pass
+ employee = get_employee()
+ leave_period = get_leave_period()
+ frappe.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1)
+ leave_type = frappe.get_doc(dict(
+ leave_type_name = 'Test Leave Type',
+ doctype = 'Leave Type',
+ max_leaves_allowed = 5
+ )).insert()
+
+ date = add_days(nowdate(), -7)
+
+ allocate_leaves(employee, leave_period, leave_type.name, 5)
+
+ leave_application = frappe.get_doc(dict(
+ doctype = 'Leave Application',
+ employee = employee.name,
+ leave_type = leave_type.name,
+ from_date = date,
+ to_date = add_days(date, 2),
+ company = "_Test Company",
+ docstatus = 1,
+ status = "Approved"
+ ))
+
+ self.assertTrue(leave_application.insert())
+
+ leave_application = frappe.get_doc(dict(
+ doctype = 'Leave Application',
+ employee = employee.name,
+ leave_type = leave_type.name,
+ from_date = add_days(date, 4),
+ to_date = add_days(date, 7),
+ company = "_Test Company",
+ docstatus = 1,
+ status = "Approved"
+ ))
+ self.assertRaises(frappe.ValidationError, leave_application.insert)
def test_applicable_after(self):
- # TODO: test not applicable until applicable working days
- pass
+ employee = get_employee()
+ leave_period = get_leave_period()
+ frappe.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1)
+ leave_type = frappe.get_doc(dict(
+ leave_type_name = 'Test Leave Type',
+ doctype = 'Leave Type',
+ applicable_after = 15
+ )).insert()
+
+ date = add_days(nowdate(), -7)
+
+ allocate_leaves(employee, leave_period, leave_type.name, 10)
+
+ leave_application = frappe.get_doc(dict(
+ doctype = 'Leave Application',
+ employee = employee.name,
+ leave_type = leave_type.name,
+ from_date = date,
+ to_date = add_days(date, 4),
+ company = "_Test Company",
+ docstatus = 1,
+ status = "Approved"
+ ))
+
+ self.assertRaises(frappe.ValidationError, leave_application.insert)
+
+ frappe.delete_doc_if_exists("Leave Type", "Test Leave Type 1", force=1)
+ leave_type_1 = frappe.get_doc(dict(
+ leave_type_name = 'Test Leave Type 1',
+ doctype = 'Leave Type'
+ )).insert()
+
+ allocate_leaves(employee, leave_period, leave_type_1.name, 10)
+
+ leave_application = frappe.get_doc(dict(
+ doctype = 'Leave Application',
+ employee = employee.name,
+ leave_type = leave_type_1.name,
+ from_date = date,
+ to_date = add_days(date, 4),
+ company = "_Test Company",
+ docstatus = 1,
+ status = "Approved"
+ ))
+
+ self.assertTrue(leave_application.insert())
def test_max_continuous_leaves(self):
- # TODO: test cannot take continuous leaves more than
- pass
+ employee = get_employee()
+ leave_period = get_leave_period()
+ frappe.delete_doc_if_exists("Leave Type", "Test Leave Type", force=1)
+ leave_type = frappe.get_doc(dict(
+ leave_type_name = 'Test Leave Type',
+ doctype = 'Leave Type',
+ max_leaves_allowed = 15,
+ max_days_allowed = 3
+ )).insert()
+
+ date = add_days(nowdate(), -7)
+
+ allocate_leaves(employee, leave_period, leave_type.name, 10)
+
+ leave_application = frappe.get_doc(dict(
+ doctype = 'Leave Application',
+ employee = employee.name,
+ leave_type = leave_type.name,
+ from_date = date,
+ to_date = add_days(date, 4),
+ company = "_Test Company",
+ docstatus = 1,
+ status = "Approved"
+ ))
+
+ self.assertRaises(frappe.ValidationError, leave_application.insert)
def test_earned_leave(self):
leave_period = get_leave_period()
@@ -320,3 +423,36 @@
allocation.insert(ignore_permissions=True)
allocation.submit()
+
+def get_employee():
+ return frappe.get_doc("Employee", "_T-Employee-00001")
+
+def get_leave_period():
+ leave_period_name = frappe.db.exists({
+ "doctype": "Leave Period",
+ "name": "Test Leave Period"
+ })
+ if leave_period_name:
+ return frappe.get_doc("Leave Period", leave_period_name[0][0])
+ else:
+ return frappe.get_doc(dict(
+ name = 'Test Leave Period',
+ doctype = 'Leave Period',
+ from_date = "{0}-01-01".format(now_datetime().year),
+ to_date = "{0}-12-31".format(now_datetime().year),
+ company = "_Test Company",
+ is_active = 1
+ )).insert()
+
+def allocate_leaves(employee, leave_period, leave_type, new_leaves_allocated, eligible_leaves=0):
+ frappe.get_doc({
+ "doctype": "Leave Allocation",
+ "__islocal": 1,
+ "employee": employee.name,
+ "employee_name": employee.employee_name,
+ "leave_type": leave_type,
+ "from_date": leave_period.from_date,
+ "to_date": leave_period.to_date,
+ "new_leaves_allocated": new_leaves_allocated,
+ "docstatus": 1
+ }).insert()