Skip to content

Commit 6f42d52

Browse files
committed
Optimize imports and format and sort
1 parent c5ec145 commit 6f42d52

File tree

3 files changed

+100
-77
lines changed

3 files changed

+100
-77
lines changed

tutorial-process/src/test/java/dev/dsf/process/tutorial/exercise_7/BpmnAndUserTaskListenerTest.java

Lines changed: 72 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -10,14 +10,10 @@
1010
import java.lang.reflect.Constructor;
1111
import java.lang.reflect.InvocationTargetException;
1212
import java.lang.reflect.Method;
13-
import java.lang.reflect.Modifier;
1413
import java.util.ArrayList;
15-
import java.util.Arrays;
16-
import java.util.HashMap;
1714
import java.util.List;
1815
import java.util.Map;
1916
import java.util.Optional;
20-
import java.util.function.BiConsumer;
2117
import java.util.function.Predicate;
2218
import java.util.stream.Collectors;
2319

@@ -58,7 +54,8 @@ public static void loadResources()
5854
ProcessPluginDefinition definition = new TutorialProcessPluginDefinition();
5955
ProcessPluginImpl processPlugin = TestProcessPluginGenerator.generate(definition, false,
6056
BpmnAndUserTaskListenerTest.class);
61-
boolean initialized = processPlugin.initializeAndValidateResources(ConstantsTutorial.TUTORIAL_DIC_ORGANIZATION_IDENTIFIER);
57+
boolean initialized = processPlugin
58+
.initializeAndValidateResources(ConstantsTutorial.TUTORIAL_DIC_ORGANIZATION_IDENTIFIER);
6259

6360
assertEquals(true, initialized);
6461
}
@@ -70,8 +67,8 @@ public void testVoteBpmnFile()
7067
String processId = "dsfdev_vote";
7168
String questionnaireUrl = "http://dsf.dev/fhir/Questionnaire/user-vote|#{version}";
7269

73-
BpmnModelInstance model = Bpmn.readModelFromStream(
74-
this.getClass().getClassLoader().getResourceAsStream(filename));
70+
BpmnModelInstance model = Bpmn
71+
.readModelFromStream(this.getClass().getClassLoader().getResourceAsStream(filename));
7572
assertNotNull(model);
7673

7774
List<Process> processes = model.getModelElementsByType(Process.class).stream()
@@ -84,54 +81,73 @@ public void testVoteBpmnFile()
8481
int userTaskCount = process.getChildElementsByType(UserTask.class).size();
8582
assertTrue(errorMissingUserTask, userTaskCount > 0);
8683

87-
String errorMissingCorrectUserTask = "Process '" + processId + "' in file '" + filename + " is missing User Task with incoming flow from exclusive gateway with name 'User Vote?' and outgoing flow to service task with name 'Save User Vote'";
84+
String errorMissingCorrectUserTask = "Process '" + processId + "' in file '" + filename
85+
+ " is missing User Task with incoming flow from exclusive gateway with name 'User Vote?' and outgoing flow to service task with name 'Save User Vote'";
8886
Optional<UserTask> optUserTask = process.getChildElementsByType(UserTask.class).stream()
89-
.filter(userTask -> userTask.getIncoming().stream().anyMatch(isFlowConnectingUserTaskAndExclusiveGateway(userTask)))
90-
.filter(userTask -> userTask.getOutgoing().stream().anyMatch(isFlowConnectingUserTaskAndSaveUserVoteServer(userTask))).findFirst();
87+
.filter(userTask -> userTask.getIncoming().stream()
88+
.anyMatch(isFlowConnectingUserTaskAndExclusiveGateway(userTask)))
89+
.filter(userTask -> userTask.getOutgoing().stream()
90+
.anyMatch(isFlowConnectingUserTaskAndSaveUserVoteServer(userTask)))
91+
.findFirst();
9192
assertTrue(errorMissingCorrectUserTask, optUserTask.isPresent());
9293
UserTask userTask = optUserTask.get();
9394

94-
String errorUserTaskIncomingFlowMissingCondition =
95-
"User Task in process '" + processId + "' in file '" + filename + " with name " + userTask.getOutgoing()
96-
+ " is missing condition expression '${userVote}' on incoming flow from exclusive gateway with name 'User Vote?'";
95+
String errorUserTaskIncomingFlowMissingCondition = "User Task in process '" + processId + "' in file '"
96+
+ filename + " with name " + userTask.getOutgoing()
97+
+ " is missing condition expression '${userVote}' on incoming flow from exclusive gateway with name 'User Vote?'";
9798
assertTrue(errorUserTaskIncomingFlowMissingCondition,
98-
userTask.getIncoming().stream().filter(isFlowConnectingUserTaskAndExclusiveGateway(userTask)).allMatch(hasCorrectConditionExpression()));
99+
userTask.getIncoming().stream().filter(isFlowConnectingUserTaskAndExclusiveGateway(userTask))
100+
.allMatch(hasCorrectConditionExpression()));
99101

