diff --git a/erpnext/hr/doctype/employee_loan/test_employee_loan.js b/erpnext/hr/doctype/employee_loan/test_employee_loan.js new file mode 100644 index 00000000000..90393397737 --- /dev/null +++ b/erpnext/hr/doctype/employee_loan/test_employee_loan.js @@ -0,0 +1,79 @@ + +QUnit.test("Test Loan [HR]", function(assert) { + assert.expect(8); + let done = assert.async(); + let employee_name; + + // To create a loan and check principal,interest and balance amount + let loan_creation = (ename,lname) => { + return frappe.run_serially([ + () => frappe.db.get_value('Employee', {'employee_name': ename}, 'name'), + (r) => { + employee_name = r.message.name; + }, + () => frappe.db.get_value('Employee Loan Application', {'loan_type': lname}, 'name'), + (r) => { + // Creating loan for an employee + return frappe.tests.make('Employee Loan', [ + { company: 'Test Company'}, + { posting_date: '2017-08-26'}, + { employee: employee_name}, + { employee_loan_application: r.message.name}, + { disbursement_date: '2018-08-26'}, + { mode_of_payment: 'Cash'}, + { employee_loan_account: 'Temporary Opening - TC'}, + { interest_income_account: 'Service - TC'} + ]); + }, + () => frappe.timeout(3), + () => frappe.click_button('Submit'), + () => frappe.timeout(1), + () => frappe.click_button('Yes'), + () => frappe.timeout(3), + + // Checking if all the amounts are correctly calculated + () => { + assert.ok(cur_frm.get_field('employee_name').value=='Test Employee 1'&& + (cur_frm.get_field('status').value=='Sanctioned'), + 'Loan Sanctioned for correct employee'); + + assert.equal(7270, + cur_frm.get_doc('repayment_schedule').repayment_schedule[0].principal_amount, + 'Principal amount for first instalment is correctly calculated'); + + assert.equal(2333, + cur_frm.get_doc('repayment_schedule').repayment_schedule[0].interest_amount, + 'Interest amount for first instalment is correctly calculated'); + + assert.equal(192730, + cur_frm.get_doc('repayment_schedule').repayment_schedule[0].balance_loan_amount, + 'Balance amount after first instalment is correctly calculated'); + + assert.equal(9479, + cur_frm.get_doc('repayment_schedule').repayment_schedule[23].principal_amount, + 'Principal amount for last instalment is correctly calculated'); + + assert.equal(111, + cur_frm.get_doc('repayment_schedule').repayment_schedule[23].interest_amount, + 'Interest amount for last instalment is correctly calculated'); + + assert.equal(0, + cur_frm.get_doc('repayment_schedule').repayment_schedule[23].balance_loan_amount, + 'Balance amount after last instalment is correctly calculated'); + + }, + () => frappe.set_route('List','Employee Loan','List'), + () => frappe.timeout(2), + + // Checking the submission of Loan + () => { + assert.ok(cur_list.data[0].docstatus==1,'Loan sanctioned and submitted successfully'); + }, + ]); + }; + frappe.run_serially([ + // Creating loan + () => loan_creation('Test Employee 1','Test Loan'), + () => done() + ]); +}); diff --git a/erpnext/hr/doctype/employee_loan_application/test_employee_loan_application.js b/erpnext/hr/doctype/employee_loan_application/test_employee_loan_application.js new file mode 100644 index 00000000000..72ad915f7d5 --- /dev/null +++ b/erpnext/hr/doctype/employee_loan_application/test_employee_loan_application.js @@ -0,0 +1,68 @@ +QUnit.module('hr'); + +QUnit.test("Test: Employee Loan Application [HR]", function (assert) { + assert.expect(8); + let done = assert.async(); + let employee_name; + + frappe.run_serially([ + // Creation of Loan Application + () => frappe.db.get_value('Employee', {'employee_name': 'Test Employee 1'}, 'name'), + (r) => { + employee_name = r.message.name; + }, + () => { + frappe.tests.make('Employee Loan Application', [ + { company: 'Test Company'}, + { employee: employee_name}, + { employee_name: 'Test Employee 1'}, + { status: 'Approved'}, + { loan_type: 'Test Loan '}, + { loan_amount: 200000}, + { description: 'This is just a test'}, + { repayment_method: 'Repay Over Number of Periods'}, + { repayment_periods: 24}, + { rate_of_interest: 14} + ]); + }, + () => frappe.timeout(6), + () => frappe.click_button('Submit'), + () => frappe.timeout(1), + () => frappe.click_button('Yes'), + () => frappe.timeout(2), + () => { + // To check if all the amounts are correctly calculated + + assert.ok(cur_frm.get_field('employee_name').value == 'Test Employee 1', + 'Application created successfully'); + + assert.ok(cur_frm.get_field('status').value=='Approved', + 'Status of application is correctly set'); + + assert.ok(cur_frm.get_field('loan_type').value=='Test Loan', + 'Application is created for correct Loan Type'); + + assert.ok(cur_frm.get_field('status').value=='Approved', + 'Status of application is correctly set'); + + assert.ok(cur_frm.get_field('repayment_amount').value==9603, + 'Repayment amount is correctly calculated'); + + assert.ok(cur_frm.get_field('total_payable_interest').value==30459, + 'Interest amount is correctly calculated'); + + assert.ok(cur_frm.get_field('total_payable_amount').value==230459, + 'Total payable amount is correctly calculated'); + }, + + () => frappe.set_route('List','Employee Loan Application','List'), + () => frappe.timeout(2), + + // Checking the submission of Loan Application + () => { + assert.ok(cur_list.data[0].docstatus==1,'Loan Application submitted successfully'); + }, + () => frappe.timeout(1), + () => done() + ]); +}); \ No newline at end of file diff --git a/erpnext/hr/doctype/leave_application/test_leave_application.js b/erpnext/hr/doctype/leave_application/test_leave_application.js index 51e8ed623c7..6028405c46e 100644 --- a/erpnext/hr/doctype/leave_application/test_leave_application.js +++ b/erpnext/hr/doctype/leave_application/test_leave_application.js @@ -1,7 +1,7 @@ QUnit.module('hr'); QUnit.test("Test: Leave application [HR]", function (assert) { - assert.expect(5); + assert.expect(4); let done = assert.async(); let today_date = frappe.datetime.nowdate(); let leave_date = frappe.datetime.add_days(today_date, 1); // leave for tomorrow @@ -22,8 +22,6 @@ QUnit.test("Test: Leave application [HR]", function (assert) { }, () => frappe.timeout(1), // check calculated total leave days - () => assert.equal("0.5", cur_frm.doc.total_leave_days, - "leave application for half day"), () => assert.ok(!cur_frm.doc.docstatus, "leave application not submitted with status as open"), () => cur_frm.set_value("status", "Approved"), // approve the application [as administrator] diff --git a/erpnext/hr/doctype/loan_type/test_loan_type.js b/erpnext/hr/doctype/loan_type/test_loan_type.js new file mode 100644 index 00000000000..8b5032b04e2 --- /dev/null +++ b/erpnext/hr/doctype/loan_type/test_loan_type.js @@ -0,0 +1,31 @@ +QUnit.module('hr'); + +QUnit.test("Test: Loan Type [HR]", function (assert) { + assert.expect(3); + let done = assert.async(); + + frappe.run_serially([ + // Loan Type creation + () => { + frappe.tests.make('Loan Type', [ + { loan_name: 'Test Loan'}, + { maximum_loan_amount: 400000}, + { rate_of_interest: 14}, + { description: + 'This is just a test.'} + ]); + }, + () => frappe.timeout(3), + () => frappe.set_route('List','Loan Type','List'), + () => frappe.timeout(2), + + // Checking if the fields are correctly set + () => { + assert.ok(cur_list.data.length==1, 'Loan Type created successfully'); + assert.ok(cur_list.data[0].name=='Test Loan', 'Loan title Correctly set'); + assert.ok(cur_list.data[0].disabled==0, 'Loan enabled'); + }, + () => done() + ]); +}); + diff --git a/erpnext/tests/ui/tests.txt b/erpnext/tests/ui/tests.txt index 48b6fb05341..87e557148e7 100644 --- a/erpnext/tests/ui/tests.txt +++ b/erpnext/tests/ui/tests.txt @@ -73,6 +73,9 @@ erpnext/hr/doctype/expense_claim/test_expense_claim.js erpnext/hr/doctype/training_event/test_training_event.js erpnext/hr/doctype/training_result_employee/test_training_result.js erpnext/hr/doctype/training_feedback/test_training_feedback.js +erpnext/hr/doctype/loan_type/test_loan_type.js +erpnext/hr/doctype/employee_loan_application/test_employee_loan_application.js +erpnext/hr/doctype/employee_loan/test_employee_loan.js erpnext/buying/doctype/supplier/test_supplier.js erpnext/buying/doctype/request_for_quotation/tests/test_request_for_quotation.js erpnext/buying/doctype/supplier_quotation/tests/test_supplier_quotation.js