Skip to content

Commit

Permalink
fix: dependent test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
Anurag810 committed Aug 27, 2020
1 parent 155774a commit 53bb95e
Show file tree
Hide file tree
Showing 5 changed files with 61 additions and 41 deletions.
21 changes: 19 additions & 2 deletions erpnext/hr/doctype/leave_application/test_leave_application.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@
from frappe.utils import add_days, nowdate, now_datetime, getdate, add_months
from erpnext.hr.doctype.leave_type.test_leave_type import create_leave_type
from erpnext.hr.doctype.leave_allocation.test_leave_allocation import create_leave_allocation
from erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment import create_assignment_for_multiple_employees

test_dependencies = ["Leave Allocation", "Leave Block List"]

Expand Down Expand Up @@ -410,6 +411,12 @@ def test_leave_balance_near_allocaton_expiry(self):
self.assertEqual(get_leave_balance_on(employee.name, leave_type.name, nowdate(), add_days(nowdate(), 8)), 21)

def test_earned_leaves_creation(self):

frappe.db.sql('''delete from `tabLeave Period`''')
frappe.db.sql('''delete from `tabLeave Policy Assignment`''')
frappe.db.sql('''delete from `tabLeave Allocation`''')
frappe.db.sql('''delete from `tabLeave Ledger Entry`''')

leave_period = get_leave_period()
employee = get_employee()
leave_type = 'Test Earned Leave Type'
Expand All @@ -422,13 +429,21 @@ def test_earned_leaves_creation(self):
rounding = 0.5,
max_leaves_allowed = 6
)).insert()

