Skip to content

Commit 509b937

Browse files
committed
Various fixes for tests
1 parent c1305db commit 509b937

File tree

8 files changed

+82
-90
lines changed

8 files changed

+82
-90
lines changed
Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
1-
package dev.dsf.process.tutorial.exercise_7;
1+
package dev.dsf.process.tutorial;
2+
3+
import static org.springframework.beans.factory.config.ConfigurableBeanFactory.SCOPE_PROTOTYPE;
24

35
import java.lang.reflect.Modifier;
46
import java.util.ArrayList;
@@ -8,6 +10,7 @@
810
import org.reflections.Reflections;
911
import org.reflections.scanners.Scanners;
1012
import org.springframework.context.annotation.Bean;
13+
import org.springframework.context.annotation.Scope;
1114

1215
import dev.dsf.bpe.v1.activity.DefaultUserTaskListener;
1316
import dev.dsf.process.tutorial.spring.config.TutorialConfig;
@@ -29,7 +32,8 @@ public static long countBeanMethods(Class<?> returnType)
2932

3033
public static String errorMessageBeanMethod(Class<?> returnType)
3134
{
32-
return "One public spring bean method with return type " + returnType.getSimpleName() + " and annotation "
33-
+ Bean.class.getSimpleName() + " expected in " + TutorialConfig.class.getSimpleName();
35+
return "One public spring bean method with return type " + returnType.getSimpleName() + ", annotation "
36+
+ Bean.class.getSimpleName() + " and annotation " + Scope.class.getSimpleName() + " with type "
37+
+ SCOPE_PROTOTYPE + " expected in " + TutorialConfig.class.getSimpleName();
3438
}
3539
}
Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,20 @@
11
package dev.dsf.process.tutorial.exercise_1.spring.config;
22

3+
import static dev.dsf.process.tutorial.Utils.countBeanMethods;
4+
import static dev.dsf.process.tutorial.Utils.errorMessageBeanMethod;
35
import static org.junit.Assert.assertEquals;
46

5-
import java.lang.reflect.Modifier;
6-
import java.util.Arrays;
7+
import java.security.DigestException;
78

89
import org.junit.Test;
9-
import org.springframework.context.annotation.Bean;
1010

1111
import dev.dsf.process.tutorial.service.DicTask;
12-
import dev.dsf.process.tutorial.spring.config.TutorialConfig;
1312

1413
public class TutorialConfigTest
1514
{
1615
@Test
1716
public void testDicTaskServiceBeanDefined() throws Exception
1817
{
19-
long count = Arrays.stream(TutorialConfig.class.getMethods())
20-
.filter(m -> DicTask.class.equals(m.getReturnType())).filter(m -> Modifier.isPublic(m.getModifiers()))
21-
.filter(m -> m.getAnnotation(Bean.class) != null).count();
22-
23-
String errorMethod = "Configuration class " + TutorialConfig.class.getSimpleName() + " contains " + count
24-
+ " public spring bean methods with return type " + DicTask.class.getSimpleName() + ", expected 1";
25-
assertEquals(errorMethod, 1, count);
18+
assertEquals(errorMessageBeanMethod(DigestException.class), 1, countBeanMethods(DicTask.class));
2619
}
2720
}

tutorial-process/src/test/java/dev/dsf/process/tutorial/exercise_2/spring/config/TutorialConfigTest.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package dev.dsf.process.tutorial.exercise_2.spring.config;
22

3+
import static dev.dsf.process.tutorial.Utils.countBeanMethods;
4+
import static dev.dsf.process.tutorial.Utils.errorMessageBeanMethod;
35
import static org.junit.Assert.assertEquals;
46

5-
import java.lang.reflect.Modifier;
7+
import java.security.DigestException;
68
import java.util.Arrays;
79

810
import org.junit.Test;
911
import org.springframework.beans.factory.annotation.Value;
10-
import org.springframework.context.annotation.Bean;
1112