100-
String errorUserTaskIsMissingCorrectFormKey =
101-
"User Task in process '" + processId + "' in file '" + filename + " with name " + userTask.getOutgoing()
102-
+ " is missing Form Key with value " + questionnaireUrl;
102+
String errorUserTaskIsMissingCorrectFormKey = "User Task in process '" + processId + "' in file '" + filename
103+
+ " with name " + userTask.getOutgoing() + " is missing Form Key with value " + questionnaireUrl;
103104
assertEquals(errorUserTaskIsMissingCorrectFormKey, userTask.getCamundaFormKey(), questionnaireUrl);
104105

105106
String packageName = "dev.dsf.process.tutorial.listener";
106-
String errorNoUserTaskListenerFound =
107-
"No class extending DefaultUserTaskListener found in package '" + packageName + "'. Unable to verify if User Task has correct Task Listener set.";
107+
String errorNoUserTaskListenerFound = "No class extending DefaultUserTaskListener found in package '"
108+
+ packageName + "'. Unable to verify if User Task has correct Task Listener set.";
108109
List<Class<? extends DefaultUserTaskListener>> userTaskListeners = Utils.getUserTaskListeners(packageName);
109110
assertTrue(errorNoUserTaskListenerFound, !userTaskListeners.isEmpty());
110111

111-
String errorUserTaskIsMissingTaskListener =
112-
"User Task in process '" + processId + "' in file '" + filename + " with name " + userTask.getOutgoing()
113-
+ " is missing at least one Task Listener which extends DefaultUserTaskListener. Found classes to add which extend DefaultUserTaskListener: " + userTaskListeners.stream().map(Class::getSimpleName).reduce("", (i, next) -> i + next + " ");
114-
List<CamundaTaskListener> camundaTaskListeners = userTask.getExtensionElements().getElements().stream()
115-
.filter(extensionElement -> extensionElement instanceof CamundaTaskListener)
112+
String errorUserTaskIsMissingTaskListener = "User Task in process '" + processId + "' in file '" + filename
113+
+ " with name " + userTask.getOutgoing()
114+
+ " is missing at least one Task Listener which extends DefaultUserTaskListener. Found classes to add which extend DefaultUserTaskListener: "
115+
+ userTaskListeners.stream().map(Class::getSimpleName).reduce("", (i, next) -> i + next + " ");
116+
List<CamundaTaskListener> camundaTaskListeners = userTask
117+
.getExtensionElements().getElements().stream().filter(
118+
extensionElement -> extensionElement instanceof CamundaTaskListener)
116119
.map(extensionElement -> (CamundaTaskListener) extensionElement)
117-
.filter(camundaTaskListener -> userTaskListeners.stream().anyMatch(userTaskListener -> userTaskListener.getName().equals(camundaTaskListener.getAttributeValue("class"))))
120+
.filter(camundaTaskListener -> userTaskListeners.stream().anyMatch(userTaskListener -> userTaskListener
121+
.getName().equals(camundaTaskListener.getAttributeValue("class"))))
118122
.toList();
119123
assertTrue(errorUserTaskIsMissingTaskListener, !camundaTaskListeners.isEmpty());
120124

