From f15a8409eb232171ec490069bfb94ba123a398af Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Mon, 6 Nov 2017 11:11:34 +0530 Subject: [PATCH] [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 --- erpnext/projects/doctype/task/task.py | 13 +- .../projects/doctype/task/test_records.json | 15 -- erpnext/projects/doctype/task/test_task.py | 159 ++++++------------ 3 files changed, 57 insertions(+), 130 deletions(-) delete mode 100644 erpnext/projects/doctype/task/test_records.json diff --git a/erpnext/projects/doctype/task/task.py b/erpnext/projects/doctype/task/task.py index 5937f97f02..5b1bcaf266 100644 --- a/erpnext/projects/doctype/task/task.py +++ b/erpnext/projects/doctype/task/task.py @@ -69,7 +69,6 @@ class Task(NestedSet): 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 @@ class Task(NestedSet): 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 42ca0e77ea..0000000000 --- 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 2e64b7367d..1d9461846e 100644 --- a/erpnext/projects/doctype/task/test_task.py +++ b/erpnext/projects/doctype/task/test_task.py @@ -5,137 +5,61 @@ import frappe 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 @@ class TestTask(unittest.TestCase): }) 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 @@ class TestTask(unittest.TestCase): 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