1213
import dev.dsf.bpe.v1.documentation.ProcessDocumentation;
1314
import dev.dsf.process.tutorial.service.DicTask;
@@ -18,14 +19,7 @@ public class TutorialConfigTest
1819
@Test
1920
public void testDicTaskServiceBeanDefined() throws Exception
2021
{
21-
long count = Arrays.stream(TutorialConfig.class.getMethods())
22-
.filter(m -> DicTask.class.equals(m.getReturnType())).filter(m -> Modifier.isPublic(m.getModifiers()))
23-
.filter(m -> m.getAnnotation(Bean.class) != null).count();
24-
25-
String errorMethod = "One public spring bean methods with return type " + DicTask.class.getSimpleName()
26-
+ " and annotation " + Bean.class.getSimpleName() + " expected in "
27-
+ TutorialConfig.class.getSimpleName();
28-
assertEquals(errorMethod, 1, count);
22+
assertEquals(errorMessageBeanMethod(DigestException.class), 1, countBeanMethods(DicTask.class));
2923
}
3024

3125
@Test

tutorial-process/src/test/java/dev/dsf/process/tutorial/exercise_3/spring/config/TutorialConfigTest.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package dev.dsf.process.tutorial.exercise_3.spring.config;
22

3+
import static dev.dsf.process.tutorial.Utils.countBeanMethods;
4+
import static dev.dsf.process.tutorial.Utils.errorMessageBeanMethod;
35
import static org.junit.Assert.assertEquals;
46

5-
import java.lang.reflect.Modifier;
7+
import java.security.DigestException;
68
import java.util.Arrays;
79

810
import org.junit.Test;
911
import org.springframework.beans.factory.annotation.Value;
10-
import org.springframework.context.annotation.Bean;
1112

1213
import dev.dsf.bpe.v1.documentation.ProcessDocumentation;
1314
import dev.dsf.process.tutorial.service.DicTask;
@@ -18,14 +19,7 @@ public class TutorialConfigTest
1819
@Test
1920
public void testDicTaskServiceBeanDefined() throws Exception
2021
{
21-
long count = Arrays.stream(TutorialConfig.class.getMethods())
22-
.filter(m -> DicTask.class.equals(m.getReturnType())).filter(m -> Modifier.isPublic(m.getModifiers()))
23-
.filter(m -> m.getAnnotation(Bean.class) != null).count();
24-
25-
String errorMethod = "One public spring bean methods with return type " + DicTask.class.getSimpleName()
26-
+ " and annotation " + Bean.class.getSimpleName() + " expected in "
27-
+ TutorialConfig.class.getSimpleName();
28-
assertEquals(errorMethod, 1, count);
22+
assertEquals(errorMessageBeanMethod(DigestException.class), 1, countBeanMethods(DicTask.class));
2923
}
3024

3125
@Test

tutorial-process/src/test/java/dev/dsf/process/tutorial/exercise_4/config/TutorialConfigTest.java

Lines changed: 5 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
11
package dev.dsf.process.tutorial.exercise_4.config;
22

3+
import static dev.dsf.process.tutorial.Utils.countBeanMethods;
4+
import static dev.dsf.process.tutorial.Utils.errorMessageBeanMethod;
35
import static org.junit.Assert.assertEquals;
46

5-
import java.lang.reflect.Modifier;
7+
import java.security.DigestException;
68
import java.util.Arrays;
79

810
import org.junit.Test;
911
import org.springframework.beans.factory.annotation.Value;
10-
import org.springframework.context.annotation.Bean;
1112

