[ui test] Setting up school course+program and their dependencies (#10142)

* setting up course and its dependencies

* rebasing with develop branch

* codacy fix

* added test for Program

* updated test-dada to maintain consistency with future tests
diff --git a/erpnext/schools/doctype/assessment_criteria/test_assessment_criteria.js b/erpnext/schools/doctype/assessment_criteria/test_assessment_criteria.js
new file mode 100644
index 0000000..6c0540e
--- /dev/null
+++ b/erpnext/schools/doctype/assessment_criteria/test_assessment_criteria.js
@@ -0,0 +1,16 @@
+// School Assessment module
+QUnit.module('schools');
+
+QUnit.test('Test: Assessment Criteria', function(assert){
+	assert.expect(0);
+	let done = assert.async();
+	frappe.run_serially([
+		() => {
+			return frappe.tests.make('Assessment Criteria', [
+				{assessment_criteria: 'Pass'},
+				{assessment_criteria_group: 'Reservation'}
+			]);
+		},
+		() => done()
+	]);
+});
\ No newline at end of file
diff --git a/erpnext/schools/doctype/assessment_criteria_group/test_assessment_criteria_group.js b/erpnext/schools/doctype/assessment_criteria_group/test_assessment_criteria_group.js
new file mode 100644
index 0000000..92dba1d
--- /dev/null
+++ b/erpnext/schools/doctype/assessment_criteria_group/test_assessment_criteria_group.js
@@ -0,0 +1,15 @@
+// School Assessment module
+QUnit.module('schools');
+
+QUnit.test('Test: Assessment Criteria Group', function(assert){
+	assert.expect(0);
+	let done = assert.async();
+	frappe.run_serially([
+		() => {
+			return frappe.tests.make('Assessment Criteria Group', [
+				{assessment_criteria_group: 'Reservation'}
+			]);
+		},
+		() => done()
+	]);
+});
\ No newline at end of file
diff --git a/erpnext/schools/doctype/course/test_course.js b/erpnext/schools/doctype/course/test_course.js
new file mode 100644
index 0000000..4866730
--- /dev/null
+++ b/erpnext/schools/doctype/course/test_course.js
@@ -0,0 +1,36 @@
+// Testing Setup Module in Schools
+QUnit.module('schools');
+
+QUnit.test('test course', function(assert) {
+	assert.expect(8);
+	let done = assert.async();
+	frappe.run_serially([
+		() => {
+			return frappe.tests.make('Course', [
+				{course_name: 'Test_Subject'},
+				{course_code: 'Test_Sub'},
+				{department: 'Test Department'},
+				{course_abbreviation: 'Test_Sub'},
+				{course_intro: 'Test Subject Intro'},
+				{default_grading_scale: 'GTU'},
+				{assessment_criteria: [
+					[
+						{assessment_criteria: 'Pass'},
+						{weightage: 100}
+					]
+				]}
+			]);
+		},
+		() => {
+			assert.ok(cur_frm.doc.course_name == 'Test_Subject', 'Course name correctly set');
+			assert.ok(cur_frm.doc.course_code == 'Test_Sub', 'Course code correctly set');
+			assert.ok(cur_frm.doc.department == 'Test Department', 'Department selected correctly');
+			assert.ok(cur_frm.doc.course_abbreviation == 'Test_Sub');
+			assert.ok(cur_frm.doc.course_intro == 'Test Subject Intro');
+			assert.ok(cur_frm.doc.default_grading_scale == 'GTU', 'Grading scale selected correctly');
+			assert.ok(cur_frm.doc.assessment_criteria[0].assessment_criteria == 'Pass', 'Assessment criteria selected correctly');
+			assert.ok(cur_frm.doc.assessment_criteria[0].weightage == '100');
+		},
+		() => 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
new file mode 100644
index 0000000..6539343
--- /dev/null
+++ b/erpnext/schools/doctype/grading_scale/test_grading_scale.js
@@ -0,0 +1,28 @@
+// School Assessment module
+QUnit.module('schools');
+
+QUnit.test('Test: Grading Scale', function(assert){
+	assert.expect(0);
+	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.'},
+				{intervals: [
+					[
+						{grade_code: 'AA'},
+						{threshold: '90'},
+						{grade_description: 'Distinction'}
+					],
+					[
+						{grade_code: 'FF'},
+						{threshold: '0'},
+						{grade_description: 'Fail'}
+					]
+				]}
+			]);
+		},
+		() => done()
+	]);
+});
\ No newline at end of file
diff --git a/erpnext/schools/doctype/program/test_program.js b/erpnext/schools/doctype/program/test_program.js
new file mode 100644
index 0000000..16bc932
--- /dev/null
+++ b/erpnext/schools/doctype/program/test_program.js
@@ -0,0 +1,78 @@
+// Testing Setup Module in Schools
+QUnit.module('schools');
+
+QUnit.test('Test: Program', function(assert){
+	assert.expect(11);
+	let done = assert.async();
+	let fee_structure_code;
+	frappe.run_serially([
+		() => {
+			return frappe.tests.make('Program', [
+				{program_name: 'Standard Test'},
+				{program_code: 'Standard Test'},
+				{department: 'Test Department'},
+				{program_abbreviation: 'Standard Test'},
+				{courses: [
+					[
+						{course: 'Test_Sub'},
+						{required: true}
+					]
+				]}
+			]);
+		},
+
+		() => cur_frm.save(),
+		// Setting up Fee Category to select in Program doctype
+		() => {
+			return frappe.tests.make('Fee Category', [
+				{category_name: 'Reservation'},
+				{description: 'Special Provision'}
+			]);
+		},
+		// Setting up Fee Structure to be selected in Program doctype
+		() => {
+			return frappe.tests.make('Fee Structure', [
+				{program: 'Standard Test'},
+				{academic_term: '2016-17 (Semester 1)'},
+				{student_category: 'Reservation'},
+				{components: [
+					[
+						{fees_category: 'Reservation'},
+						{amount: 20000}
+					]
+				]}
+			]);
+		},
+		() => {fee_structure_code = frappe.get_route()[2];}, // Storing naming convention of Fee Structure entry
+		() => frappe.set_route('Form', ('Program/Standard Test')), // Routing to our current Program doctype
+
+		() => $('.shaded-section~ .visible-section+ .visible-section .grid-add-row').trigger('click'), // clicking on Add Row button
+		// Storing data that were inter-dependent
+		() => cur_frm.doc.fees[0].academic_term = '2016-17 (Semester 1)',
+		() => cur_frm.doc.fees[0].student_category = 'Reservation',
+		() => cur_frm.doc.fees[0].due_date = '2016-08-20',
+		() => $('.error').trigger('click'),
+		() => $('.bold.input-sm').trigger('focus'),
+		() => frappe.timeout(1),
+		() => $('.bold.input-sm').trigger('focus'),
+		() => $('.bold.input-sm').val(fee_structure_code),
+		() => $('.bold.input-sm').trigger('focus'),
+		() => frappe.timeout(1),
+		() => cur_frm.save(),
+
+		() => {
+			assert.ok(cur_frm.doc.program_name == 'Standard Test');
+			assert.ok(cur_frm.doc.program_code == 'Standard Test');
+			assert.ok(cur_frm.doc.department == 'Test Department');
+			assert.ok(cur_frm.doc.program_abbreviation == 'Standard Test');
+			assert.ok(cur_frm.doc.courses[0].course == 'Test_Sub');
+			assert.ok(cur_frm.doc.courses[0].required == true);
+			assert.ok(cur_frm.doc.fees[0].academic_term == '2016-17 (Semester 1)');
+			assert.ok(cur_frm.doc.fees[0].fee_structure == fee_structure_code);
+			assert.ok(cur_frm.doc.fees[0].student_category == 'Reservation');
+			assert.ok(cur_frm.doc.fees[0].due_date == '2016-08-20');
+			assert.ok(cur_frm.doc.fees[0].amount == 20000);
+		},
+		() => done()
+	]);
+});
\ No newline at end of file
diff --git a/erpnext/tests/ui/tests.txt b/erpnext/tests/ui/tests.txt
index 3943144..4acdf3c 100644
--- a/erpnext/tests/ui/tests.txt
+++ b/erpnext/tests/ui/tests.txt
@@ -36,3 +36,8 @@
 erpnext/manufacturing/doctype/production_order/test_production_order.js
 erpnext/accounts/page/pos/test_pos.js
 erpnext/selling/doctype/product_bundle/test_product_bundle.js
+erpnext/schools/doctype/grading_scale/test_grading_scale.js
+erpnext/schools/doctype/assessment_criteria_group/test_assessment_criteria_group.js
+erpnext/schools/doctype/assessment_criteria/test_assessment_criteria.js
+erpnext/schools/doctype/course/test_course.js
+erpnext/schools/doctype/program/test_program.js