Test Cases Added, fixes in task
diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py
index b52e2d8..6b16f02 100644
--- a/erpnext/projects/doctype/task/task.py
+++ b/erpnext/projects/doctype/task/task.py
@@ -9,6 +9,8 @@
 
 from frappe.model.document import Document
 
+class ReferenceError(frappe.ValidationError): pass
+
 class Task(Document):
 	def get_feed(self):
 		return '{0}: {1}'.format(_(self.status), self.subject)
@@ -53,8 +55,8 @@
 	def update_time_and_costing(self):
 		tl = frappe.db.sql("""select min(from_time) as start_date, max(to_time) as end_date,
 			 sum(billing_amount) as total_billing_amount, sum(costing_amount) as total_costing_amount,
-			sum(hours) as time from `tabTime Log` where project = %s and task = %s and docstatus=1""",
-			(self.project, self.name),as_dict=1)[0]
+			sum(hours) as time from `tabTime Log` where task = %s and docstatus=1"""
+			,self.name, as_dict=1)[0]
 		if self.status == "Open":
 			self.status = "Working"
 		self.total_costing_amount= tl.total_costing_amount
@@ -80,7 +82,7 @@
 			
 	def check_recursion(self, task, task_list):
 		if task in task_list:
-			frappe.throw("Circular Reference Error")
+			frappe.throw("Circular Reference Error", ReferenceError)
 		else :
 			task_list.append(task)
 			return frappe.db.get_value("Task", task, "depends_on")
diff --git a/erpnext/projects/doctype/task/test_task.py b/erpnext/projects/doctype/task/test_task.py
index 62e560f..f1038b4 100644
--- a/erpnext/projects/doctype/task/test_task.py
+++ b/erpnext/projects/doctype/task/test_task.py
@@ -1,7 +1,95 @@
 # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 # License: GNU General Public License v3. See license.txt
 from __future__ import unicode_literals
-
-
 import frappe
+import unittest
+from frappe.utils import getdate
+
 test_records = frappe.get_test_records('Task')
+
+from erpnext.projects.doctype.task.task import ReferenceError
+
+class TestTask(unittest.TestCase):
+	def test_circular_refereence(self):
+		task1 =  frappe.new_doc('Task')
+		task1.update({
+			"status": "Open", 
+			"subject": "_Test Task 3"
+		})
+		task1.save()
+		
+		task2 =  frappe.new_doc('Task')
+		task2.update({
+			"status": "Open", 
+			"subject": "_Test Task 4",
+			"depends_on": task1.name
+		})
+		task2.save()
+		
+		task3 =  frappe.new_doc('Task')
+		task3.update({
+			"status": "Open", 
+			"subject": "_Test Task 5",
+			"depends_on": task2.name
+		})
+		task3.save()
+		
+		task1.update({
+			"depends_on": task3.name
+		})
+		self.assertRaises(ReferenceError, task1.save)
+		
+	def test_reschedule_depending_task(self):
+		task1 =  frappe.new_doc('Task')
+		task1.update({
+			"status": "Open", 
+			"subject": "_Test Task 6",
+			"exp_start_date": "2015-1-1",
+			"exp_end_date": "2015-1-10"
+		})
+		task1.save()
+		
+		task2 =  frappe.new_doc('Task')
+		task2.update({
+			"status": "Open", 
+			"subject": "_Test Task 7",
+			"exp_start_date": "2015-1-11",
+			"exp_end_date": "2015-1-15",
+			"depends_on": task1.name
+		})
+		task2.save()
+		
+		task3 =  frappe.new_doc('Task')
+		task3.update({
+			"status": "Open", 
+			"subject": "_Test Task 5",
+			"exp_start_date": "2015-1-16",
+			"exp_end_date": "2015-1-18",
+			"depends_on": task2.name
+		})
+		task3.save()
+		
+		task1.update({
+			"exp_end_date": "2015-1-20"
+		})
+		task1.save()
+		
+		self.assertEqual(frappe.db.get_value("Task", task2.name, "exp_start_date"), getdate('2015-1-21'))
+		self.assertEqual(frappe.db.get_value("Task", task2.name, "exp_end_date"), getdate('2015-1-25'))
+
+		self.assertEqual(frappe.db.get_value("Task", task3.name, "exp_start_date"), getdate('2015-1-26'))
+		self.assertEqual(frappe.db.get_value("Task", task3.name, "exp_end_date"), getdate('2015-1-28'))
+		
+		time_log = frappe.new_doc('Time Log')
+		time_log.update({
+			"from_time": "2015-1-1",
+			"to_time": "2015-1-22",
+			"task": task1.name
+		})
+		time_log.submit()
+		
+		self.assertEqual(frappe.db.get_value("Task", task2.name, "exp_start_date"), getdate('2015-1-23'))
+		self.assertEqual(frappe.db.get_value("Task", task2.name, "exp_end_date"), getdate('2015-1-27'))
+
+		self.assertEqual(frappe.db.get_value("Task", task3.name, "exp_start_date"), getdate('2015-1-28'))
+		self.assertEqual(frappe.db.get_value("Task", task3.name, "exp_end_date"), getdate('2015-1-30'))
\ No newline at end of file
diff --git a/erpnext/projects/doctype/time_log/test_time_log.py b/erpnext/projects/doctype/time_log/test_time_log.py
index 3d9e0be..9b43b0d 100644
--- a/erpnext/projects/doctype/time_log/test_time_log.py
+++ b/erpnext/projects/doctype/time_log/test_time_log.py
@@ -1,6 +1,5 @@
 # Copyright (c) 2015, Frappe Technologies Pvt. Ltd. and Contributors
 # License: GNU General Public License v3. See license.txt
-from __future__ import unicode_literals
 
 from __future__ import unicode_literals
 import frappe