[tests] Test case fixes for task and project (#11445)
* [tests] Test case fixes for task and project
* Removed hard-coded dates from test cases
* Codacy fix
diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py
index 5937f97..5b1bcaf 100644
--- a/erpnext/projects/doctype/task/task.py
+++ b/erpnext/projects/doctype/task/task.py
@@ -69,7 +69,6 @@
self.reschedule_dependent_tasks()
self.update_project()
self.unassign_todo()
- rebuild_tree("Task", "parent_task")
def unassign_todo(self):
if self.status == "Closed" or self.status == "Cancelled":
@@ -111,16 +110,20 @@
frappe.throw(_("Circular Reference Error"), CircularReferenceError)
if b[0]:
task_list.append(b[0])
+
if count == 15:
break
def reschedule_dependent_tasks(self):
end_date = self.exp_end_date or self.act_end_date
if end_date:
- for task_name in frappe.db.sql("""select name from `tabTask` as parent where parent.project = %(project)s and parent.name in \
- (select parent from `tabTask Depends On` as child where child.task = %(task)s and child.project = %(project)s)""",
- {'project': self.project, 'task':self.name }, as_dict=1):
-
+ for task_name in frappe.db.sql("""
+ select name from `tabTask` as parent
+ where parent.project = %(project)s
+ and parent.name in (
+ select parent from `tabTask Depends On` as child
+ where child.task = %(task)s and child.project = %(project)s)
+ """, {'project': self.project, 'task':self.name }, as_dict=1):
task = frappe.get_doc("Task", task_name.name)
if task.exp_start_date and task.exp_end_date and task.exp_start_date < getdate(end_date) and task.status == "Open":
task_duration = date_diff(task.exp_end_date, task.exp_start_date)
diff --git a/erpnext/projects/doctype/task/test_records.json b/erpnext/projects/doctype/task/test_records.json
deleted file mode 100644
index 42ca0e7..0000000
--- a/erpnext/projects/doctype/task/test_records.json
+++ /dev/null
@@ -1,15 +0,0 @@
-[
- {
- "status": "Open",
- "subject": "_Test Task",
- "name": "task001"
- },
- {
- "status": "Open",
- "subject": "_Test Task 1"
- },
- {
- "status": "Open",
- "subject": "_Test Task 2"
- }
-]
\ No newline at end of file
diff --git a/erpnext/projects/doctype/task/test_task.py b/erpnext/projects/doctype/task/test_task.py
index 2e64b73..1d94618 100644
--- a/erpnext/projects/doctype/task/test_task.py
+++ b/erpnext/projects/doctype/task/test_task.py
@@ -5,137 +5,61 @@
import unittest
from frappe.utils import getdate, nowdate, add_days
-# test_records = frappe.get_test_records('Task')
-
from erpnext.projects.doctype.task.task import CircularReferenceError
class TestTask(unittest.TestCase):
def test_circular_reference(self):
+ task1 = create_task("_Test Task 1", nowdate(), add_days(nowdate(), 10))
+ task2 = create_task("_Test Task 2", add_days(nowdate(), 11), add_days(nowdate(), 15), task1.name)
+ task3 = create_task("_Test Task 3", add_days(nowdate(), 11), add_days(nowdate(), 15), task2.name)
- task1 = frappe.new_doc('Task')
- task1.update({
- "status": "Open",
- "subject": "_Test Task 1",
- "project": "_Test Project",
- "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 2",
- "project": "_Test Project",
- "exp_start_date": "2015-1-11",
- "exp_end_date": "2015-1-15",
- "depends_on":[
- {
- "task": task1.name
- }
- ]
- })
- task2.save()
-
- task3 = frappe.new_doc('Task')
- task3.update({
- "status": "Open",
- "subject": "_Test Task 2",
- "project": "_Test Project",
- "exp_start_date": "2015-1-11",
- "exp_end_date": "2015-1-15",
- "depends_on":[
- {
- "task": task2.name
- }
- ]
- })
- task3.save()
-
+ task1.reload()
task1.append("depends_on", {
"task": task3.name
})
+
self.assertRaises(CircularReferenceError, task1.save)
task1.set("depends_on", [])
task1.save()
- task4 = frappe.new_doc('Task')
- task4.update({
- "status": "Open",
- "subject": "_Test Task 1",
- "exp_start_date": "2015-1-1",
- "exp_end_date": "2015-1-15",
- "depends_on":[
- {
- "task": task1.name
- }
- ]
- })
- task4.save()
+ task4 = create_task("_Test Task 4", nowdate(), add_days(nowdate(), 15), task1.name)
task3.append("depends_on", {
"task": task4.name
})
def test_reschedule_dependent_task(self):
- task1 = frappe.new_doc('Task')
- task1.update({
- "status": "Open",
- "subject": "_Test Task 1",
- "project": "_Test Project",
- "exp_start_date": "2015-1-1",
- "exp_end_date": "2015-1-10"
- })
- task1.save()
+ task1 = create_task("_Test Task 1", nowdate(), add_days(nowdate(), 10))
- task2 = frappe.new_doc('Task')
- task2.update({
- "status": "Open",
- "subject": "_Test Task 2",
- "project": "_Test Project",
- "exp_start_date": "2015-1-11",
- "exp_end_date": "2015-1-15",
- "depends_on":[
- {
- "task": task1.name,
- "project": "_Test Project"
- }
- ]
- })
+ task2 = create_task("_Test Task 2", add_days(nowdate(), 11), add_days(nowdate(), 15), task1.name)
+ task2.get("depends_on")[0].project = "_Test Project"
task2.save()
- task3 = frappe.new_doc('Task')
- task3.update({
- "status": "Open",
- "subject": "_Test Task 3",
- "project": "_Test Project",
- "exp_start_date": "2015-1-16",
- "exp_end_date": "2015-1-18",
- "depends_on":[
- {
- "task": task2.name,
- "project": "_Test Project"
- }
- ]
- })
+ task3 = create_task("_Test Task 3", add_days(nowdate(), 11), add_days(nowdate(), 15), task2.name)
+ task3.get("depends_on")[0].project = "_Test Project"
task3.save()
task1.update({
- "exp_end_date": "2015-1-20"
+ "exp_end_date": add_days(nowdate(), 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", task2.name, "exp_start_date"),
+ getdate(add_days(nowdate(), 21)))
+ self.assertEqual(frappe.db.get_value("Task", task2.name, "exp_end_date"),
+ getdate(add_days(nowdate(), 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'))
+ self.assertEqual(frappe.db.get_value("Task", task3.name, "exp_start_date"),
+ getdate(add_days(nowdate(), 26)))
+ self.assertEqual(frappe.db.get_value("Task", task3.name, "exp_end_date"),
+ getdate(add_days(nowdate(), 30)))
def test_close_assignment(self):
- task = frappe.new_doc("Task")
- task.subject = "Test Close Assignment"
- task.insert()
+ if not frappe.db.exists("Task", "Test Close Assignment"):
+ task = frappe.new_doc("Task")
+ task.subject = "Test Close Assignment"
+ task.insert()
def assign():
from frappe.desk.form import assign_to
@@ -147,8 +71,10 @@
})
def get_owner_and_status():
- return frappe.db.get_value("ToDo", filters={"reference_type": task.doctype, "reference_name": task.name,
- "description": "Close this task"}, fieldname=("owner", "status"), as_dict=True)
+ return frappe.db.get_value("ToDo",
+ filters={"reference_type": task.doctype, "reference_name": task.name,
+ "description": "Close this task"},
+ fieldname=("owner", "status"), as_dict=True)
assign()
todo = get_owner_and_status()
@@ -164,16 +90,29 @@
self.assertEquals(todo.status, "Closed")
def test_overdue(self):
- task = frappe.get_doc({
- "doctype":"Task",
- "subject": "Testing Overdue",
- "status": "Open",
- "exp_end_date": add_days(nowdate(), -1)
- })
-
- task.insert()
+ task = create_task("Testing Overdue", add_days(nowdate(), -10), add_days(nowdate(), -5))
from erpnext.projects.doctype.task.task import set_tasks_as_overdue
set_tasks_as_overdue()
self.assertEquals(frappe.db.get_value("Task", task.name, "status"), "Overdue")
+
+def create_task(subject, start=None, end=None, depends_on=None, project=None):
+ if not frappe.db.exists("Task", subject):
+ task = frappe.new_doc('Task')
+ task.status = "Open"
+ task.subject = subject
+ task.exp_start_date = start or nowdate()
+ task.exp_end_date = end or nowdate()
+ task.project = project or "_Test Project"
+ task.save()
+ else:
+ task = frappe.get_doc("Task", subject)
+
+ if depends_on:
+ task.append("depends_on", {
+ "task": depends_on
+ })
+ task.save()
+
+ return task
\ No newline at end of file