diff --git a/erpnext/hr/doctype/shift_assignment/shift_assignment.py b/erpnext/hr/doctype/shift_assignment/shift_assignment.py
index fbbfe31..ace9cb8 100644
--- a/erpnext/hr/doctype/shift_assignment/shift_assignment.py
+++ b/erpnext/hr/doctype/shift_assignment/shift_assignment.py
@@ -12,7 +12,7 @@
 
 class ShiftAssignment(Document):
 	def validate(self):
-		self.validate_overlapping_dates();
+		self.validate_overlapping_dates()
 
 	def validate_overlapping_dates(self):
 			if not self.name:
diff --git a/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py b/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py
index eb51adb..7fe80a2 100644
--- a/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py
+++ b/erpnext/hr/doctype/shift_assignment/test_shift_assignment.py
@@ -5,6 +5,23 @@
 
 import frappe
 import unittest
+from frappe.utils import nowdate
+
+test_dependencies = ["Shift Type"]
 
 class TestShiftAssignment(unittest.TestCase):
-	pass
+
+	def setUp(self):
+		frappe.db.sql("delete from `tabShift Assignment`")
+
+	def test_make_shift_assignment(self):
+		shift_assignment = frappe.get_doc({
+			"doctype": "Shift Assignment",
+			"shift_type": "Day Shift",
+			"company": "_Test Company",
+			"employee": "_T-Employee-00001",
+			"date": nowdate()
+		}).insert()
+		shift_assignment.submit()
+
+		self.assertEqual(shift_assignment.docstatus, 1)
diff --git a/erpnext/hr/doctype/shift_request/shift_request.py b/erpnext/hr/doctype/shift_request/shift_request.py
index 7057d20..ff5de08 100644
--- a/erpnext/hr/doctype/shift_request/shift_request.py
+++ b/erpnext/hr/doctype/shift_request/shift_request.py
@@ -12,8 +12,8 @@
 
 class ShiftRequest(Document):
 	def validate(self):
-		self.validate_dates();
-		self.validate_shift_request_overlap_dates();
+		self.validate_dates()
+		self.validate_shift_request_overlap_dates()
 
 	def on_submit(self):
 		date_list = self.get_working_days(self.from_date, self.to_date)
@@ -27,6 +27,14 @@
 			assignment_doc.insert()
 			assignment_doc.submit()
 
+	def on_cancel(self):
+		shift_assignment_list = frappe.get_list("Shift Assignment", {'employee': self.employee, 'shift_request': self.name})
+		if shift_assignment_list:
+			for shift in shift_assignment_list:
+				shift_assignment_doc = frappe.get_doc("Shift Assignment", shift['name'])
+				shift_assignment_doc.cancel()
+
+
 	def validate_dates(self):
 		if self.from_date and self.to_date and (getdate(self.to_date) < getdate(self.from_date)):
 			frappe.throw(_("To date cannot be before from date"))
diff --git a/erpnext/hr/doctype/shift_request/test_shift_request.py b/erpnext/hr/doctype/shift_request/test_shift_request.py
index d32443a..1d0cf71 100644
--- a/erpnext/hr/doctype/shift_request/test_shift_request.py
+++ b/erpnext/hr/doctype/shift_request/test_shift_request.py
@@ -8,6 +8,10 @@
 from frappe.utils import nowdate
 
 class TestShiftRequest(unittest.TestCase):
+	def setUp(self):
+		for doctype in ["Shift Request", "Shift Assignment"]:
+			frappe.db.sql("delete from `tab{doctype}`".format(doctype=doctype))
+
 	def test_make_shift_request(self):
 		shift_request = frappe.get_doc({
 			"doctype": "Shift Request",
@@ -20,9 +24,14 @@
 		})
 		shift_request.insert()
 		shift_request.submit()
-		shift_assignment = frappe.db.sql("""select employee
-											from `tabShift Assignment`
-											where shift_request = %s""", shift_request.name)
-		if shift_assignment:
-			employee = shift_assignment[0][0]
-		self.assertEqual(shift_request.employee, employee)
\ No newline at end of file
+		shift_assignments = frappe.db.sql('''
+				SELECT shift_request, employee
+				FROM `tabShift Assignment`
+				WHERE shift_request = '{0}'
+			'''.format(shift_request.name), as_dict=1)
+		for d in shift_assignments:
+			employee = d.get('employee')
+			self.assertEqual(shift_request.employee, employee)
+			shift_request.cancel()
+			shift_assignment_doc = frappe.get_doc("Shift Assignment", {"shift_request": d.get('shift_request')})
+			self.assertEqual(shift_assignment_doc.docstatus, 2)
\ No newline at end of file
diff --git a/erpnext/hr/doctype/shift_type/test_shift_type.py b/erpnext/hr/doctype/shift_type/test_shift_type.py
index d5afdf5..535072a 100644
--- a/erpnext/hr/doctype/shift_type/test_shift_type.py
+++ b/erpnext/hr/doctype/shift_type/test_shift_type.py
@@ -8,6 +8,8 @@
 
 class TestShiftType(unittest.TestCase):
 	def test_make_shift_type(self):
+		if frappe.db.exists("Shift Type", "Day Shift"):
+			return
 		shift_type = frappe.get_doc({
 			"doctype": "Shift Type",
 			"name": "Day Shift",
@@ -15,3 +17,4 @@
 			"end_time": "18:00:00"
 		})
 		shift_type.insert()
+ 
\ No newline at end of file
