diff --git a/erpnext/manufacturing/doctype/job_card/test_job_card.py b/erpnext/manufacturing/doctype/job_card/test_job_card.py
index d799283..daf6d4a 100644
--- a/erpnext/manufacturing/doctype/job_card/test_job_card.py
+++ b/erpnext/manufacturing/doctype/job_card/test_job_card.py
@@ -18,8 +18,17 @@
 
 	def setUp(self):
 		transfer_material_against, source_warehouse = None, None
-		tests_that_transfer_against_jc = ("test_job_card_multiple_materials_transfer",
-			"test_job_card_excess_material_transfer")
+
+		tests_that_skip_setup = (
+			"test_job_card_material_transfer_correctness"
+		)
+		tests_that_transfer_against_jc = (
+			"test_job_card_multiple_materials_transfer",
+			"test_job_card_excess_material_transfer"
+		)
+
+		if self._testMethodName in tests_that_skip_setup:
+			return
 
 		if self._testMethodName in tests_that_transfer_against_jc:
 			transfer_material_against = "Job Card"
@@ -190,4 +199,88 @@
 		job_card.submit()
 
 		# JC is Completed with excess transfer
-		self.assertEqual(job_card.status, "Completed")
\ No newline at end of file
+		self.assertEqual(job_card.status, "Completed")
+
+	def test_job_card_material_transfer_correctness(self):
+		"""
+			1. Test if only current Job Card Items are pulled in a Stock Entry against a Job Card
+			2. Test impact of changing 'For Qty' in such a Stock Entry
+		"""
+		bom = create_bom_with_multiple_operations()
+		work_order = make_wo_with_transfer_against_jc()
+
+		job_card_name = frappe.db.get_value(
+			"Job Card",
+			{"work_order": work_order.name,"operation": "Test Operation A"}
+		)
+		job_card = frappe.get_doc("Job Card", job_card_name)
+
+		self.assertEqual(len(job_card.items), 1)
+		self.assertEqual(job_card.items[0].item_code, "_Test Item")
+
+		# check if right items are mapped in transfer entry
+		transfer_entry = make_stock_entry_from_jc(job_card_name)
+		transfer_entry.insert()
+
+		self.assertEqual(len(transfer_entry.items), 1)
+		self.assertEqual(transfer_entry.items[0].item_code, "_Test Item")
+		self.assertEqual(transfer_entry.items[0].qty, 4)
+
+		# change 'For Qty' and check impact on items table
+		# no.of items should be the same with qty change
+		transfer_entry.fg_completed_qty = 2
+		transfer_entry.get_items()
+
+		self.assertEqual(len(transfer_entry.items), 1)
+		self.assertEqual(transfer_entry.items[0].item_code, "_Test Item")
+		self.assertEqual(transfer_entry.items[0].qty, 2)
+
+		# teardown
+		transfer_entry.delete()
+		frappe.db.delete("Job Card", {"work_order": work_order.name})
+		work_order.cancel()
+		bom.cancel()
+
+
+def create_bom_with_multiple_operations():
+	from erpnext.manufacturing.doctype.operation.test_operation import make_operation
+
+	test_record = frappe.get_test_records("BOM")[2]
+	bom_doc = frappe.get_doc(test_record)
+
+	make_operation({
+		"operation": "Test Operation A",
+		"workstation": "_Test Workstation A",
+		"hour_rate_rent": 300,
+		"time_in_mins": 60
+	})
+
+	bom_doc.append("operations", {
+		"operation": "Test Operation A",
+		"description": "Test Operation A",
+		"workstation": "_Test Workstation A",
+		"hour_rate": 300,
+		"time_in_mins": 60,
+		"operating_cost": 100
+	})
+
+	bom_doc.save()
+	bom_doc.submit()
+
+	return bom_doc
+
+def make_wo_with_transfer_against_jc():
+	"Create a WO with multiple operations and Material Transfer against Job Card"
+
+	work_order = make_wo_order_test_record(
+		item="_Test FG Item 2",
+		qty=4,
+		transfer_material_against="Job Card",
+		source_warehouse="Stores - _TC",
+		do_not_submit=True
+	)
+	work_order.required_items[0].operation = "Test Operation A"
+	work_order.required_items[1].operation = "_Test Operation 1"
+	work_order.submit()
+
+	return work_order
\ No newline at end of file
diff --git a/erpnext/manufacturing/doctype/operation/test_operation.py b/erpnext/manufacturing/doctype/operation/test_operation.py
index 804cc3f..e511084 100644
--- a/erpnext/manufacturing/doctype/operation/test_operation.py
+++ b/erpnext/manufacturing/doctype/operation/test_operation.py
@@ -17,15 +17,13 @@
 
 	args = frappe._dict(args)
 
-	try:
+	if not frappe.db.exists("Operation", args.operation):
 		doc = frappe.get_doc({
 			"doctype": "Operation",
 			"name": args.operation,
 			"workstation": args.workstation
 		})
-
 		doc.insert()
-
 		return doc
-	except frappe.DuplicateEntryError:
-		return frappe.get_doc("Operation", args.operation)
+
+	return frappe.get_doc("Operation", args.operation)
