def test_creation_of_leave_ledger_entry_on_submit(self):
        ''' check creation of leave ledger entry on submission of leave request '''
        employee = get_employee()
        mark_attendance(employee)
        compensatory_leave_request = get_compensatory_leave_request(
            employee.name)
        compensatory_leave_request.submit()

        filters = dict(
            transaction_name=compensatory_leave_request.leave_allocation)
        leave_ledger_entry = frappe.get_all('Leave Ledger Entry',
                                            fields='*',
                                            filters=filters)

        self.assertEqual(len(leave_ledger_entry), 1)
        self.assertEqual(leave_ledger_entry[0].employee,
                         compensatory_leave_request.employee)
        self.assertEqual(leave_ledger_entry[0].leave_type,
                         compensatory_leave_request.leave_type)
        self.assertEqual(leave_ledger_entry[0].leaves, 1)

        # check reverse leave ledger entry on cancellation
        compensatory_leave_request.cancel()
        leave_ledger_entry = frappe.get_all('Leave Ledger Entry',
                                            fields='*',
                                            filters=filters,
                                            order_by='creation desc')

        self.assertEqual(len(leave_ledger_entry), 2)
        self.assertEqual(leave_ledger_entry[0].employee,
                         compensatory_leave_request.employee)
        self.assertEqual(leave_ledger_entry[0].leave_type,
                         compensatory_leave_request.leave_type)
        self.assertEqual(leave_ledger_entry[0].leaves, -1)
    def test_leave_allocation_update_on_submit(self):
        employee = get_employee()
        mark_attendance(employee, date=add_days(today(), -1))
        compensatory_leave_request = get_compensatory_leave_request(
            employee.name, leave_date=add_days(today(), -1))
        compensatory_leave_request.submit()

        # leave allocation creation on submit
        leaves_allocated = frappe.db.get_value(
            'Leave Allocation',
            {'name': compensatory_leave_request.leave_allocation},
            ['total_leaves_allocated'])
        self.assertEqual(leaves_allocated, 1)

        mark_attendance(employee)
        compensatory_leave_request = get_compensatory_leave_request(
            employee.name)
        compensatory_leave_request.submit()

        # leave allocation updates on submission of second compensatory leave request
        leaves_allocated = frappe.db.get_value(
            'Leave Allocation',
            {'name': compensatory_leave_request.leave_allocation},
            ['total_leaves_allocated'])
        self.assertEqual(leaves_allocated, 2)
    def setUp(self):
        frappe.db.sql(''' delete from `tabCompensatory Leave Request`''')
        frappe.db.sql(''' delete from `tabLeave Ledger Entry`''')
        frappe.db.sql(''' delete from `tabLeave Allocation`''')
        frappe.db.sql(
            ''' delete from `tabAttendance` where attendance_date in {0} '''.
            format((today(), add_days(today(), -1))))  #nosec
        create_leave_period(add_months(today(), -3), add_months(today(), 3),
                            "_Test Company")
        create_holiday_list()

        employee = get_employee()
        employee.holiday_list = "_Test Compensatory Leave"
        employee.save()
    def test_leave_balance_on_submit(self):
        ''' check creation of leave allocation on submission of compensatory leave request '''
        employee = get_employee()
        mark_attendance(employee)
        compensatory_leave_request = get_compensatory_leave_request(
            employee.name)

        before = get_leave_balance_on(employee.name,
                                      compensatory_leave_request.leave_type,
                                      today())
        compensatory_leave_request.submit()

        self.assertEqual(
            get_leave_balance_on(employee.name,
                                 compensatory_leave_request.leave_type,
                                 add_days(today(), 1)), before + 1)