refactor: clean-up gratuity tests
This commit is contained in:
parent
b81d7519c1
commit
6c66bbbbfe
@ -5,10 +5,11 @@ import unittest
|
||||
|
||||
import frappe
|
||||
from frappe.tests.utils import FrappeTestCase
|
||||
from frappe.utils import add_days, add_months, flt, get_datetime, get_first_day, getdate
|
||||
from frappe.utils import add_days, add_months, floor, flt, get_datetime, get_first_day, getdate
|
||||
|
||||
from erpnext.hr.doctype.employee.test_employee import make_employee
|
||||
from erpnext.hr.doctype.expense_claim.test_expense_claim import get_payable_account
|
||||
from erpnext.hr.doctype.holiday_list.test_holiday_list import set_holiday_list
|
||||
from erpnext.payroll.doctype.gratuity.gratuity import get_last_salary_slip
|
||||
from erpnext.payroll.doctype.salary_slip.test_salary_slip import (
|
||||
make_deduction_salary_component,
|
||||
@ -32,32 +33,38 @@ class TestGratuity(FrappeTestCase):
|
||||
)
|
||||
make_deduction_salary_component(setup=True, test_tax=True, company_list=["_Test Company"])
|
||||
|
||||
@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
|
||||
def test_get_last_salary_slip_should_return_none_for_new_employee(self):
|
||||
new_employee = make_employee("new_employee@salary.com", company="_Test Company")
|
||||
salary_slip = get_last_salary_slip(new_employee)
|
||||
assert salary_slip is None
|
||||
self.assertIsNone(salary_slip)
|
||||
|
||||
def test_check_gratuity_amount_based_on_current_slab_and_additional_salary_creation(self):
|
||||
employee, sal_slip = create_employee_and_get_last_salary_slip()
|
||||
@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
|
||||
def test_gratuity_based_on_current_slab_via_additional_salary(self):
|
||||
"""
|
||||
Range | Fraction
|
||||
5-0 | 1
|
||||
"""
|
||||
doj = add_days(getdate(), -(6 * 365))
|
||||
relieving_date = getdate()
|
||||
|
||||
employee = make_employee(
|
||||
"test_employee_gratuity@salary.com",
|
||||
company="_Test Company",
|
||||
date_of_joining=doj,
|
||||
relieving_date=relieving_date,
|
||||
)
|
||||
sal_slip = create_salary_slip("test_employee_gratuity@salary.com")
|
||||
|
||||
rule = get_gratuity_rule("Rule Under Unlimited Contract on termination (UAE)")
|
||||
gratuity = create_gratuity(pay_via_salary_slip=1, employee=employee, rule=rule.name)
|
||||
|
||||
# work experience calculation
|
||||
date_of_joining, relieving_date = frappe.db.get_value(
|
||||
"Employee", employee, ["date_of_joining", "relieving_date"]
|
||||
)
|
||||
employee_total_workings_days = (
|
||||
get_datetime(relieving_date) - get_datetime(date_of_joining)
|
||||
).days
|
||||
employee_total_workings_days = (get_datetime(relieving_date) - get_datetime(doj)).days
|
||||
experience = floor(employee_total_workings_days / rule.total_working_days_per_year)
|
||||
self.assertEqual(gratuity.current_work_experience, experience)
|
||||
|
||||
experience = employee_total_workings_days / rule.total_working_days_per_year
|
||||
gratuity.reload()
|
||||
from math import floor
|
||||
|
||||
self.assertEqual(floor(experience), gratuity.current_work_experience)
|
||||
|
||||
# amount Calculation
|
||||
# amount calculation
|
||||
component_amount = frappe.get_all(
|
||||
"Salary Detail",
|
||||
filters={
|
||||
@ -67,18 +74,15 @@ class TestGratuity(FrappeTestCase):
|
||||
"salary_component": "Basic Salary",
|
||||
},
|
||||
fields=["amount"],
|
||||
limit=1,
|
||||
)
|
||||
|
||||
""" 5 - 0 fraction is 1 """
|
||||
|
||||
gratuity_amount = component_amount[0].amount * experience
|
||||
gratuity.reload()
|
||||
|
||||
self.assertEqual(flt(gratuity_amount, 2), flt(gratuity.amount, 2))
|
||||
|
||||
# additional salary creation (Pay via salary slip)
|
||||
self.assertTrue(frappe.db.exists("Additional Salary", {"ref_docname": gratuity.name}))
|
||||
|
||||
# gratuity should be marked "Paid" on the next salary slip submission
|
||||
salary_slip = make_salary_slip("Test Gratuity", employee=employee)
|
||||
salary_slip.posting_date = getdate()
|
||||
salary_slip.insert()
|
||||
@ -87,8 +91,27 @@ class TestGratuity(FrappeTestCase):
|
||||
gratuity.reload()
|
||||
self.assertEqual(gratuity.status, "Paid")
|
||||
|
||||
def test_check_gratuity_amount_based_on_all_previous_slabs(self):
|
||||
employee, sal_slip = create_employee_and_get_last_salary_slip()
|
||||
@set_holiday_list("Salary Slip Test Holiday List", "_Test Company")
|
||||
def test_gratuity_based_on_all_previous_slabs_via_payment_entry(self):
|
||||
"""
|
||||
Range | Fraction
|
||||
0-1 | 0
|
||||
1-5 | 0.7
|
||||
5-0 | 1
|
||||
"""
|
||||
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
|
||||
|
||||
doj = add_days(getdate(), -(6 * 365))
|
||||
relieving_date = getdate()
|
||||
|
||||
employee = make_employee(
|
||||
"test_employee_gratuity@salary.com",
|
||||
company="_Test Company",
|
||||
date_of_joining=doj,
|
||||
relieving_date=relieving_date,
|
||||
)
|
||||
|
||||
sal_slip = create_salary_slip("test_employee_gratuity@salary.com")
|
||||
rule = get_gratuity_rule("Rule Under Limited Contract (UAE)")
|
||||
set_mode_of_payment_account()
|
||||
|
||||
@ -97,22 +120,11 @@ class TestGratuity(FrappeTestCase):
|
||||
)
|
||||
|
||||
# work experience calculation
|
||||
date_of_joining, relieving_date = frappe.db.get_value(
|
||||
"Employee", employee, ["date_of_joining", "relieving_date"]
|
||||
)
|
||||
employee_total_workings_days = (
|
||||
get_datetime(relieving_date) - get_datetime(date_of_joining)
|
||||
).days
|
||||
employee_total_workings_days = (get_datetime(relieving_date) - get_datetime(doj)).days
|
||||
experience = floor(employee_total_workings_days / rule.total_working_days_per_year)
|
||||
self.assertEqual(gratuity.current_work_experience, experience)
|
||||
|
||||
experience = employee_total_workings_days / rule.total_working_days_per_year
|
||||
|
||||
gratuity.reload()
|
||||
|
||||
from math import floor
|
||||
|
||||
self.assertEqual(floor(experience), gratuity.current_work_experience)
|
||||
|
||||
# amount Calculation
|
||||
# amount calculation
|
||||
component_amount = frappe.get_all(
|
||||
"Salary Detail",
|
||||
filters={
|
||||
@ -122,35 +134,22 @@ class TestGratuity(FrappeTestCase):
|
||||
"salary_component": "Basic Salary",
|
||||
},
|
||||
fields=["amount"],
|
||||
limit=1,
|
||||
)
|
||||
|
||||
""" range | Fraction
|
||||
0-1 | 0
|
||||
1-5 | 0.7
|
||||
5-0 | 1
|
||||
"""
|
||||
|
||||
gratuity_amount = ((0 * 1) + (4 * 0.7) + (1 * 1)) * component_amount[0].amount
|
||||
gratuity.reload()
|
||||
|
||||
self.assertEqual(flt(gratuity_amount, 2), flt(gratuity.amount, 2))
|
||||
self.assertEqual(gratuity.status, "Unpaid")
|
||||
|
||||
from erpnext.accounts.doctype.payment_entry.payment_entry import get_payment_entry
|
||||
pe = get_payment_entry("Gratuity", gratuity.name)
|
||||
pe.reference_no = "123467"
|
||||
pe.reference_date = getdate()
|
||||
pe.submit()
|
||||
|
||||
pay_entry = get_payment_entry("Gratuity", gratuity.name)
|
||||
pay_entry.reference_no = "123467"
|
||||
pay_entry.reference_date = getdate()
|
||||
pay_entry.save()
|
||||
pay_entry.submit()
|
||||
gratuity.reload()
|
||||
|
||||
self.assertEqual(gratuity.status, "Paid")
|
||||
self.assertEqual(flt(gratuity.paid_amount, 2), flt(gratuity.amount, 2))
|
||||
|
||||
def tearDown(self):
|
||||
frappe.db.rollback()
|
||||
|
||||
|
||||
def get_gratuity_rule(name):
|
||||
rule = frappe.db.exists("Gratuity Rule", name)
|
||||
@ -160,7 +159,6 @@ def get_gratuity_rule(name):
|
||||
rule.applicable_earnings_component = []
|
||||
rule.append("applicable_earnings_component", {"salary_component": "Basic Salary"})
|
||||
rule.save()
|
||||
rule.reload()
|
||||
|
||||
return rule
|
||||
|
||||
@ -215,29 +213,17 @@ def create_account():
|
||||
).insert(ignore_permissions=True)
|
||||
|
||||
|
||||
def create_employee_and_get_last_salary_slip():
|
||||
employee = make_employee("test_employee@salary.com", company="_Test Company")
|
||||
frappe.db.set_value("Employee", employee, "relieving_date", getdate())
|
||||
frappe.db.set_value("Employee", employee, "date_of_joining", add_days(getdate(), -(6 * 365)))
|
||||
def create_salary_slip(employee):
|
||||
if not frappe.db.exists("Salary Slip", {"employee": employee}):
|
||||
posting_date = get_first_day(add_months(getdate(), -1))
|
||||
salary_slip = make_employee_salary_slip(
|
||||
"test_employee@salary.com", "Monthly", "Test Gratuity", posting_date=posting_date
|
||||
employee, "Monthly", "Test Gratuity", posting_date=posting_date
|
||||
)
|
||||
salary_slip.start_date = posting_date
|
||||
salary_slip.end_date = None
|
||||
salary_slip.save()
|
||||
salary_slip.submit()
|
||||
salary_slip = salary_slip.name
|
||||
else:
|
||||
salary_slip = get_last_salary_slip(employee)
|
||||
|
||||
if not frappe.db.get_value("Employee", "test_employee@salary.com", "holiday_list"):
|
||||
from erpnext.payroll.doctype.salary_slip.test_salary_slip import make_holiday_list
|
||||
|
||||
make_holiday_list()
|
||||
frappe.db.set_value(
|
||||
"Company", "_Test Company", "default_holiday_list", "Salary Slip Test Holiday List"
|
||||
)
|
||||
|
||||
return employee, salary_slip
|
||||
return salary_slip
|
||||
|
Loading…
x
Reference in New Issue
Block a user