From 67b41deb449ddcc116e705262e3ce2a7e4d66afd Mon Sep 17 00:00:00 2001 From: Suraj Shetty Date: Sun, 2 Jun 2019 10:56:20 +0530 Subject: [PATCH] test: Add test case to check get_common_transition_actions --- frappe/model/workflow.py | 9 +++++--- .../doctype/workflow/test_workflow.py | 22 ++++++++++++++++--- 2 files changed, 25 insertions(+), 6 deletions(-) diff --git a/frappe/model/workflow.py b/frappe/model/workflow.py index 0a6c34752b..2851db6780 100644 --- a/frappe/model/workflow.py +++ b/frappe/model/workflow.py @@ -5,6 +5,7 @@ from __future__ import unicode_literals import frappe from frappe.utils import cint from frappe import _ +from six import string_types import json class WorkflowStateError(frappe.ValidationError): pass @@ -180,10 +181,12 @@ def bulk_workflow_approval(docnames, doctype, action): @frappe.whitelist() def get_common_transition_actions(docs, doctype): common_actions = [] - docs = json.loads(docs) + if isinstance(docs, string_types): + docs = json.loads(docs) try: for (i, doc) in enumerate(docs, 1): - doc['doctype'] = doctype + if not doc.get('doctype'): + doc['doctype'] = doctype actions = [t.get('action') for t in get_transitions(doc, raise_exception=True) \ if has_approval_access(frappe.session.user, doc, t)] if not actions: return [] @@ -192,7 +195,7 @@ def get_common_transition_actions(docs, doctype): except WorkflowStateError: pass - return common_actions + return list(common_actions) def show_progress(docnames, message, i, description): n = len(docnames) diff --git a/frappe/workflow/doctype/workflow/test_workflow.py b/frappe/workflow/doctype/workflow/test_workflow.py index 7a65f6bdff..165c0658aa 100644 --- a/frappe/workflow/doctype/workflow/test_workflow.py +++ b/frappe/workflow/doctype/workflow/test_workflow.py @@ -9,6 +9,7 @@ from frappe.model.workflow import apply_workflow, WorkflowTransitionError, Workf class TestWorkflow(unittest.TestCase): def setUp(self): + frappe.db.sql('DELETE FROM `tabToDo`') if not getattr(self, 'workflow', None): self.workflow = create_todo_workflow() frappe.set_user('Administrator') @@ -50,9 +51,24 @@ class TestWorkflow(unittest.TestCase): self.workflow.transitions[0].condition = '' self.workflow.save() + def test_get_common_transition_actions(self): + todo1 = frappe.get_doc(dict(doctype='ToDo', description='workflow ' + random_string(10))).insert() + todo2 = frappe.get_doc(dict(doctype='ToDo', description='workflow ' + random_string(10))).insert() + todo3 = frappe.get_doc(dict(doctype='ToDo', description='workflow ' + random_string(10))).insert() + todo4 = frappe.get_doc(dict(doctype='ToDo', description='workflow ' + random_string(10))).insert() - def test_get_common_transition_actions(): - actions = get_common_transition_actions(['asdf', 'asdf', 'asf'], 'ToDo') + actions = get_common_transition_actions([todo1, todo2, todo3, todo4], 'ToDo') + self.assertSetEqual(set(actions), set(['Approve', 'Reject'])) + + apply_workflow(todo1, 'Reject') + apply_workflow(todo2, 'Reject') + apply_workflow(todo3, 'Approve') + + actions = get_common_transition_actions([todo1, todo2, todo3], 'ToDo') + self.assertListEqual(actions, []) + + actions = get_common_transition_actions([todo1, todo2], 'ToDo') + self.assertListEqual(actions, ['Review']) def test_if_workflow_actions_were_processed(self): frappe.db.sql('delete from `tabWorkflow Action`') @@ -74,7 +90,7 @@ class TestWorkflow(unittest.TestCase): def create_todo_workflow(): if frappe.db.exists('Workflow', 'Test ToDo'): - return frappe.get_doc('Workflow', 'Test ToDo') + return frappe.get_doc('Workflow', 'Test ToDo').save(ignore_permissions=True) else: frappe.get_doc(dict(doctype='Role', role_name='Test Approver')).insert(ignore_if_duplicate=True)