Merge branch 'develop' into staging
diff --git a/erpnext/schools/doctype/assessment_group/test_assessment_group.js b/erpnext/schools/doctype/assessment_group/test_assessment_group.js
new file mode 100644
index 0000000..aa6da47
--- /dev/null
+++ b/erpnext/schools/doctype/assessment_group/test_assessment_group.js
@@ -0,0 +1,86 @@
+// School Assessment module
+QUnit.module('schools');
+
+QUnit.test('Test: Assessment Group', function(assert){
+ assert.expect(4);
+ let done = assert.async();
+
+ frappe.run_serially([
+ () => frappe.set_route('Tree', 'Assessment Group'),
+
+ // Checking adding child without selecting any Node
+ () => frappe.tests.click_button('New'),
+ () => frappe.timeout(0.2),
+ () => {assert.equal($(`.msgprint`).text(), "Select a group node first.", "Error message success");},
+ () => frappe.tests.click_button('Close'),
+ () => frappe.timeout(0.2),
+
+ // Creating child nodes
+ () => frappe.tests.click_link('All Assessment Groups'),
+ () => frappe.map_group.make('Assessment-group-1'),
+ () => frappe.map_group.make('Assessment-group-2'),
+ () => frappe.map_group.make('Assessment-group-3'),
+ () => frappe.map_group.make('Assessment-group-4', "All Assessment Groups", 1),
+ () => frappe.tests.click_link('Assessment-group-4'),
+ () => frappe.map_group.make('Assessment-group-5', "Assessment-group-3", 0),
+
+ // Checking Edit button
+ () => frappe.timeout(0.5),
+ () => frappe.tests.click_link('Assessment-group-1'),
+ () => frappe.tests.click_button('Edit'),
+ () => frappe.timeout(0.5),
+ () => {assert.deepEqual(frappe.get_route(), ["Form", "Assessment Group", "Assessment-group-1"], "Edit route checks");},
+
+ // Deleting child Node
+ () => frappe.set_route('Tree', 'Assessment Group'),
+ () => frappe.timeout(0.5),
+ () => frappe.tests.click_link('Assessment-group-1'),
+ () => frappe.tests.click_button('Delete'),
+ () => frappe.timeout(0.5),
+ () => frappe.tests.click_button('Yes'),
+
+ // Renaming Child node
+ () => frappe.timeout(0.5),
+ () => frappe.tests.click_link('Assessment-group-2'),
+ () => frappe.tests.click_button('Rename'),
+ () => frappe.timeout(0.4),
+ () => cur_dialog.set_value('new_name', 'Assessment-group-6'),
+ () => frappe.tests.click_button('Rename'),
+ () => frappe.tests.click_button('Close'),
+
+ // Merging 2 child nodes into 1
+ () => frappe.timeout(0.5),
+ () => frappe.tests.click_link('Assessment-group-6'),
+ () => frappe.tests.click_button('Rename'),
+ () => frappe.timeout(0.4),
+ () => cur_dialog.set_value('merge', 1),
+ () => cur_dialog.set_value('new_name', 'Assessment-group-3'),
+ () => frappe.tests.click_button('Rename'),
+ () => frappe.tests.click_button('Close'),
+
+ // Checking Collapse and Expand button
+ () => frappe.timeout(1),
+ () => frappe.tests.click_link('Assessment-group-4'),
+ () => frappe.click_button('Collapse'),
+ () => frappe.tests.click_link('All Assessment Groups'),
+ () => frappe.click_button('Collapse'),
+ () => {assert.ok($('.opened').size() == 0, 'Collapsed');},
+ () => frappe.click_button('Expand'),
+ () => {assert.ok($('.opened').size() > 0, 'Expanded');},
+
+ () => done()
+ ]);
+});
+
+frappe.map_group = {
+ make:function(assessment_group_name, parent_assessment_group = 'All Assessment Groups', is_group = 0){
+ return frappe.run_serially([
+ () => frappe.click_button('Add Child'),
+ () => frappe.timeout(0.2),
+ () => cur_dialog.set_value('is_group', is_group),
+ () => cur_dialog.set_value('assessment_group_name', assessment_group_name),
+ () => cur_dialog.set_value('parent_assessment_group', parent_assessment_group),
+ () => frappe.click_button('Create New'),
+ ]);
+ }
+};
\ No newline at end of file
diff --git a/erpnext/schools/doctype/assessment_plan/test_assessment_plan.js b/erpnext/schools/doctype/assessment_plan/test_assessment_plan.js
new file mode 100644
index 0000000..b75a41a
--- /dev/null
+++ b/erpnext/schools/doctype/assessment_plan/test_assessment_plan.js
@@ -0,0 +1,58 @@
+// Testing Assessment Module in Schools
+QUnit.module('schools');
+
+QUnit.test('Test: Assessment Plan', function(assert){
+ assert.expect(7);
+ let done = assert.async();
+ let room_name, instructor_name, assessment_name;
+
+ frappe.run_serially([
+ () => frappe.db.get_value('Room', {'room_name': 'Room 1'}, 'name'),
+ (room) => {room_name = room.message.name;}, // Fetching Room name
+ () => frappe.db.get_value('Instructor', {'instructor_name': 'Instructor 1'}, 'name'),
+ (instructor) => {instructor_name = instructor.message.name;}, // Fetching Instructor name
+
+ () => {
+ return frappe.tests.make('Assessment Plan', [
+ {assessment_name: "Test-Mid-Term"},
+ {assessment_group: 'Assessment-group-5'},
+ {maximum_assessment_score: 100},
+ {student_group: 'test-course-wise-group-2'},
+ {course: 'Test_Sub'},
+ {grading_scale: 'GTU'},
+ {schedule_date: frappe.datetime.nowdate()},
+ {room: room_name},
+ {examiner: instructor_name},
+ {supervisor: instructor_name},
+ {from_time: "12:30:00"},
+ {to_time: "2:30:00"}
+ ]);
+ },
+
+ () => {
+ assessment_name = cur_frm.doc.name; // Storing the name of current Assessment Plan
+ assert.equal(cur_frm.doc.assessment_criteria[0].assessment_criteria, 'Pass', 'Assessment Criteria auto-filled correctly');
+ assert.equal(cur_frm.doc.assessment_criteria[0].maximum_score, 100, 'Maximum score correctly set');
+ }, // Checking if the table was auto-filled upon selecting appropriate fields
+
+ () => frappe.timeout(1),
+ () => frappe.tests.click_button('Submit'),
+ () => frappe.timeout(0.5),
+ () => frappe.tests.click_button('Yes'),
+ () => frappe.timeout(0.5),
+ () => {assert.equal(cur_frm.doc.docstatus, 1, "Assessment Plan submitted successfully");},
+
+ () => frappe.click_button('Assessment Result'), // Checking out Assessment Result button option
+ () => frappe.timeout(0.5),
+ () => {
+ assert.deepEqual(frappe.get_route(), ["Form", "Assessment Result Tool"], 'Assessment Result properly linked');
+ assert.equal(cur_frm.doc.assessment_plan, assessment_name, 'Assessment correctly set');
+ assert.equal(cur_frm.doc.student_group, 'test-course-wise-group-2', 'Course for Assessment correctly set');
+ },
+ () => cur_frm.print_doc(),
+ () => frappe.timeout(1),
+ () => {assert.ok($('.btn-print-print').is(':visible'), "Print Format Available");},
+
+ () => done()
+ ]);
+});
\ No newline at end of file
diff --git a/erpnext/schools/doctype/assessment_result/test_assessment_result.js b/erpnext/schools/doctype/assessment_result/test_assessment_result.js
new file mode 100644
index 0000000..83aca6b
--- /dev/null
+++ b/erpnext/schools/doctype/assessment_result/test_assessment_result.js
@@ -0,0 +1,72 @@
+// School Assessment module
+QUnit.module('schools');
+
+QUnit.test('Test: Assessment Result', function(assert){
+ assert.expect(25);
+ let done = assert.async();
+ let student_list = [];
+ let assessment_name;
+ let tasks = []
+
+ frappe.run_serially([
+ // Saving Assessment Plan name
+ () => frappe.db.get_value('Assessment Plan', {'assessment_name': 'Test-Mid-Term'}, 'name'),
+ (assessment_plan) => {assessment_name = assessment_plan.message.name;},
+ // Fetching list of Student for which Result is supposed to be set
+ () => frappe.set_route('Form', 'Assessment Plan', assessment_name),
+ () => frappe.timeout(1),
+ () => frappe.tests.click_button('Assessment Result'),
+ () => frappe.timeout(1),
+ () => cur_frm.refresh(),
+ () => frappe.timeout(1),
+ () => {
+ for(i = 0; i < $('tbody tr').size() * 4; i = (i + 4))
+ student_list.push($(`tbody td:eq("${i}")`).text());
+ },
+
+ // Looping through each student in the list and setting up their score
+ () => {
+ student_list.forEach(index => {
+ tasks.push(
+ () => frappe.set_route('List', 'Assessment Result', 'List'),
+ () => frappe.timeout(0.5),
+ () => frappe.tests.click_button('New'),
+ () => frappe.timeout(0.5),
+ () => cur_frm.set_value('student', index),
+ () => cur_frm.set_value('assessment_plan', assessment_name),
+ () => frappe.timeout(0.2),
+ () => cur_frm.doc.details[0].score = (39 + (15 * student_list.indexOf(index))),
+ () => cur_frm.save(),
+ () => frappe.timeout(0.5),
+
+ () => frappe.db.get_value('Assessment Plan', {'name': 'ASP00001'}, ['grading_scale', 'maximum_assessment_score']),
+ (assessment_plan) => {
+ assert.equal(cur_frm.doc.grading_scale, assessment_plan.message.grading_scale, 'Grading scale correctly fetched');
+ assert.equal(cur_frm.doc.maximum_score, assessment_plan.message.maximum_assessment_score, 'Maximum score correctly fetched');
+
+ frappe.call({
+ method: "erpnext.schools.api.get_grade",
+ args: {
+ "grading_scale": assessment_plan.message.grading_scale,
+ "percentage": cur_frm.doc.total_score
+ },
+ callback: function(r){
+ assert.equal(cur_frm.doc.grade, r.message, "Grade correctly calculated");
+ }
+ });
+ },
+
+ () => frappe.tests.click_button('Submit'),
+ () => frappe.timeout(0.5),
+ () => frappe.tests.click_button('Yes'),
+ () => frappe.timeout(0.5),
+ () => {assert.equal();},
+ () => {assert.equal(cur_frm.doc.docstatus, 1, "Submitted successfully");},
+ );
+ });
+ return frappe.run_serially(tasks);
+ },
+
+ () => done()
+ ]);
+});
\ No newline at end of file
diff --git a/erpnext/schools/doctype/assessment_result_tool/test_assessment_result_tool.js b/erpnext/schools/doctype/assessment_result_tool/test_assessment_result_tool.js
new file mode 100644
index 0000000..7d9c7d3
--- /dev/null
+++ b/erpnext/schools/doctype/assessment_result_tool/test_assessment_result_tool.js
@@ -0,0 +1,29 @@
+// School Assessment module
+QUnit.module('schools');
+
+QUnit.test('Test: Assessment Result Tool', function(assert){
+ assert.expect(1);
+ let done = assert.async();
+ let i, count = 0, assessment_name;
+
+ frappe.run_serially([
+ // Saving Assessment Plan name
+ () => frappe.db.get_value('Assessment Plan', {'assessment_name': 'Test-Mid-Term'}, 'name'),
+ (assessment_plan) => {assessment_name = assessment_plan.message.name;},
+
+ () => frappe.set_route('Form', 'Assessment Plan', assessment_name),
+ () => frappe.timeout(1),
+ () => frappe.tests.click_button('Assessment Result'),
+ () => frappe.timeout(1),
+ () => cur_frm.refresh(),
+ () => frappe.timeout(1),
+ () => {
+ for(i = 2; i < $('tbody tr').size() * 4; i = (i + 4)){
+ if(($(`tbody td:eq("${i}")`) != "") && ($(`tbody td:eq("${i+1}")`) != ""))
+ count++;
+ }
+ assert.equal($('tbody tr').size(), count, 'All grades correctly displayed');
+ },
+ () => done()
+ ]);
+});
\ No newline at end of file
diff --git a/erpnext/schools/doctype/grading_scale/test_grading_scale.js b/erpnext/schools/doctype/grading_scale/test_grading_scale.js
index 6539343..c686924 100644
--- a/erpnext/schools/doctype/grading_scale/test_grading_scale.js
+++ b/erpnext/schools/doctype/grading_scale/test_grading_scale.js
@@ -2,13 +2,61 @@
QUnit.module('schools');
QUnit.test('Test: Grading Scale', function(assert){
- assert.expect(0);
+ assert.expect(3);
let done = assert.async();
frappe.run_serially([
() => {
return frappe.tests.make('Grading Scale', [
{grading_scale_name: 'GTU'},
- {description: 'The score will be set according to 10 based system.'},
+ {description: 'The score will be set according to 100 based system.'},
+ {intervals: [
+ [
+ {grade_code: 'AA'},
+ {threshold: '95'},
+ {grade_description: 'First Class + Distinction'}
+ ],
+ [
+ {grade_code: 'AB'},
+ {threshold: '90'},
+ {grade_description: 'First Class'}
+ ],
+ [
+ {grade_code: 'BB'},
+ {threshold: '80'},
+ {grade_description: 'Distinction'}
+ ],
+ [
+ {grade_code: 'BC'},
+ {threshold: '70'},
+ {grade_description: 'Second Class'}
+ ],
+ [
+ {grade_code: 'CC'},
+ {threshold: '60'},
+ {grade_description: 'Third Class'}
+ ],
+ [
+ {grade_code: 'CD'},
+ {threshold: '50'},
+ {grade_description: 'Average'}
+ ],
+ [
+ {grade_code: 'DD'},
+ {threshold: '40'},
+ {grade_description: 'Pass'}
+ ],
+ [
+ {grade_code: 'FF'},
+ {threshold: '0'},
+ {grade_description: 'Fail'}
+ ],
+ ]}
+ ]);
+ },
+ () => {
+ return frappe.tests.make('Grading Scale', [
+ {grading_scale_name: 'GTU-2'},
+ {description: 'The score will be set according to 100 based system.'},
{intervals: [
[
{grade_code: 'AA'},
@@ -23,6 +71,32 @@
]}
]);
},
+
+ () => {
+ let grading_scale = ['GTU', 'GTU-2'];
+ let tasks = [];
+ grading_scale.forEach(index => {
+ tasks.push(
+ () => frappe.set_route('Form', 'Grading Scale', index),
+ () => frappe.timeout(0.5),
+ () => frappe.tests.click_button('Submit'),
+ () => frappe.timeout(0.5),
+ () => frappe.tests.click_button('Yes'),
+ () => {assert.equal(cur_frm.doc.docstatus, 1, 'Submitted successfully');}
+ );
+ });
+ return frappe.run_serially(tasks);
+ },
+
+ () => frappe.timeout(1),
+ () => frappe.set_route('Form', 'Grading Scale','GTU-2'),
+ () => frappe.timeout(0.5),
+ () => frappe.tests.click_button('Cancel'),
+ () => frappe.timeout(0.5),
+ () => frappe.tests.click_button('Yes'),
+ () => frappe.timeout(0.5),
+ () => {assert.equal(cur_frm.doc.docstatus, 2, 'Cancelled successfully');},
+
() => done()
]);
});
\ No newline at end of file
diff --git a/erpnext/tests/ui/tests.txt b/erpnext/tests/ui/tests.txt
index fff54c6..5634935 100644
--- a/erpnext/tests/ui/tests.txt
+++ b/erpnext/tests/ui/tests.txt
@@ -72,4 +72,8 @@
erpnext/schools/doctype/student_attendance_tool/test_student_attendance_tool.js
erpnext/schools/doctype/student_attendance/test_student_attendance.js
erpnext/stock/doctype/stock_entry/tests/test_stock_entry_for_material_issue.js
-erpnext/buying/doctype/supplier/test_supplier.js
\ No newline at end of file
+erpnext/schools/doctype/assessment_group/test_assessment_group.js
+erpnext/schools/doctype/assessment_plan/test_assessment_plan.js
+erpnext/schools/doctype/assessment_result/test_assessment_result.js
+erpnext/schools/doctype/assessment_result_tool/test_assessment_result_tool.js
+erpnext/buying/doctype/supplier/test_supplier.js