leave_policy = frappe.get_doc({
"doctype": "Leave Policy",
"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, 0, eligible_leaves = 12)
data = {
"assignment_based_on": "Leave Period",
"leave_policy": leave_policy.name,
"leave_period": leave_period.name
}

leave_policy_assignments = create_assignment_for_multiple_employees([employee.name], frappe._dict(data))

frappe.get_doc("Leave Policy Assignment", leave_policy_assignments[0]).grant_leave_alloc_for_employee()

from erpnext.hr.utils import allocate_earned_leaves
i = 0
Expand Down Expand Up @@ -620,6 +635,8 @@ def allocate_leaves(employee, leave_period, leave_type, new_leaves_allocated, el
"leave_type": leave_type,
"from_date": leave_period.from_date,
"to_date": leave_period.to_date,
"leave_policy": leave_policy,
"leave_policy_assignment": leave_policy_assignment,
"new_leaves_allocated": new_leaves_allocated,
"docstatus": 1
}).insert()
Expand Down
18 changes: 14 additions & 4 deletions erpnext/hr/doctype/leave_encashment/test_leave_encashment.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,15 @@
from erpnext.hr.doctype.employee.test_employee import make_employee
from erpnext.payroll.doctype.salary_structure.test_salary_structure import make_salary_structure
from erpnext.hr.doctype.leave_period.test_leave_period import create_leave_period
from erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment import create_assignment_for_multiple_employees
from erpnext.hr.doctype.leave_policy.test_leave_policy import create_leave_policy\

test_dependencies = ["Leave Type"]

class TestLeaveEncashment(unittest.TestCase):
def setUp(self):
frappe.db.sql('''delete from `tabLeave Period`''')
frappe.db.sql('''delete from `tabLeave Policy Assignment`''')
frappe.db.sql('''delete from `tabLeave Allocation`''')
frappe.db.sql('''delete from `tabLeave Ledger Entry`''')
frappe.db.sql('''delete from `tabAdditional Salary`''')
Expand All @@ -29,14 +31,22 @@ def setUp(self):
# create employee, salary structure and assignment
self.employee = make_employee("test_employee_encashment@example.com")

frappe.db.set_value("Employee", self.employee, "leave_policy", leave_policy.name)
self.leave_period = create_leave_period(add_months(today(), -3), add_months(today(), 3))

data = {
"assignment_based_on": "Leave Period",
"leave_policy": leave_policy.name,
"leave_period": self.leave_period.name
}

leave_policy_assignments = create_assignment_for_multiple_employees([self.employee], frappe._dict(data))

salary_structure = make_salary_structure("Salary Structure for Encashment", "Monthly", self.employee,
other_details={"leave_encashment_amount_per_day": 50})

# create the leave period and assign the leaves
self.leave_period = create_leave_period(add_months(today(), -3), add_months(today(), 3))
self.leave_period.grant_leave_allocation(employee=self.employee)
#grant Leaves
frappe.get_doc("Leave Policy Assignment", leave_policy_assignments[0]).grant_leave_alloc_for_employee()


def test_leave_balance_value_and_amount(self):
frappe.db.sql('''delete from `tabLeave Encashment`''')
Expand Down
31 changes: 1 addition & 30 deletions erpnext/hr/doctype/leave_period/test_leave_period.py
Original file line number Diff line number Diff line change
Expand Up @@ -12,36 +12,7 @@
test_dependencies = ["Employee", "Leave Type", "Leave Policy"]

class TestLeavePeriod(unittest.TestCase):
def setUp(self):
frappe.db.sql("delete from `tabLeave Period`")

def test_leave_grant(self):
leave_type = "_Test Leave Type"

# create the leave policy
leave_policy = frappe.get_doc({
"doctype": "Leave Policy",
"leave_policy_details": [{
"leave_type": leave_type,
"annual_allocation": 20
}]
}).insert()
leave_policy.submit()

# create employee and assign the leave period
employee = "test_leave_period@employee.com"
employee_doc_name = make_employee(employee)
frappe.db.set_value("Employee", employee_doc_name, "leave_policy", leave_policy.name)

# clear the already allocated leave
frappe.db.sql('''delete from `tabLeave Allocation` where employee=%s''', "test_leave_period@employee.com")

# create the leave period
leave_period = create_leave_period(add_months(today(), -3), add_months(today(), 3))

# test leave_allocation
leave_period.grant_leave_allocation(employee=employee_doc_name)
self.assertEqual(get_leave_balance_on(employee_doc_name, leave_type, today()), 20)
pass

def create_leave_period(from_date, to_date, company=None):
leave_period = frappe.db.get_value('Leave Period',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,20 @@
from frappe.utils import getdate, date_diff, comma_and, formatdate
from math import ceil
import json
from six import string_types

class LeavePolicyAssignment(Document):

def validate(self):
self.validate_policy_assignment_overlap()
self.set_dates()

def set_dates(self):
if self.assignment_based_on == "Leave Period":
self.effective_from = frappe.db.get_value("Leave Period", self.leave_period, "from_date")
self.effective_to = frappe.db.get_value("Leave Period", self.leave_period, "to_date")
elif self.assignment_based_on == "Joining Date":
self.effective_from = frappe.db.get_value("Employee", self.employee, "date_of_joining")

def validate_policy_assignment_overlap(self):
leave_policy_assignments = frappe.db.sql("""
Expand Down Expand Up @@ -103,20 +112,29 @@ def grant_leave_for_multiple_employees(leave_policy_assignments):

@frappe.whitelist()
def create_assignment_for_multiple_employees(employees, data):
employees= json.loads(employees)
data = frappe._dict(json.loads(data))

if isinstance(employees, string_types):
employees= json.loads(employees)

if isinstance(employees, string_types):
data = frappe._dict(json.loads(data))

docs_name = []
for employee in employees:
assignment = frappe.new_doc("Leave Policy Assignment")
assignment.employee = employee
assignment.assignment_based_on = data.assignment_based_on
assignment.leave_policy = data.leave_policy
assignment.effective_from = getdate(data.effective_from)
assignment.effective_to = getdate(data.effective_to)
assignment.effective_from = getdate(data.effective_from) or None
assignment.effective_to = getdate(data.effective_to) or None
assignment.leave_period = data.leave_period or None
assignment.carry_forward = data.carry_forward

assignment.save()
assignment.submit()
docs_name.append(assignment.name)
return docs_name


def automatic_allocate_leaves_based_on_leave_policy():
today = getdate()
Expand Down
6 changes: 5 additions & 1 deletion erpnext/hr/utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -311,7 +311,6 @@ def allocate_earned_leaves():
from_date = frappe.db.get_value("Employee", allocation.employee, "date_of_joining")

if check_frequency_hit(from_date, today, e_leave_type.earned_leave_frequency, e_leave_type.based_on_date_of_joining_date):

if annual_allocation:
earned_leaves = flt(annual_allocation) / divide_by_frequency[e_leave_type.earned_leave_frequency]
if e_leave_type.rounding == "0.5":
Expand Down Expand Up @@ -377,6 +376,11 @@ def check_frequency_hit(from_date, to_date, frequency, based_on_date_of_joining_
elif frequency == "Yearly" and rd.months % 12:
return True

if frappe.flags.in_test:
return True

return False


def get_salary_assignment(employee, date):
assignment = frappe.db.sql("""
Expand Down

0 comments on commit 53bb95e

Please sign in to comment.