121-
List<Class<? extends DefaultUserTaskListener>> userTaskListenersInUserTask = userTaskListeners.stream().filter(userTaskListener -> camundaTaskListeners.stream().anyMatch(camundaTaskListener -> camundaTaskListener.getAttributeValue("class").equals(userTaskListener.getName()))).toList();
122-
userTaskListenersInUserTask.forEach(userTaskListener -> assertEquals(Utils.errorMessageBeanMethod(userTaskListener), 1, Utils.countBeanMethods(userTaskListener)));
123-
124-
Map<Class<? extends DefaultUserTaskListener>, List<String>> userTaskListenersWithErrors = userTaskListenersInUserTask.stream().collect(Collectors.toMap(userTaskListener -> userTaskListener, this::validateUserTaskListener));
125-
126-
String errorNoTaskListenerInUserTaskIsValid = "User Task in process '" + processId + "' in file '" + filename + " with name " + userTask.getOutgoing() + " is missing at least one valid UserTaskListener. Errors are: \n";
127-
errorNoTaskListenerInUserTaskIsValid += userTaskListenersWithErrors.keySet().stream().map(key -> formatErrors(key, userTaskListenersWithErrors.get(key))).collect(Collectors.joining());
128-
129-
assertTrue(errorNoTaskListenerInUserTaskIsValid, userTaskListenersWithErrors.keySet().stream().anyMatch(userTaskListener -> userTaskListenersWithErrors.get(userTaskListener).isEmpty()));
125+
List<Class<? extends DefaultUserTaskListener>> userTaskListenersInUserTask = userTaskListeners.stream().filter(
126+
userTaskListener -> camundaTaskListeners.stream().anyMatch(camundaTaskListener -> camundaTaskListener
127+
.getAttributeValue("class").equals(userTaskListener.getName())))
128+
.toList();
129+
userTaskListenersInUserTask
130+
.forEach(userTaskListener -> assertEquals(Utils.errorMessageBeanMethod(userTaskListener), 1,
131+
Utils.countBeanMethods(userTaskListener)));
132+
133+
Map<Class<? extends DefaultUserTaskListener>, List<String>> userTaskListenersWithErrors = userTaskListenersInUserTask
134+
.stream()
135+
.collect(Collectors.toMap(userTaskListener -> userTaskListener, this::validateUserTaskListener));
136+
137+
String errorNoTaskListenerInUserTaskIsValid = "User Task in process '" + processId + "' in file '" + filename
138+
+ " with name " + userTask.getOutgoing()
139+
+ " is missing at least one valid UserTaskListener. Errors are: \n";
140+
errorNoTaskListenerInUserTaskIsValid += userTaskListenersWithErrors.keySet().stream()
141+
.map(key -> formatErrors(key, userTaskListenersWithErrors.get(key))).collect(Collectors.joining());
142+
143+
assertTrue(errorNoTaskListenerInUserTaskIsValid, userTaskListenersWithErrors.keySet().stream()
144+
.anyMatch(userTaskListener -> userTaskListenersWithErrors.get(userTaskListener).isEmpty()));
130145
}
131146

132147
private Predicate<SequenceFlow> isFlowConnectingUserTaskAndExclusiveGateway(UserTask userTask)
133148
{
134-
return flow -> flow.getTarget().equals(userTask) && flow.getSource() instanceof ExclusiveGateway && flow.getSource().getName().equals("User Vote?");
149+
return flow -> flow.getTarget().equals(userTask) && flow.getSource() instanceof ExclusiveGateway
150+
&& flow.getSource().getName().equals("User Vote?");
135151
}
136152

137153
private Predicate<SequenceFlow> hasCorrectConditionExpression()
@@ -141,15 +157,16 @@ private Predicate<SequenceFlow> hasCorrectConditionExpression()
141157

142158
private Predicate<SequenceFlow> isFlowConnectingUserTaskAndSaveUserVoteServer(UserTask userTask)
143159
{
144-
return flow -> flow.getSource().equals(userTask) && flow.getTarget() instanceof ServiceTask && flow.getTarget().getName().equals("Save User Vote");
160+
return flow -> flow.getSource().equals(userTask) && flow.getTarget() instanceof ServiceTask
161+
&& flow.getTarget().getName().equals("Save User Vote");
145162
}
146163

