1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.kuali.rice.kew.actions;
18
19 import static org.junit.Assert.assertEquals;
20 import static org.junit.Assert.fail;
21
22 import java.util.Set;
23
24 import org.junit.Test;
25 import org.kuali.rice.kew.api.WorkflowDocument;
26 import org.kuali.rice.kew.api.WorkflowDocumentFactory;
27 import org.kuali.rice.kew.api.action.ActionType;
28 import org.kuali.rice.kew.api.document.DocumentStatus;
29 import org.kuali.rice.kew.test.KEWTestCase;
30 import org.kuali.rice.kew.util.KEWConstants;
31
32
33 public class ValidActionsTest extends KEWTestCase {
34
35 private static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ValidActionsTest.class);
36
37 public static final String DOCUMENT_TYPE_NAME = "BlanketApproveSequentialTest";
38
39 protected void loadTestData() throws Exception {
40 loadXmlFile("ActionsConfig.xml");
41 }
42
43 @Test public void testValidActions() throws Exception {
44 WorkflowDocument document = null;
45 String networkId = null;
46 document = WorkflowDocumentFactory.createDocument(getPrincipalIdForName("user1"), DOCUMENT_TYPE_NAME);
47 String documentId = document.getDocumentId();
48
49 networkId = "rkirkend";
50 document = this.checkActions(networkId, documentId,
51 new String[]{KEWConstants.ACTION_TAKEN_SU_CANCELED_CD,KEWConstants.ACTION_TAKEN_SU_APPROVED_CD},
52 new String[]{KEWConstants.ACTION_TAKEN_BLANKET_APPROVE_CD,KEWConstants.ACTION_TAKEN_ROUTED_CD,KEWConstants.ACTION_TAKEN_SAVED_CD,KEWConstants.ACTION_TAKEN_CANCELED_CD});
53
54
55
56
57
58 networkId = "pmckown";
59 document = this.checkActions(networkId, documentId,
60 new String[]{},
61 new String[]{KEWConstants.ACTION_TAKEN_BLANKET_APPROVE_CD,KEWConstants.ACTION_TAKEN_SU_CANCELED_CD,KEWConstants.ACTION_TAKEN_SU_APPROVED_CD,KEWConstants.ACTION_TAKEN_ROUTED_CD,KEWConstants.ACTION_TAKEN_SAVED_CD,KEWConstants.ACTION_TAKEN_CANCELED_CD});
62
63
64
65
66
67 networkId = "user1";
68 document = this.checkActions(networkId, documentId,
69 new String[]{KEWConstants.ACTION_TAKEN_ROUTED_CD,KEWConstants.ACTION_TAKEN_SAVED_CD,KEWConstants.ACTION_TAKEN_CANCELED_CD},
70 new String[]{KEWConstants.ACTION_TAKEN_BLANKET_APPROVE_CD,KEWConstants.ACTION_TAKEN_SU_CANCELED_CD,KEWConstants.ACTION_TAKEN_SU_APPROVED_CD});
71
72
73
74
75 document.saveDocument("");
76
77 networkId = "rkirkend";
78 document = this.checkActions(networkId, documentId,
79 new String[]{KEWConstants.ACTION_TAKEN_SU_CANCELED_CD,KEWConstants.ACTION_TAKEN_SU_APPROVED_CD},
80 new String[]{KEWConstants.ACTION_TAKEN_BLANKET_APPROVE_CD,KEWConstants.ACTION_TAKEN_ROUTED_CD,KEWConstants.ACTION_TAKEN_SAVED_CD,KEWConstants.ACTION_TAKEN_CANCELED_CD});
81
82
83
84
85
86 networkId = "pmckown";
87 document = this.checkActions(networkId, documentId,
88 new String[]{},
89 new String[]{KEWConstants.ACTION_TAKEN_BLANKET_APPROVE_CD,KEWConstants.ACTION_TAKEN_SU_CANCELED_CD,KEWConstants.ACTION_TAKEN_SU_APPROVED_CD,KEWConstants.ACTION_TAKEN_ROUTED_CD,KEWConstants.ACTION_TAKEN_SAVED_CD,KEWConstants.ACTION_TAKEN_CANCELED_CD});
90
91
92
93
94
95 networkId = "user1";
96 document = this.checkActions(networkId, documentId,
97 new String[]{KEWConstants.ACTION_TAKEN_ROUTED_CD,KEWConstants.ACTION_TAKEN_SAVED_CD,KEWConstants.ACTION_TAKEN_CANCELED_CD},
98 new String[]{KEWConstants.ACTION_TAKEN_BLANKET_APPROVE_CD,KEWConstants.ACTION_TAKEN_SU_CANCELED_CD,KEWConstants.ACTION_TAKEN_SU_APPROVED_CD});
99
100
101
102
103 document.route("");
104 assertEquals("Document should be ENROUTE", DocumentStatus.ENROUTE, document.getStatus());
105
106 networkId = "user1";
107 document = this.checkActions(networkId, documentId,
108 new String[]{},
109 new String[]{KEWConstants.ACTION_TAKEN_SAVED_CD,KEWConstants.ACTION_TAKEN_ROUTED_CD,KEWConstants.ACTION_TAKEN_BLANKET_APPROVE_CD,KEWConstants.ACTION_TAKEN_SU_CANCELED_CD,KEWConstants.ACTION_TAKEN_SU_APPROVED_CD,KEWConstants.ACTION_TAKEN_CANCELED_CD});
110
111
112
113
114
115 networkId = "rkirkend";
116 document = this.checkActions(networkId, documentId,
117 new String[]{KEWConstants.ACTION_TAKEN_BLANKET_APPROVE_CD,KEWConstants.ACTION_TAKEN_SU_CANCELED_CD,KEWConstants.ACTION_TAKEN_SU_APPROVED_CD,KEWConstants.ACTION_TAKEN_APPROVED_CD},
118 new String[]{KEWConstants.ACTION_TAKEN_SAVED_CD,KEWConstants.ACTION_TAKEN_ROUTED_CD});
119
120
121
122
123
124
125 document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("bmcgough"), document.getDocumentId());
126 document.approve("");
127
128 document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("pmckown"), document.getDocumentId());
129 document.approve("");
130
131
132
133 document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("jhopf"), document.getDocumentId());
134
135 document.acknowledge("");
136 document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName("temay"), document.getDocumentId());
137 document.acknowledge("");
138 }
139
140 private WorkflowDocument checkActions(String networkId,String documentId,String[] validActionsAllowed,String[] invalidActionsNotAllowed) throws Exception {
141 WorkflowDocument document = WorkflowDocumentFactory.loadDocument(getPrincipalIdForName(networkId), documentId);
142 org.kuali.rice.kew.api.action.ValidActions validActions = document.getValidActions();
143 Set<ActionType> validActionsSet = validActions.getValidActions();
144
145 for (int i = 0; i < validActionsAllowed.length; i++) {
146 String actionAllowed = validActionsAllowed[i];
147 if (!validActionsSet.contains(ActionType.fromCode(actionAllowed))) {
148 fail("Action '" + KEWConstants.ACTION_TAKEN_CD.get(actionAllowed) + "' should be allowed for user " + networkId);
149 }
150 }
151
152 for (int j = 0; j < invalidActionsNotAllowed.length; j++) {
153 String actionDisallowed = invalidActionsNotAllowed[j];
154 if (validActionsSet.contains(actionDisallowed)) {
155 fail("Action '" + KEWConstants.ACTION_TAKEN_CD.get(actionDisallowed) + "' should not be allowed for user " + networkId);
156 }
157 }
158
159 return document;
160 }
161 }