Tests for Loan (#10557)
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 0000000..9039339
--- /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 0000000..72ad915
--- /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 51e8ed6..6028405 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 @@
},
() => 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 0000000..8b5032b
--- /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 48b6fb0..87e5571 100644
--- a/erpnext/tests/ui/tests.txt
+++ b/erpnext/tests/ui/tests.txt
@@ -73,6 +73,9 @@
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