fix(tests): add test for bulk complete / cancellation of project
diff --git a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.py b/erpnext/hr/doctype/employee_onboarding/employee_onboarding.py
index c9cd423..fbef047 100644
--- a/erpnext/hr/doctype/employee_onboarding/employee_onboarding.py
+++ b/erpnext/hr/doctype/employee_onboarding/employee_onboarding.py
@@ -23,7 +23,7 @@
continue
else:
task_status = frappe.db.get_value("Task", activity.task, "status")
- if task_status not in ["Closed", "Cancelled"]:
+ if task_status not in ["Completed", "Cancelled"]:
frappe.throw(_("All the mandatory Task for employee creation hasn't been done yet."), IncompleteTaskError)
def on_submit(self):
diff --git a/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py b/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py
index ec640fc..b7085fa 100644
--- a/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py
+++ b/erpnext/hr/doctype/employee_onboarding/test_employee_onboarding.py
@@ -39,7 +39,7 @@
# complete the task
project = frappe.get_doc('Project', onboarding.project)
- project.tasks[0].status = 'Closed'
+ project.tasks[0].status = 'Completed'
project.save()
# make employee
diff --git a/erpnext/projects/doctype/project/project.js b/erpnext/projects/doctype/project/project.js
index 0585bd9..a366a25 100644
--- a/erpnext/projects/doctype/project/project.js
+++ b/erpnext/projects/doctype/project/project.js
@@ -95,8 +95,8 @@
set_status: function(frm, status) {
frappe.confirm(__('Set Project and all Tasks to status {0}?', [status.bold()]), () => {
frappe.xcall('erpnext.projects.doctype.project.project.set_project_status',
- {project: frm.doc.name, status: status}).then((r) => { /* page will auto reload */ });
- })
+ {project: frm.doc.name, status: status}).then(() => { /* page will auto reload */ });
+ });
},
tasks_refresh: function (frm) {
diff --git a/erpnext/projects/doctype/project/test_project.py b/erpnext/projects/doctype/project/test_project.py
index b1e02d3..f0a3656 100644
--- a/erpnext/projects/doctype/project/test_project.py
+++ b/erpnext/projects/doctype/project/test_project.py
@@ -8,22 +8,16 @@
test_ignore = ["Sales Order"]
from erpnext.projects.doctype.project_template.test_project_template import get_project_template
+from erpnext.projects.doctype.project.project import set_project_status
+
from frappe.utils import getdate
class TestProject(unittest.TestCase):
def test_project_with_template(self):
- template = get_project_template()
+ frappe.db.sql('delete from tabTask where project = "Test Project with Template"')
+ frappe.delete_doc('Project', 'Test Project with Template')
- # frappe.db.sql('delete from tabTask where project = "Test Project with Template"')
- # frappe.delete_doc('Project', 'Test Project with Template')
-
- project = frappe.get_doc(dict(
- doctype = 'Project',
- project_name = 'Test Project with Template',
- status = 'Open',
- project_template = template.name,
- expected_start_date = '2019-01-01'
- )).insert()
+ project = get_project('Test Project with Template')
project.load_tasks()
@@ -37,3 +31,33 @@
task4 = project.tasks[3]
self.assertEqual(task4.title, 'Task 4')
self.assertEqual(getdate(task4.end_date), getdate('2019-01-06'))
+
+ def test_bulk_complete_and_cancel(self):
+ frappe.db.sql('delete from tabTask where project = "Test Project for Bulk Actions"')
+ frappe.delete_doc('Project', 'Test Project for Bulk Actions')
+
+ project = get_project('Test Project for Bulk Actions')
+ set_project_status(project.name, 'Completed')
+
+ # check all tasks are completed
+ self.assertTrue(all([d.status=='Completed' for d in
+ frappe.get_all('Task', ['name', 'status'], dict(project = project.name))]))
+
+ # check all tasks are cancelled
+ set_project_status(project.name, 'Cancelled')
+ self.assertTrue(all([d.status=='Cancelled' for d in
+ frappe.get_all('Task', ['name', 'status'], dict(project = project.name))]))
+
+
+def get_project(name):
+ template = get_project_template()
+
+ project = frappe.get_doc(dict(
+ doctype = 'Project',
+ project_name = name,
+ status = 'Open',
+ project_template = template.name,
+ expected_start_date = '2019-01-01'
+ )).insert()
+
+ return project
\ 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 9971946..c4fab51 100644
--- a/erpnext/projects/doctype/task/test_task.py
+++ b/erpnext/projects/doctype/task/test_task.py
@@ -83,11 +83,11 @@
# assignment should be
task.load_from_db()
- task.status = "Closed"
+ task.status = "Completed"
task.save()
todo = get_owner_and_status()
self.assertEqual(todo.owner, "test@example.com")
- self.assertEqual(todo.status, "Closed")
+ self.assertEqual(todo.status, "Completed")
def test_overdue(self):
task = create_task("Testing Overdue", add_days(nowdate(), -10), add_days(nowdate(), -5))
diff --git a/erpnext/templates/pages/projects.js b/erpnext/templates/pages/projects.js
index b6a2553..262167f 100644
--- a/erpnext/templates/pages/projects.js
+++ b/erpnext/templates/pages/projects.js
@@ -3,7 +3,7 @@
$('.task-status-switch').on('click', function() {
var $btn = $(this);
if($btn.attr('data-status')==='Open') {
- reload_items('closed', 'task', $btn);
+ reload_items('completed', 'task', $btn);
} else {
reload_items('open', 'task', $btn);
}
@@ -13,7 +13,7 @@
$('.issue-status-switch').on('click', function() {
var $btn = $(this);
if($btn.attr('data-status')==='Open') {
- reload_items('closed', 'issue', $btn);
+ reload_items('completed', 'issue', $btn);
} else {
reload_items('open', 'issue', $btn);
}
@@ -61,9 +61,9 @@
// update status
if(item_status==='open') {
- $btn.html(__('Show closed')).attr('data-status', 'Open');
+ $btn.html(__('Show Completed')).attr('data-status', 'Open');
} else {
- $btn.html(__('Show open')).attr('data-status', 'Closed');
+ $btn.html(__('Show Open')).attr('data-status', 'Completed');
}
}
});
@@ -72,8 +72,8 @@
var more_items = function(item, item_status){
if(item_status) {
- var item_status = $('.project-'+ item +'-section .btn-group .bold').hasClass('btn-closed-'+ item)
- ? 'closed' : 'open';
+ var item_status = $('.project-'+ item +'-section .btn-group .bold').hasClass('btn-completed-'+ item)
+ ? 'completed' : 'open';
}
$.ajax({
method: "GET",