[ui-test] completed tests for manufacturing (#10218)

* modified test_item to include child table assertions

* minor travis fixes

* removed css selectors and used cur_frm
diff --git a/erpnext/crm/doctype/item/test_item.js b/erpnext/crm/doctype/item/test_item.js
index b48f93a..58cf549 100644
--- a/erpnext/crm/doctype/item/test_item.js
+++ b/erpnext/crm/doctype/item/test_item.js
@@ -117,4 +117,4 @@
 		),
 		() => done()
 	]);
-});
+});
\ No newline at end of file
diff --git a/erpnext/manufacturing/doctype/production_order/test_production_order.js b/erpnext/manufacturing/doctype/production_order/test_production_order.js
index 57299db..0a7745e 100644
--- a/erpnext/manufacturing/doctype/production_order/test_production_order.js
+++ b/erpnext/manufacturing/doctype/production_order/test_production_order.js
@@ -1,8 +1,17 @@
 QUnit.test("test: production order", function (assert) {
-	assert.expect(2);
+	assert.expect(25);
 	let done = assert.async();
 	let laptop_quantity = 5;
-	let single_laptop_cost = 1340; // Calculated in workstation (time * per_hour_cost) for every item
+	let items = ["Screen", "CPU", "Keyboard"];
+	let operation_items = ["CPU", "Keyboard", "Screen"];
+	let click_make = () => {
+		let element = $(`.btn-primary:contains("Make"):visible`);
+		if(!element.length) {
+			throw `did not find any button containing 'Make'`;
+		}
+		element.click();
+		return frappe.timeout(1);
+	};
 
 	frappe.run_serially([
 		// test production order
@@ -24,18 +33,106 @@
 		() => frappe.timeout(1),
 		() => cur_frm.set_value("fg_warehouse", "Finished Goods - RB"),
 		() => cur_frm.save(),
-		() => frappe.timeout(1),
+		() => frappe.timeout(2),
 
 		() => {
-			assert.equal(cur_frm.doc.planned_operating_cost, cur_frm.doc.total_operating_cost, "Total and Planned Cost is equal");
-			assert.equal(cur_frm.doc.planned_operating_cost, laptop_quantity*single_laptop_cost, "Total cost is calculated correctly "+cur_frm.doc.planned_operating_cost);
+			assert.equal(cur_frm.doc.planned_operating_cost, cur_frm.doc.total_operating_cost,
+				"Total and Planned Cost is equal");
+			assert.equal(cur_frm.doc.planned_operating_cost, cur_frm.doc.total_operating_cost,
+				"Total and Planned Cost is equal");
+
+			items.forEach(function(item, index) {
+				assert.equal(item, cur_frm.doc.required_items[index].item_code, `Required item ${item} added`);
+				assert.equal("Stores - RB", cur_frm.doc.required_items[index].source_warehouse, `Item ${item} warhouse verified`);
+				assert.equal("5", cur_frm.doc.required_items[index].required_qty, `Item ${item} quantity verified`);
+			});
+
+			operation_items.forEach(function(operation_item, index) {
+				assert.equal(`Assemble ${operation_item}`, cur_frm.doc.operations[index].operation,
+					`Operation ${operation_item} added`);
+				assert.equal(`${operation_item} assembly workstation`, cur_frm.doc.operations[index].workstation,
+					`Workstation ${operation_item} linked`);
+			});
 		},
 
+		// Submit the production order
 		() => cur_frm.savesubmit(),
 		() => frappe.timeout(1),
 		() => frappe.click_button('Yes'),
 		() => frappe.timeout(1),
 
+		// Confirm the production order timesheet, save and submit it
+		() => frappe.click_link("TS-00"),
+		() => frappe.timeout(1),
+		() => frappe.click_button("Save"),
+		() => frappe.timeout(1),
+		() => frappe.click_button("Submit"),
+		() => frappe.timeout(1),
+		() => frappe.click_button("Yes"),
+		() => frappe.timeout(2),
+
+		// Start the production order process
+		() => frappe.set_route("List", "Production Order"),
+		() => frappe.timeout(2),
+		() => frappe.set_route("List", "Production Order"),
+		() => frappe.timeout(2),
+		() => frappe.click_link("Laptop"),
+		() => frappe.timeout(1),
+		() => frappe.click_button("Start"),
+		() => frappe.timeout(0.5),
+		() => click_make(),
+		() => frappe.click_button("Save"),
+		() => frappe.timeout(0.5),
+
+		() => {
+			assert.equal(cur_frm.doc.total_outgoing_value, cur_frm.doc.total_incoming_value,
+				"Total incoming and outgoing cost is equal");
+			assert.equal(cur_frm.doc.total_outgoing_value, "99000",
+				"Outgoing cost is correct"); // Price of each item x5
+		},
+		// Submit for production
+		() => frappe.click_button("Submit"),
+		() => frappe.timeout(0.5),
+		() => frappe.click_button("Yes"),
+		() => frappe.timeout(0.5),
+
+		// Finish the production order by sending for manufacturing
+		() => frappe.set_route("List", "Production Order"),
+		() => frappe.timeout(1),
+		() => frappe.click_link("Laptop"),
+		() => frappe.timeout(1),
+
+		() => {
+			assert.ok(frappe.tests.is_visible("5 items in progress", 'p'), "Production order initiated");
+			assert.ok(frappe.tests.is_visible("Finish"), "Finish button visible");
+		},
+
+		() => frappe.click_button("Finish"),
+		() => frappe.timeout(0.5),
+		() => click_make(),
+		() => {
+			assert.equal(cur_frm.doc.total_incoming_value, "105700",
+				"Incoming cost is correct"); // Price of each item x5, values are in USD
+			assert.equal(cur_frm.doc.total_outgoing_value, "99000",
+				"Outgoing cost is correct"); // Price of each item x5, values are in USD
+			assert.equal(cur_frm.doc.total_incoming_value - cur_frm.doc.total_outgoing_value, cur_frm.doc.value_difference,
+				"Value difference is correct"); // Price of each item x5, values are in USD
+		},
+		() => frappe.click_button("Save"),
+		() => frappe.timeout(1),
+		() => frappe.click_button("Submit"),
+		() => frappe.timeout(1),
+		() => frappe.click_button("Yes"),
+		() => frappe.timeout(1),
+
+		// Manufacturing finished
+		() => frappe.set_route("List", "Production Order"),
+		() => frappe.timeout(1),
+		() => frappe.click_link("Laptop"),
+		() => frappe.timeout(1),
+
+		() => assert.ok(frappe.tests.is_visible("5 items produced", 'p'), "Production order completed"),
+
 		() => done()
 	]);
-});
+});
\ No newline at end of file
diff --git a/erpnext/stock/doctype/warehouse/test_warehouse.js b/erpnext/stock/doctype/warehouse/test_warehouse.js
index 3763613..f13bc58 100644
--- a/erpnext/stock/doctype/warehouse/test_warehouse.js
+++ b/erpnext/stock/doctype/warehouse/test_warehouse.js
@@ -16,4 +16,4 @@
 
 		() => done()
 	]);
-});
+});
\ No newline at end of file
diff --git a/erpnext/tests/ui/tests.txt b/erpnext/tests/ui/tests.txt
index fb86b7c..adfc67d 100644
--- a/erpnext/tests/ui/tests.txt
+++ b/erpnext/tests/ui/tests.txt
@@ -41,7 +41,7 @@
 erpnext/schools/doctype/room/test_room.js
 erpnext/schools/doctype/instructor/test_instructor.js
 erpnext/stock/doctype/warehouse/test_warehouse.js
-erpnext/manufacturing/doctype/production_order/test_production_order.js
+erpnext/manufacturing/doctype/production_order/test_production_order.js #long
 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