1213
import dev.dsf.bpe.v1.documentation.ProcessDocumentation;
1314
import dev.dsf.process.tutorial.message.HelloCosMessage;
@@ -19,28 +20,13 @@ public class TutorialConfigTest
1920
@Test
2021
public void testDicTaskServiceBeanDefined() throws Exception
2122
{
22-
long count = Arrays.stream(TutorialConfig.class.getMethods())
23-
.filter(m -> DicTask.class.equals(m.getReturnType())).filter(m -> Modifier.isPublic(m.getModifiers()))
24-
.filter(m -> m.getAnnotation(Bean.class) != null).count();
25-
26-
String errorMethod = "One public spring bean methods with return type " + DicTask.class.getSimpleName()
27-
+ " and annotation " + Bean.class.getSimpleName() + " expected in "
28-
+ TutorialConfig.class.getSimpleName();
29-
assertEquals(errorMethod, 1, count);
23+
assertEquals(errorMessageBeanMethod(DigestException.class), 1, countBeanMethods(DicTask.class));
3024
}
3125

3226
@Test
3327
public void testCosMessageBeanDefined() throws Exception
3428
{
35-
long count = Arrays.stream(TutorialConfig.class.getMethods())
36-
.filter(m -> HelloCosMessage.class.equals(m.getReturnType()))
37-
.filter(m -> Modifier.isPublic(m.getModifiers())).filter(m -> m.getAnnotation(Bean.class) != null)
38-
.count();
39-
40-
String errorMethod = "One public spring bean methods with return type " + HelloCosMessage.class.getSimpleName()
41-
+ " and annotation " + Bean.class.getSimpleName() + " expected in "
42-
+ TutorialConfig.class.getSimpleName();
43-
assertEquals(errorMethod, 1, count);
29+
assertEquals(errorMessageBeanMethod(HelloCosMessage.class), 1, countBeanMethods(HelloCosMessage.class));
4430
}
4531

4632
@Test

tutorial-process/src/test/java/dev/dsf/process/tutorial/exercise_6/config/TutorialConfigTest.java

Lines changed: 2 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package dev.dsf.process.tutorial.exercise_6.config;
22

3+
import static dev.dsf.process.tutorial.Utils.countBeanMethods;
4+
import static dev.dsf.process.tutorial.Utils.errorMessageBeanMethod;
35
import static org.junit.Assert.assertEquals;
46

5-
import java.lang.reflect.Modifier;
67
import java.util.Arrays;
78

89
import org.junit.Test;
910
import org.springframework.beans.factory.annotation.Value;
10-
import org.springframework.context.annotation.Bean;
1111

1212
import dev.dsf.bpe.v1.documentation.ProcessDocumentation;
1313
import dev.dsf.process.tutorial.message.GoodbyeDicMessage;
@@ -20,19 +20,6 @@
2020