147164
private String formatErrors(Class<? extends DefaultUserTaskListener> userTaskListener, List<String> errors)
148165
{
149166
String formatted = "";
150167

151168
formatted += "Class: " + userTaskListener.getSimpleName() + "\n";
152-
formatted += " Errors:\n" + errors.stream().reduce("", (i, next) -> i + " " + next + "\n");
169+
formatted += " Errors:\n" + errors.stream().reduce("", (i, next) -> i + " " + next + "\n");
153170

154171
return formatted;
155172
}
@@ -162,24 +179,26 @@ private List<String> validateUserTaskListener(Class<? extends DefaultUserTaskLis
162179
List<String> errors = new ArrayList<>();
163180
try
164181
{
165-
Constructor<? extends DefaultUserTaskListener> constructor = userTaskListenerClass.getConstructor(
166-
ProcessPluginApi.class);
182+
Constructor<? extends DefaultUserTaskListener> constructor = userTaskListenerClass
183+
.getConstructor(ProcessPluginApi.class);
167184

168185
ProcessPluginApi apiMock = Mockito.mock(ProcessPluginApi.class);
169186
TaskHelper taskHelperMock = Mockito.mock(TaskHelper.class);
170187
DelegateTask taskMock = Mockito.mock(DelegateTask.class);
171188
QuestionnaireResponse questionnaireResponseMock = Mockito.mock(QuestionnaireResponse.class);
172189
Variables variablesMock = Mockito.mock(Variables.class);
173190
Task startTaskMock = Mockito.mock(Task.class);
174-
QuestionnaireResponse.QuestionnaireResponseItemComponent itemMock = Mockito.mock(QuestionnaireResponse.QuestionnaireResponseItemComponent.class);
191+
QuestionnaireResponse.QuestionnaireResponseItemComponent itemMock = Mockito
192+
.mock(QuestionnaireResponse.QuestionnaireResponseItemComponent.class);
175193

176194
String binaryQuestion = "test?";
177195

178196
Mockito.lenient().when(apiMock.getVariables(any())).thenReturn(variablesMock);
179197
Mockito.lenient().when(apiMock.getTaskHelper()).thenReturn(taskHelperMock);
180198
Mockito.lenient().when(variablesMock.getStartTask()).thenReturn(startTaskMock);
181-
Mockito.lenient().when(taskHelperMock.getFirstInputParameterStringValue(startTaskMock, CODESYSTEM_VOTING_PROCESS,
182-
CODESYSTEM_VOTING_PROCESS_VALUE_BINARY_QUESTION)).thenReturn(Optional.of(binaryQuestion));
199+
Mockito.lenient().when(taskHelperMock.getFirstInputParameterStringValue(startTaskMock,
200+
CODESYSTEM_VOTING_PROCESS, CODESYSTEM_VOTING_PROCESS_VALUE_BINARY_QUESTION))
201+
.thenReturn(Optional.of(binaryQuestion));
183202
Mockito.lenient().when(questionnaireResponseMock.getItem()).thenReturn(List.of(itemMock));
184203
Mockito.lenient().when(itemMock.getLinkId()).thenReturn(CODESYSTEM_VOTING_PROCESS_VALUE_BINARY_QUESTION);
185204
Mockito.lenient().when(itemMock.getText()).thenReturn("foo");
@@ -195,15 +214,21 @@ private List<String> validateUserTaskListener(Class<? extends DefaultUserTaskLis
195214
.filter(invocation -> invocation.getMethod().getName().equals("getFirstInputParameterStringValue"))
196215
.filter(invocation -> invocation.getArguments()[0].equals(startTaskMock))
197216
.filter(invocation -> invocation.getArguments()[1].equals(CODESYSTEM_VOTING_PROCESS))
198-
.filter(invocation -> invocation.getArguments()[2].equals(CODESYSTEM_VOTING_PROCESS_VALUE_BINARY_QUESTION))
217+
.filter(invocation -> invocation.getArguments()[2]
218+
.equals(CODESYSTEM_VOTING_PROCESS_VALUE_BINARY_QUESTION))
199219
.findFirst();
200-
if(optionalInvocation.isEmpty()) errors.add("Expected one call to TaskHelper#getFirstInputParameterStringValue for Start Task and CodeSystem '" + CODESYSTEM_VOTING_PROCESS + "' and Code '" + CODESYSTEM_VOTING_PROCESS_VALUE_BINARY_QUESTION + "'");
220+
if (optionalInvocation.isEmpty())
221+
errors.add(
222+
"Expected one call to TaskHelper#getFirstInputParameterStringValue for Start Task and CodeSystem '"
223+
+ CODESYSTEM_VOTING_PROCESS + "' and Code '"
224+
+ CODESYSTEM_VOTING_PROCESS_VALUE_BINARY_QUESTION + "'");
201225

202226
optionalInvocation = Mockito.mockingDetails(itemMock).getInvocations().stream()
203227
.filter(invocation -> invocation.getMethod().getName().equals("setText"))
204-
.filter(invocation -> invocation.getArguments()[0].equals(binaryQuestion))
205-
.findFirst();
206-
if(optionalInvocation.isEmpty()) errors.add("Expected one call to QuestionnaireResponseItemComponent#setText for the QuestionnaireResponseItemComponent with linkId 'binary-question'");
228+
.filter(invocation -> invocation.getArguments()[0].equals(binaryQuestion)).findFirst();
229+
if (optionalInvocation.isEmpty())
230+
errors.add(
231+
"Expected one call to QuestionnaireResponseItemComponent#setText for the QuestionnaireResponseItemComponent with linkId 'binary-question'");
207232
}
208233
catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | InstantiationException e)
209234
{

0 commit comments

Comments
 (0)