/modules/flowable-cmmn-engine/src/test/java/org/flowable/cmmn/test/itemcontrol/DynamicPlanItemNameWithRepetitionBasedOnJsonArrayTest.java

https://github.com/flowable/flowable-engine · Java · 115 lines · 74 code · 21 blank · 20 comment · 0 complexity · fbd95f555a064feee57f6856e824f93d MD5 · raw file

  1. /* Licensed under the Apache License, Version 2.0 (the "License");
  2. * you may not use this file except in compliance with the License.
  3. * You may obtain a copy of the License at
  4. *
  5. * http://www.apache.org/licenses/LICENSE-2.0
  6. *
  7. * Unless required by applicable law or agreed to in writing, software
  8. * distributed under the License is distributed on an "AS IS" BASIS,
  9. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. * See the License for the specific language governing permissions and
  11. * limitations under the License.
  12. */
  13. package org.flowable.cmmn.test.itemcontrol;
  14. import static org.assertj.core.api.Assertions.assertThat;
  15. import static org.flowable.cmmn.api.runtime.PlanItemInstanceState.ACTIVE;
  16. import static org.flowable.cmmn.api.runtime.PlanItemInstanceState.AVAILABLE;
  17. import java.util.List;
  18. import org.flowable.cmmn.api.runtime.CaseInstance;
  19. import org.flowable.cmmn.api.runtime.PlanItemInstance;
  20. import org.flowable.cmmn.engine.test.CmmnDeployment;
  21. import org.flowable.cmmn.engine.test.FlowableCmmnTestCase;
  22. import org.junit.Test;
  23. import com.fasterxml.jackson.databind.ObjectMapper;
  24. import com.fasterxml.jackson.databind.node.ArrayNode;
  25. /**
  26. * Testing dynamic, expression based plan item name with local, collection based variables as well as case based ones.
  27. *
  28. * @author Micha Kiener
  29. */
  30. public class DynamicPlanItemNameWithRepetitionBasedOnJsonArrayTest extends FlowableCmmnTestCase {
  31. @Test
  32. @CmmnDeployment
  33. public void testDynamicNameWithRepetitionCollection() {
  34. ObjectMapper objectMapper = new ObjectMapper();
  35. ArrayNode arrayNode = objectMapper.createArrayNode();
  36. arrayNode.addObject().put("name", "A").put("foo", "a");
  37. arrayNode.addObject().put("name", "B").put("foo", "b");
  38. arrayNode.addObject().put("name", "C").put("foo", "c");
  39. CaseInstance caseInstance = cmmnRuntimeService.createCaseInstanceBuilder()
  40. .caseDefinitionKey("dynamicPlanItemNameTestOnJsonArray")
  41. .variable("myCollection", arrayNode)
  42. .variable("foo", "FooValue")
  43. .start();
  44. List<PlanItemInstance> planItemInstances = getPlanItemInstances(caseInstance.getId());
  45. assertThat(planItemInstances).hasSize(3);
  46. assertPlanItemInstanceState(planItemInstances, "Task (A / 0 - FooValue)", ACTIVE);
  47. assertPlanItemInstanceState(planItemInstances, "Task (B / 1 - FooValue)", ACTIVE);
  48. assertPlanItemInstanceState(planItemInstances, "Task (C / 2 - FooValue)", ACTIVE);
  49. }
  50. @Test
  51. @CmmnDeployment
  52. public void testDynamicNameWithRepetitionCollectionNoFallbackExpression() {
  53. ObjectMapper objectMapper = new ObjectMapper();
  54. ArrayNode arrayNode = objectMapper.createArrayNode();
  55. arrayNode.addObject().put("name", "A").put("bar", "a");
  56. arrayNode.addObject().put("name", "B").put("bar", "b");
  57. arrayNode.addObject().put("name", "C").put("bar", "c");
  58. CaseInstance caseInstance = cmmnRuntimeService.createCaseInstanceBuilder()
  59. .caseDefinitionKey("dynamicPlanItemNameTestOnJsonArray")
  60. .variable("myCollection", arrayNode)
  61. .variable("foo", "FooValue")
  62. .start();
  63. List<PlanItemInstance> planItemInstances = getPlanItemInstances(caseInstance.getId());
  64. assertThat(planItemInstances).hasSize(3);
  65. assertPlanItemInstanceState(planItemInstances, "Task (A / 0 - FooValue)", ACTIVE);
  66. assertPlanItemInstanceState(planItemInstances, "Task (B / 1 - FooValue)", ACTIVE);
  67. assertPlanItemInstanceState(planItemInstances, "Task (C / 2 - FooValue)", ACTIVE);
  68. }
  69. @Test
  70. @CmmnDeployment(resources = "org/flowable/cmmn/test/itemcontrol/DynamicPlanItemNameWithRepetitionBasedOnJsonArrayTest.testDynamicNameWithRepetitionCollectionNoFallbackExpression.cmmn")
  71. public void testDynamicNameWithRepetitionCollectionNoFallbackExpressionWithAvailablePlanItem() {
  72. ObjectMapper objectMapper = new ObjectMapper();
  73. ArrayNode arrayNode = objectMapper.createArrayNode();
  74. arrayNode.addObject().put("name", "A").put("bar", "a");
  75. arrayNode.addObject().put("name", "B").put("bar", "b");
  76. arrayNode.addObject().put("name", "C").put("bar", "c");
  77. CaseInstance caseInstance = cmmnRuntimeService.createCaseInstanceBuilder()
  78. .caseDefinitionKey("dynamicPlanItemNameTestOnJsonArray")
  79. .variable("foo", "FooValue")
  80. .start();
  81. List<PlanItemInstance> planItemInstances = getPlanItemInstances(caseInstance.getId());
  82. assertThat(planItemInstances).hasSize(1);
  83. // as we don't have the collection yet available, the name must use the expression as fallback without any exception, as the item / itemIndex local
  84. // variables are not available on the available plan item instance
  85. assertPlanItemInstanceState(planItemInstances, "Task (${item.name} / ${itemIndex} - ${foo})", AVAILABLE);
  86. // now kick-off the repetition by setting the collection variable
  87. cmmnRuntimeService.setVariable(caseInstance.getId(), "myCollection", arrayNode);
  88. planItemInstances = getPlanItemInstances(caseInstance.getId());
  89. assertThat(planItemInstances).hasSize(3);
  90. assertPlanItemInstanceState(planItemInstances, "Task (A / 0 - FooValue)", ACTIVE);
  91. assertPlanItemInstanceState(planItemInstances, "Task (B / 1 - FooValue)", ACTIVE);
  92. assertPlanItemInstanceState(planItemInstances, "Task (C / 2 - FooValue)", ACTIVE);
  93. }
  94. }