2121
public class TutorialConfigTest
2222
{
23-
private long countBeanMethods(Class<?> returnType)
24-
{
25-
return Arrays.stream(TutorialConfig.class.getMethods()).filter(m -> returnType.equals(m.getReturnType()))
26-
.filter(m -> Modifier.isPublic(m.getModifiers())).filter(m -> m.getAnnotation(Bean.class) != null)
27-
.count();
28-
}
29-
30-
private String errorMessageBeanMethod(Class<?> returnType)
31-
{
32-
return "One public spring bean method with return type " + returnType.getSimpleName() + " and annotation "
33-
+ Bean.class.getSimpleName() + " expected in " + TutorialConfig.class.getSimpleName();
34-
}
35-
3623
@Test
3724
public void testDicTaskBeanDefined() throws Exception
3825
{

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

Lines changed: 49 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,17 @@
1313
import java.util.ArrayList;
1414
import java.util.List;
1515
import java.util.Map;
16+
import java.util.Objects;
1617
import java.util.Optional;
1718
import java.util.function.Predicate;
1819
import java.util.stream.Collectors;
1920

2021
import org.camunda.bpm.engine.delegate.DelegateTask;
2122
import org.camunda.bpm.model.bpmn.Bpmn;
2223
import org.camunda.bpm.model.bpmn.BpmnModelInstance;
24+
import org.camunda.bpm.model.bpmn.instance.ConditionExpression;
2325
import org.camunda.bpm.model.bpmn.instance.ExclusiveGateway;
26+
import org.camunda.bpm.model.bpmn.instance.FlowNode;
2427
import org.camunda.bpm.model.bpmn.instance.Process;
2528
import org.camunda.bpm.model.bpmn.instance.SequenceFlow;
2629
import org.camunda.bpm.model.bpmn.instance.ServiceTask;
@@ -44,6 +47,7 @@
4447
import dev.dsf.process.tutorial.ConstantsTutorial;
4548
import dev.dsf.process.tutorial.TestProcessPluginGenerator;
4649
import dev.dsf.process.tutorial.TutorialProcessPluginDefinition;
50+
import dev.dsf.process.tutorial.Utils;
4751

4852
@RunWith(MockitoJUnitRunner.class)
4953
public class BpmnAndUserTaskListenerTest
@@ -77,7 +81,7 @@ public void testVoteBpmnFile()
7781

7882
Process process = processes.get(0);
7983

80-
String errorMissingUserTask = "Process '" + processId + "' in file '" + filename + "is missing a User Task";
84+
String errorMissingUserTask = "Process '" + processId + "' in file '" + filename + "' is missing a User Task";
8185
int userTaskCount = process.getChildElementsByType(UserTask.class).size();
8286
assertTrue(errorMissingUserTask, userTaskCount > 0);
8387

@@ -87,21 +91,21 @@ public void testVoteBpmnFile()
8791
.filter(userTask -> userTask.getIncoming().stream()
8892
.anyMatch(isFlowConnectingUserTaskAndExclusiveGateway(userTask)))
8993
.filter(userTask -> userTask.getOutgoing().stream()
90-
.anyMatch(isFlowConnectingUserTaskAndSaveUserVoteServer(userTask)))
94+
.anyMatch(isFlowConnectingUserTaskAndSaveUserVoteServiceTask(userTask)))
9195
.findFirst();
9296
assertTrue(errorMissingCorrectUserTask, optUserTask.isPresent());
9397
UserTask userTask = optUserTask.get();
9498

9599
String errorUserTaskIncomingFlowMissingCondition = "User Task in process '" + processId + "' in file '"
96-
+ filename + " with name " + userTask.getOutgoing()
100+
+ filename + "' with name " + userTask.getName()
97101
+ " is missing condition expression '${userVote}' on incoming flow from exclusive gateway with name 'User Vote?'";
98102
assertTrue(errorUserTaskIncomingFlowMissingCondition,
99103
userTask.getIncoming().stream().filter(isFlowConnectingUserTaskAndExclusiveGateway(userTask))
100104
.allMatch(hasCorrectConditionExpression()));
101105

102106
String errorUserTaskIsMissingCorrectFormKey = "User Task in process '" + processId + "' in file '" + filename
103-
+ " with name " + userTask.getOutgoing() + " is missing Form Key with value " + questionnaireUrl;
104-
assertEquals(errorUserTaskIsMissingCorrectFormKey, userTask.getCamundaFormKey(), questionnaireUrl);
107+
+ "' with name " + userTask.getName() + " is missing Form Key with value " + questionnaireUrl;
108+
assertEquals(errorUserTaskIsMissingCorrectFormKey, questionnaireUrl, userTask.getCamundaFormKey());
105109

106110
String packageName = "dev.dsf.process.tutorial.listener";
107111
String errorNoUserTaskListenerFound = "No class extending DefaultUserTaskListener found in package '"
@@ -110,7 +114,7 @@ public void testVoteBpmnFile()
110114
assertTrue(errorNoUserTaskListenerFound, !userTaskListeners.isEmpty());
111115

112116
String errorUserTaskIsMissingTaskListener = "User Task in process '" + processId + "' in file '" + filename
113-
+ " with name " + userTask.getOutgoing()
117+
+ "' with name " + userTask.getName()
114118
+ " is missing at least one Task Listener which extends DefaultUserTaskListener. Found classes to add which extend DefaultUserTaskListener: "
115119
+ userTaskListeners.stream().map(Class::getSimpleName).reduce("", (i, next) -> i + next + " ");
116120
List<CamundaTaskListener> camundaTaskListeners = userTask
@@ -135,8 +139,8 @@ public void testVoteBpmnFile()
135139
.collect(Collectors.toMap(userTaskListener -> userTaskListener, this::validateUserTaskListener));
136140

137141
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";
142+
+ " with name " + userTask.getName()
143+
+ "' is missing at least one valid UserTaskListener. Errors are: \n";
140144
errorNoTaskListenerInUserTaskIsValid += userTaskListenersWithErrors.keySet().stream()
141145
.map(key -> formatErrors(key, userTaskListenersWithErrors.get(key))).collect(Collectors.joining());
142146

@@ -146,27 +150,51 @@ public void testVoteBpmnFile()
146150

147151
private Predicate<SequenceFlow> isFlowConnectingUserTaskAndExclusiveGateway(UserTask userTask)
148152
{
149-
return flow -> flow.getTarget().equals(userTask) && flow.getSource() instanceof ExclusiveGateway
150-
&& flow.getSource().getName().equals("User Vote?");
153+
return flow ->
154+
{
155+
FlowNode target = flow.getTarget();
156+
FlowNode source = flow.getSource();
157+
if (Objects.nonNull(target) && Objects.nonNull(source))
158+
{
159+
return target.equals(userTask) && source instanceof ExclusiveGateway
160+
&& "User Vote?".equals(source.getName());
161+
}
162+
return false;
163+
};
151164
}
152165

153166
private Predicate<SequenceFlow> hasCorrectConditionExpression()
154167
{
155-
return flow -> flow.getConditionExpression().getTextContent().equals("${userVote}");
168+
return flow ->
169+
{
170+
ConditionExpression conditionExpression = flow.getConditionExpression();
171+
if (Objects.nonNull(conditionExpression))
172+
return "${userVote}".equals(conditionExpression.getTextContent());
173+
return false;
174+
};
156175
}
157176

158-
private Predicate<SequenceFlow> isFlowConnectingUserTaskAndSaveUserVoteServer(UserTask userTask)
177+
private Predicate<SequenceFlow> isFlowConnectingUserTaskAndSaveUserVoteServiceTask(UserTask userTask)
159178
{
160-
return flow -> flow.getSource().equals(userTask) && flow.getTarget() instanceof ServiceTask
161-
&& flow.getTarget().getName().equals("Save User Vote");
179+
return flow ->
180+
{
181+
FlowNode target = flow.getTarget();
182+
FlowNode source = flow.getSource();
183+
if (Objects.nonNull(target) && Objects.nonNull(source))
184+
{
185+
return source.equals(userTask) && target instanceof ServiceTask
186+
&& "Save User Vote".equals(target.getName());
187+
}
188+
return false;
189+
};
162190
}
163191

164192
private String formatErrors(Class<? extends DefaultUserTaskListener> userTaskListener, List<String> errors)
165193
{
166194
String formatted = "";
167195

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

171199
return formatted;
172200
}
@@ -230,11 +258,15 @@ private List<String> validateUserTaskListener(Class<? extends DefaultUserTaskLis
230258
errors.add(
231259
"Expected one call to QuestionnaireResponseItemComponent#setText for the QuestionnaireResponseItemComponent with linkId 'binary-question'");
232260
}
233-
catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException | InstantiationException e)
261+
catch (InvocationTargetException | IllegalAccessException | InstantiationException e)
234262
{
235263
throw new RuntimeException(e);
236264
}
237-
265+
catch (NoSuchMethodException e)
266+
{
267+
String errorUserTaskListenerDoesNotOverrideMethod = "Expected override of method 'beforeQuestionnaireResponseCreate'";
268+
errors.add(errorUserTaskListenerDoesNotOverrideMethod);
269+
}
238270
return errors;
239271
}
240272
}

0 commit comments

Comments
 (0)