mirror of
https://github.com/frappe/erpnext.git
synced 2026-05-27 17:04:47 +00:00
test: leave, expense, shift request approver permissions
This commit is contained in:
@@ -110,6 +110,33 @@ class TestExpenseClaim(unittest.TestCase):
|
|||||||
gl_entry = frappe.get_all('GL Entry', {'voucher_type': 'Expense Claim', 'voucher_no': expense_claim.name})
|
gl_entry = frappe.get_all('GL Entry', {'voucher_type': 'Expense Claim', 'voucher_no': expense_claim.name})
|
||||||
self.assertEquals(len(gl_entry), 0)
|
self.assertEquals(len(gl_entry), 0)
|
||||||
|
|
||||||
|
def test_expense_approver_perms(self):
|
||||||
|
user = "test_approver_perm_emp@example.com"
|
||||||
|
approver = make_employee(user, "_Test Company")
|
||||||
|
|
||||||
|
# check doc shared
|
||||||
|
payable_account = get_payable_account("_Test Company")
|
||||||
|
expense_claim = make_expense_claim(payable_account, 300, 200, "_Test Company", "Travel Expenses - _TC", do_not_submit=True)
|
||||||
|
expense_claim.expense_approver = user
|
||||||
|
expense_claim.save()
|
||||||
|
self.assertTrue(expense_claim.name in frappe.share.get_shared("Expense Claim", user))
|
||||||
|
|
||||||
|
# check shared doc revoked
|
||||||
|
expense_claim.reload()
|
||||||
|
expense_claim.expense_approver = "test@example.com"
|
||||||
|
expense_claim.save()
|
||||||
|
self.assertTrue(expense_claim.name not in frappe.share.get_shared("Expense Claim", user))
|
||||||
|
|
||||||
|
expense_claim.reload()
|
||||||
|
expense_claim.expense_approver = user
|
||||||
|
expense_claim.save()
|
||||||
|
|
||||||
|
frappe.set_user(user)
|
||||||
|
expense_claim.reload()
|
||||||
|
expense_claim.status = "Approved"
|
||||||
|
expense_claim.submit()
|
||||||
|
|
||||||
|
|
||||||
def get_payable_account(company):
|
def get_payable_account(company):
|
||||||
return frappe.get_cached_value('Company', company, 'default_payable_account')
|
return frappe.get_cached_value('Company', company, 'default_payable_account')
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,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_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_allocation.test_leave_allocation import create_leave_allocation
|
||||||
from erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment import create_assignment_for_multiple_employees
|
from erpnext.hr.doctype.leave_policy_assignment.leave_policy_assignment import create_assignment_for_multiple_employees
|
||||||
|
from erpnext.hr.doctype.employee.test_employee import make_employee
|
||||||
|
|
||||||
test_dependencies = ["Leave Allocation", "Leave Block List", "Employee"]
|
test_dependencies = ["Leave Allocation", "Leave Block List", "Employee"]
|
||||||
|
|
||||||
@@ -565,6 +566,46 @@ class TestLeaveApplication(unittest.TestCase):
|
|||||||
|
|
||||||
self.assertEquals(get_leave_balance_on(employee.name, leave_type.name, add_days(nowdate(), -85), add_days(nowdate(), -84)), 0)
|
self.assertEquals(get_leave_balance_on(employee.name, leave_type.name, add_days(nowdate(), -85), add_days(nowdate(), -84)), 0)
|
||||||
|
|
||||||
|
def test_leave_approver_perms(self):
|
||||||
|
employee = get_employee()
|
||||||
|
user = "test_approver_perm_emp@example.com"
|
||||||
|
approver = make_employee(user, "_Test Company")
|
||||||
|
|
||||||
|
# set approver for employee
|
||||||
|
employee.reload()
|
||||||
|
employee.leave_approver = user
|
||||||
|
employee.save()
|
||||||
|
self.assertTrue("Leave Approver" in frappe.get_roles(user))
|
||||||
|
|
||||||
|
make_allocation_record(employee.name)
|
||||||
|
|
||||||
|
application = self.get_application(_test_records[0])
|
||||||
|
application.leave_approver = user
|
||||||
|
application.insert()
|
||||||
|
self.assertTrue(application.name in frappe.share.get_shared("Leave Application", user))
|
||||||
|
|
||||||
|
# check shared doc revoked
|
||||||
|
application.reload()
|
||||||
|
application.leave_approver = "test@example.com"
|
||||||
|
application.save()
|
||||||
|
self.assertTrue(application.name not in frappe.share.get_shared("Leave Application", user))
|
||||||
|
|
||||||
|
application.reload()
|
||||||
|
application.leave_approver = user
|
||||||
|
application.save()
|
||||||
|
|
||||||
|
frappe.set_user(user)
|
||||||
|
application.reload()
|
||||||
|
application.status = "Approved"
|
||||||
|
application.submit()
|
||||||
|
|
||||||
|
# unset leave approver
|
||||||
|
frappe.set_user("Administrator")
|
||||||
|
employee.reload()
|
||||||
|
employee.leave_approver = ""
|
||||||
|
employee.save()
|
||||||
|
|
||||||
|
|
||||||
def create_carry_forwarded_allocation(employee, leave_type):
|
def create_carry_forwarded_allocation(employee, leave_type):
|
||||||
# initial leave allocation
|
# initial leave allocation
|
||||||
leave_allocation = create_leave_allocation(
|
leave_allocation = create_leave_allocation(
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ from __future__ import unicode_literals
|
|||||||
import frappe
|
import frappe
|
||||||
import unittest
|
import unittest
|
||||||
from frappe.utils import nowdate, add_days
|
from frappe.utils import nowdate, add_days
|
||||||
|
from erpnext.hr.doctype.employee.test_employee import make_employee
|
||||||
|
|
||||||
test_dependencies = ["Shift Type"]
|
test_dependencies = ["Shift Type"]
|
||||||
|
|
||||||
@@ -19,19 +20,8 @@ class TestShiftRequest(unittest.TestCase):
|
|||||||
set_shift_approver(department)
|
set_shift_approver(department)
|
||||||
approver = frappe.db.sql("""select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""", (department))[0][0]
|
approver = frappe.db.sql("""select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""", (department))[0][0]
|
||||||
|
|
||||||
shift_request = frappe.get_doc({
|
shift_request = make_shift_request(approver)
|
||||||
"doctype": "Shift Request",
|
|
||||||
"shift_type": "Day Shift",
|
|
||||||
"company": "_Test Company",
|
|
||||||
"employee": "_T-Employee-00001",
|
|
||||||
"employee_name": "_Test Employee",
|
|
||||||
"from_date": nowdate(),
|
|
||||||
"to_date": add_days(nowdate(), 10),
|
|
||||||
"approver": approver,
|
|
||||||
"status": "Approved"
|
|
||||||
})
|
|
||||||
shift_request.insert()
|
|
||||||
shift_request.submit()
|
|
||||||
shift_assignments = frappe.db.sql('''
|
shift_assignments = frappe.db.sql('''
|
||||||
SELECT shift_request, employee
|
SELECT shift_request, employee
|
||||||
FROM `tabShift Assignment`
|
FROM `tabShift Assignment`
|
||||||
@@ -44,8 +34,65 @@ class TestShiftRequest(unittest.TestCase):
|
|||||||
shift_assignment_doc = frappe.get_doc("Shift Assignment", {"shift_request": d.get('shift_request')})
|
shift_assignment_doc = frappe.get_doc("Shift Assignment", {"shift_request": d.get('shift_request')})
|
||||||
self.assertEqual(shift_assignment_doc.docstatus, 2)
|
self.assertEqual(shift_assignment_doc.docstatus, 2)
|
||||||
|
|
||||||
|
def test_shift_request_approver_perms(self):
|
||||||
|
employee = frappe.get_doc("Employee", "_T-Employee-00001")
|
||||||
|
user = "test_approver_perm_emp@example.com"
|
||||||
|
approver = make_employee(user, "_Test Company")
|
||||||
|
|
||||||
|
# set approver for employee
|
||||||
|
employee.reload()
|
||||||
|
employee.shift_request_approver = user
|
||||||
|
employee.save()
|
||||||
|
|
||||||
|
shift_request = make_shift_request(user, do_not_submit=True)
|
||||||
|
self.assertTrue(shift_request.name in frappe.share.get_shared("Shift Request", user))
|
||||||
|
|
||||||
|
# check shared doc revoked
|
||||||
|
shift_request.reload()
|
||||||
|
department = frappe.get_value("Employee", "_T-Employee-00001", "department")
|
||||||
|
set_shift_approver(department)
|
||||||
|
department_approver = frappe.db.sql("""select approver from `tabDepartment Approver` where parent= %s and parentfield = 'shift_request_approver'""", (department))[0][0]
|
||||||
|
shift_request.approver = department_approver
|
||||||
|
shift_request.save()
|
||||||
|
self.assertTrue(shift_request.name not in frappe.share.get_shared("Shift Request", user))
|
||||||
|
|
||||||
|
shift_request.reload()
|
||||||
|
shift_request.approver = user
|
||||||
|
shift_request.save()
|
||||||
|
|
||||||
|
frappe.set_user(user)
|
||||||
|
shift_request.reload()
|
||||||
|
shift_request.status = "Approved"
|
||||||
|
shift_request.submit()
|
||||||
|
|
||||||
|
# unset approver
|
||||||
|
frappe.set_user("Administrator")
|
||||||
|
employee.reload()
|
||||||
|
employee.shift_request_approver = ""
|
||||||
|
employee.save()
|
||||||
|
|
||||||
|
|
||||||
def set_shift_approver(department):
|
def set_shift_approver(department):
|
||||||
department_doc = frappe.get_doc("Department", department)
|
department_doc = frappe.get_doc("Department", department)
|
||||||
department_doc.append('shift_request_approver',{'approver': "test1@example.com"})
|
department_doc.append('shift_request_approver',{'approver': "test1@example.com"})
|
||||||
department_doc.save()
|
department_doc.save()
|
||||||
department_doc.reload()
|
department_doc.reload()
|
||||||
|
|
||||||
|
def make_shift_request(approver, do_not_submit=0):
|
||||||
|
shift_request = frappe.get_doc({
|
||||||
|
"doctype": "Shift Request",
|
||||||
|
"shift_type": "Day Shift",
|
||||||
|
"company": "_Test Company",
|
||||||
|
"employee": "_T-Employee-00001",
|
||||||
|
"employee_name": "_Test Employee",
|
||||||
|
"from_date": nowdate(),
|
||||||
|
"to_date": add_days(nowdate(), 10),
|
||||||
|
"approver": approver,
|
||||||
|
"status": "Approved"
|
||||||
|
}).insert()
|
||||||
|
|
||||||
|
if do_not_submit:
|
||||||
|
return shift_request
|
||||||
|
|
||||||
|
shift_request.submit()
|
||||||
|
return shift_request
|
||||||
Reference in New Issue
Block a user