Skip to content

Commit

Permalink
AAE-20402 Fix MAP_ALL variables mapping (#4600)
Browse files Browse the repository at this point in the history
* AAE-20402 Fix MAP_ALL variables mapping
  • Loading branch information
Giovanni007 committed Mar 7, 2024
1 parent 37e5af9 commit 23e7a2c
Show file tree
Hide file tree
Showing 3 changed files with 73 additions and 11 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,6 +22,7 @@
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import com.fasterxml.jackson.databind.node.ObjectNode;
import org.activiti.bpmn.model.FlowElement;
import org.activiti.engine.ActivitiException;
import org.activiti.engine.impl.bpmn.behavior.MappingExecutionContext;
Expand Down Expand Up @@ -113,7 +114,7 @@ private Map<String, Object> processVariables(Map<String, Object> variables, Map<
variableDefinitionMap.forEach((k, v) -> {
if (!newVarsMap.containsKey(v.getName()) && v.getValue() != null) {
Object value = createDefaultVariableValue(v);
if (expressionResolver.containsExpression(value)) {
if (expressionResolver.containsExpression(value) || value instanceof ObjectNode) {
varsWithExpressions.put(v.getName(), value);
} else {
newVarsMap.put(v.getName(), value);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,13 +19,14 @@
import static java.util.Collections.singletonMap;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.catchThrowable;
import static org.assertj.core.api.Assertions.entry;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;

import java.io.InputStream;
import java.util.LinkedHashMap;
import java.util.Map;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.activiti.api.runtime.shared.identity.UserGroupManager;
import org.activiti.engine.*;
import org.activiti.engine.repository.ProcessDefinition;
Expand All @@ -40,7 +41,7 @@
public class ProcessVariablesInitiatorIT {

@Autowired
private ObjectMapper objectMapper;
private ProcessExtensionResourceReader reader;

@Autowired
private ProcessVariablesInitiator processVariablesInitiator;
Expand Down Expand Up @@ -72,8 +73,7 @@ static class Application {
public void calculateVariablesFromExtensionFileShouldReturnVariablesWithDefaultValues() throws Exception {
//given
try (InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("processes/default-vars-extensions.json")) {
ProcessExtensionModel extension = objectMapper.readValue(inputStream,
ProcessExtensionModel.class);
ProcessExtensionModel extension = reader.read(inputStream);

ProcessDefinition processDefinition = mock(ProcessDefinition.class);
given(processExtensionService.getExtensionsFor(processDefinition)).willReturn(extension.getExtensions("Process_DefaultVarsProcess"));
Expand All @@ -98,8 +98,7 @@ public void calculateVariablesFromExtensionFileShouldReturnVariablesWithDefaultV
public void calculateVariablesFromExtensionFileShouldGivePriorityToProvidedValuesOverDefaultValues() throws Exception {
//given
try (InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("processes/default-vars-extensions.json")) {
ProcessExtensionModel extension = objectMapper.readValue(inputStream,
ProcessExtensionModel.class);
ProcessExtensionModel extension = reader.read(inputStream);

ProcessDefinition processDefinition = mock(ProcessDefinition.class);
given(processExtensionService.getExtensionsFor(processDefinition)).willReturn(extension.getExtensions("Process_DefaultVarsProcess"));
Expand All @@ -124,8 +123,7 @@ public void calculateVariablesFromExtensionFileShouldGivePriorityToProvidedValue
public void calculateVariablesFromExtensionFileShouldThrowExceptionWhenMandatoryVariableIsMissing() throws Exception {
//given
try (InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("processes/initial-vars-extensions.json")) {
ProcessExtensionModel extension = objectMapper.readValue(inputStream,
ProcessExtensionModel.class);
ProcessExtensionModel extension = reader.read(inputStream);

ProcessDefinition processDefinition = mock(ProcessDefinition.class);
given(processExtensionService.getExtensionsFor(processDefinition)).willReturn(extension.getExtensions("Process_initialVarsProcess"));
Expand All @@ -149,8 +147,7 @@ public void calculateVariablesFromExtensionFileShouldThrowExceptionWhenMandatory
public void calculateVariablesFromExtensionFileShouldThrowExceptionWhenProvidedValueHasNotTheSameTypeAsInTheDefinition() throws Exception {
//given
try (InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("processes/initial-vars-extensions.json")) {
ProcessExtensionModel extension = objectMapper.readValue(inputStream,
ProcessExtensionModel.class);
ProcessExtensionModel extension = reader.read(inputStream);

ProcessDefinition processDefinition = mock(ProcessDefinition.class);
given(processExtensionService.getExtensionsFor(processDefinition)).willReturn(extension.getExtensions("Process_initialVarsProcess"));
Expand All @@ -169,4 +166,31 @@ public void calculateVariablesFromExtensionFileShouldThrowExceptionWhenProvidedV
.hasMessageContaining("as variables fail type validation - age");
}
}

@Test
public void calculateVariablesFromExtensionFileShouldReturnMapWhenVariableIsJson() throws Exception {
try (InputStream inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("processes/variable-mapping-all-extensions.json")) {

ProcessExtensionModel extension = reader.read(inputStream);

ProcessDefinition processDefinition = mock(ProcessDefinition.class);
given(processExtensionService.getExtensionsFor(processDefinition)).willReturn(extension.getExtensions("taskVariableMappingAll"));
given(processExtensionService.hasExtensionsFor(processDefinition)).willReturn(true);
given(processDefinition.getKey()).willReturn("taskVariableMappingAll");
LinkedHashMap<String, Object> mappedJson = new LinkedHashMap<>();
mappedJson.put("field1", "myString");

//when
Map<String, Object> variables = processVariablesInitiator.calculateVariablesFromExtensionFile(processDefinition,
null);

//then
assertThat(variables)
.containsOnly(
entry("process_variable_inputmap_1", "myString"),
entry("process_variable_json_type_1", mappedJson),
entry("process_variable_json_type_2", mappedJson)
);
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
{
"id":"taskVariableMappingAllModel",
"extensions": {
"taskVariableMappingAll": {
"properties": {
"process-variable-inputmap-1-id": {
"id": "process-variable-inputmap-1-id",
"name": "process_variable_inputmap_1",
"type": "string",
"required": true,
"value": "myString"
},
"process-variable-json-type-1-id": {
"id": "process-variable-json-type-1-id",
"name": "process_variable_json_type_1",
"type": "json",
"value": {
"field1": "${process_variable_inputmap_1}"
}
},
"process-variable-json-type-2-id": {
"id": "process-variable-json-type-2-id",
"name": "process_variable_json_type_2",
"type": "json",
"value": {
"field1": "myString"
}
}
},
"mappings": {
"simpleTask": {
"mappingType": "MAP_ALL"
}
}
}
}
}

0 comments on commit 23e7a2c

Please sign in to comment.