未验证 提交 6ddaae94 编写于 作者: V Vito 提交者: GitHub

DW-1667 - created instance will return with status CREATED (#3218)

* DW-1667 - created instance will return with status CREATED and no start date

* DW-1667 - fixed tests for new status CREATED/STARTED

* DW-1667 - fixed IT
上级 7b944550
......@@ -48,6 +48,8 @@ public class APIProcessInstanceConverter extends ListConverter<org.activiti.engi
return ProcessInstance.ProcessInstanceStatus.SUSPENDED;
} else if (internalProcessInstance.isEnded()) {
return ProcessInstance.ProcessInstanceStatus.COMPLETED;
}else if(internalProcessInstance.getStartTime() == null){
return ProcessInstance.ProcessInstanceStatus.CREATED;
}
return ProcessInstance.ProcessInstanceStatus.RUNNING;
}
......
......@@ -54,6 +54,16 @@ public class APIProcessInstanceConverterTest {
assertThat(result.getStatus()).isEqualTo(ProcessInstanceStatus.RUNNING);
}
@Test
public void should_returnStatusCreated_when_StartDateIsNull() {
ExecutionEntity internalProcessInstance = anInternalProcessInstance(APP_VERSION);
internalProcessInstance.setStartTime(null);
ProcessInstance result = subject.from(internalProcessInstance);
assertThat(result.getStatus()).isEqualTo(ProcessInstanceStatus.CREATED);
}
@Test
public void should_convertFromInternalProcessInstance_when_withSuspendedStatus() {
ExecutionEntity internalProcessInstance = anInternalProcessInstance(APP_VERSION);
......
......@@ -98,7 +98,8 @@ public class SignalEventHandler extends AbstractEventHandler {
processInstanceHelper.startProcessInstance(executionEntity,
commandContext,
variables);
variables,
flowElement);
} else {
throw new ActivitiException("Invalid signal handling: no execution nor process definition set");
}
......
......@@ -86,6 +86,7 @@ public interface ExecutionEntityManager extends EntityManager<ExecutionEntity> {
String updateProcessInstanceBusinessKey(ExecutionEntity executionEntity, String businessKey);
ExecutionEntity updateProcessInstanceStartDate(ExecutionEntity processInstanceExecution);
void deleteProcessInstancesByProcessDefinition(String processDefinitionId, String deleteReason, boolean cascade);
......
......@@ -230,7 +230,6 @@ public class ExecutionEntityManagerImpl extends AbstractEntityManager<ExecutionE
String authenticatedUserId = Authentication.getAuthenticatedUserId();
processInstanceExecution.setStartTime(Context.getProcessEngineConfiguration().getClock().getCurrentTime());
processInstanceExecution.setStartUserId(authenticatedUserId);
// Store in database
......@@ -255,6 +254,10 @@ public class ExecutionEntityManagerImpl extends AbstractEntityManager<ExecutionE
return processInstanceExecution;
}
public ExecutionEntity updateProcessInstanceStartDate(ExecutionEntity processInstanceExecution) {
processInstanceExecution.setStartTime(Context.getProcessEngineConfiguration().getClock().getCurrentTime());
return update(processInstanceExecution);
}
/**
* Creates a new execution. properties processDefinition, processInstance and activity will be initialized.
*/
......
......@@ -54,6 +54,7 @@ public class HistoricProcessInstanceEntityImpl extends HistoricScopeInstanceEnti
public HistoricProcessInstanceEntityImpl(ExecutionEntity processInstance) {
id = processInstance.getId();
processInstanceId = processInstance.getId();
name = processInstance.getName();
businessKey = processInstance.getBusinessKey();
processDefinitionId = processInstance.getProcessDefinitionId();
processDefinitionKey = processInstance.getProcessDefinitionKey();
......
......@@ -51,9 +51,8 @@ public class ProcessInstanceHelper {
public ProcessInstance createAndStartProcessInstance(ProcessDefinition processDefinition,
String businessKey, String processInstanceName,
Map<String, Object> variables, Map<String, Object> transientVariables) {
return createAndStartProcessInstance(processDefinition, businessKey, processInstanceName, variables, transientVariables, true);
}
}
public Process getActiveProcess(ProcessDefinition processDefinition) {
if (ProcessDefinitionUtil.isProcessDefinitionSuspended(processDefinition.getId())) {
......@@ -151,11 +150,16 @@ public class ProcessInstanceHelper {
// Finally start the process
CommandContext commandContext = Context.getCommandContext();
startProcessInstance(processInstance, commandContext, processVariables);
startProcessInstance(processInstance, commandContext, processVariables, initialFlowElement);
return processInstance;
}
private void updateProcessInstanceStartDate(ExecutionEntity processInstance) {
CommandContext commandContext = Context.getCommandContext();
commandContext.getExecutionEntityManager().updateProcessInstanceStartDate(processInstance);
}
public ProcessInstance createAndStartProcessInstanceWithInitialFlowElement(ProcessDefinition processDefinition,
String businessKey, String processInstanceName, FlowElement initialFlowElement,
Process process, Map<String, Object> variables, Map<String, Object> transientVariables, boolean startProcessInstance) {
......@@ -169,18 +173,21 @@ public class ProcessInstanceHelper {
transientVariables);
if (startProcessInstance) {
CommandContext commandContext = Context.getCommandContext();
startProcessInstance(processInstance, commandContext, variables);
startProcessInstance(processInstance, commandContext, variables, initialFlowElement);
}
return processInstance;
}
public void startProcessInstance(ExecutionEntity processInstance, CommandContext commandContext, Map<String, Object> variables) {
private void recordStartProcessInstance(CommandContext commandContext, FlowElement initialFlowElement, ExecutionEntity processInstance){
updateProcessInstanceStartDate(processInstance);
commandContext.getHistoryManager().recordProcessInstanceStart(processInstance, initialFlowElement);
}
public void startProcessInstance(ExecutionEntity processInstance, CommandContext commandContext, Map<String, Object> variables, FlowElement initialFlowElement) {
recordStartProcessInstance(commandContext, initialFlowElement, processInstance);
Process process = ProcessDefinitionUtil.getProcess(processInstance.getProcessDefinitionId());
// Event sub process handling
List<MessageEventSubscriptionEntity> messageEventSubscriptions = new LinkedList<>();
for (FlowElement flowElement : process.getFlowElements()) {
......@@ -304,8 +311,6 @@ public class ProcessInstanceHelper {
processDefinition.getTenantId(),
initiatorVariableName);
commandContext.getHistoryManager().recordProcessInstanceStart(processInstance, initialFlowElement);
processInstance.setVariables(processDataObjects(process.getDataObjects()));
// Set the variables passed into the start command
......
......@@ -17,9 +17,9 @@
package org.activiti.engine.impl.persistence.entity;
import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.*;
import static org.mockito.MockitoAnnotations.initMocks;
import java.util.ArrayList;
......@@ -34,6 +34,7 @@ import org.junit.Before;
import org.junit.Test;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import static org.mockito.AdditionalAnswers.returnsFirstArg;
public class ExecutionEntityManagerImplTest {
......@@ -77,8 +78,6 @@ public class ExecutionEntityManagerImplTest {
ExecutionEntity execution = new ExecutionEntityImpl();
execution.setId("processInstanceId");
given(executionDataManager.create()).willReturn(execution);
Date startTime = new Date();
given(clock.getCurrentTime()).willReturn(startTime);
ExecutionEntity processInstanceResult = executionEntityManager.createProcessInstanceExecution(processDefinition, businessKey, tenantId, null);
......@@ -89,7 +88,6 @@ public class ExecutionEntityManagerImplTest {
assertThat(processInstanceResult.getAppVersion()).isEqualTo(3);
assertThat(processInstanceResult.getBusinessKey()).isEqualTo(businessKey);
assertThat(processInstanceResult.isScope()).isTrue();
assertThat(processInstanceResult.getStartTime()).isEqualTo(startTime);
assertThat(processInstanceResult.getTenantId()).isEqualTo(tenantId);
assertThat(processInstanceResult.getProcessInstanceId()).isEqualTo("processInstanceId");
assertThat(processInstanceResult.getRootProcessInstanceId()).isEqualTo("processInstanceId");
......@@ -171,4 +169,30 @@ public class ExecutionEntityManagerImplTest {
verify(eventDispatcher).isEnabled();
assertThat(superExecution.getSubProcessInstance()).isEqualTo(subProcessInstance);
}
@Test
public void should_updateStartDateOfProcessInstance() {
ProcessDefinitionEntity processDefinition = new ProcessDefinitionEntityImpl();
processDefinition.setId("processDefinitionId");
processDefinition.setKey("processDefinitionKey");
processDefinition.setName("processDefinitionName");
processDefinition.setVersion(1);
String businessKey = "businessKey";
String tenantId = "tenantId";
Date startTime = new Date();
given(clock.getCurrentTime()).willReturn(startTime);
PerformanceSettings performanceSettings = mock(PerformanceSettings.class);
given(processEngineConfiguration.getPerformanceSettings()).willReturn(performanceSettings);
ExecutionEntity execution = new ExecutionEntityImpl();
execution.setId("processInstanceId");
given(executionDataManager.create()).willReturn(execution);
when(executionDataManager.update(any(ExecutionEntity.class))).then(returnsFirstArg());
ExecutionEntity processInstanceResult = executionEntityManager.createProcessInstanceExecution(processDefinition, businessKey, tenantId, null);
assertThat(processInstanceResult.getStartTime()).isNull();
ExecutionEntity processInstanceUpdated = executionEntityManager.updateProcessInstanceStartDate(processInstanceResult);
assertThat(processInstanceUpdated.getStartTime()).isEqualTo(startTime);
}
}
......@@ -39,7 +39,7 @@ public class ExecutionEventsTest extends PluggableActivitiTestCase {
assertNotNull(processInstance);
// Check create-event
assertEquals(5, listener.getEventsReceived().size());
assertEquals(6, listener.getEventsReceived().size());
assertTrue(listener.getEventsReceived().get(0) instanceof ActivitiEntityEvent);
ActivitiEntityEvent event = (ActivitiEntityEvent) listener.getEventsReceived().get(0);
......
......@@ -29,6 +29,7 @@ import org.activiti.engine.delegate.event.ActivitiEventListener;
import org.activiti.engine.delegate.event.ActivitiEventType;
import org.activiti.engine.delegate.event.ActivitiProcessStartedEvent;
import org.activiti.engine.delegate.event.impl.ActivitiActivityCancelledEventImpl;
import org.activiti.engine.delegate.event.impl.ActivitiEntityEventImpl;
import org.activiti.engine.delegate.event.impl.ActivitiProcessCancelledEventImpl;
import org.activiti.engine.impl.persistence.entity.ExecutionEntity;
import org.activiti.engine.impl.test.PluggableActivitiTestCase;
......@@ -56,7 +57,7 @@ public class ProcessInstanceEventsTest extends PluggableActivitiTestCase {
assertNotNull(processInstance);
// Check create-event
assertEquals(5, listener.getEventsReceived().size());
assertEquals(6, listener.getEventsReceived().size());
assertTrue(listener.getEventsReceived().get(0) instanceof ActivitiEntityEvent);
// process instance create event
......@@ -88,6 +89,12 @@ public class ProcessInstanceEventsTest extends PluggableActivitiTestCase {
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
event = (ActivitiEntityEvent) listener.getEventsReceived().get(4);
assertEquals(ActivitiEventType.ENTITY_UPDATED, event.getType());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
assertTrue(event instanceof ActivitiEntityEventImpl);
event = (ActivitiEntityEvent) listener.getEventsReceived().get(5);
assertEquals(ActivitiEventType.PROCESS_STARTED, event.getType());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
......@@ -188,7 +195,7 @@ public class ProcessInstanceEventsTest extends PluggableActivitiTestCase {
String processDefinitionId = processInstance.getProcessDefinitionId();
// Check create-event one main process the second one Scope execution, and the third one subprocess
assertEquals(9, listener.getEventsReceived().size());
assertEquals(10, listener.getEventsReceived().size());
assertTrue(listener.getEventsReceived().get(0) instanceof ActivitiEntityEvent);
// process instance created event
......@@ -220,8 +227,14 @@ public class ProcessInstanceEventsTest extends PluggableActivitiTestCase {
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertNotEquals(processInstance.getId(), ((ExecutionEntity) event.getEntity()).getId());
// Process start
// Process Start Date
event = (ActivitiEntityEvent) listener.getEventsReceived().get(4);
assertEquals(ActivitiEventType.ENTITY_UPDATED, event.getType());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
// Process start
event = (ActivitiEntityEvent) listener.getEventsReceived().get(5);
assertEquals(ActivitiEventType.PROCESS_STARTED, event.getType());
assertEquals(processInstance.getId(), event.getProcessInstanceId());
assertEquals(processInstance.getProcessDefinitionId(), event.getProcessDefinitionId());
......@@ -230,14 +243,14 @@ public class ProcessInstanceEventsTest extends PluggableActivitiTestCase {
assertNull(((ActivitiProcessStartedEvent)event).getNestedProcessInstanceId());
// sub process instance created event
event = (ActivitiEntityEvent) listener.getEventsReceived().get(5);
event = (ActivitiEntityEvent) listener.getEventsReceived().get(6);
assertEquals(ActivitiEventType.ENTITY_CREATED, event.getType());
ExecutionEntity subProcessEntity = (ExecutionEntity) event.getEntity();
assertEquals(processExecutionId, subProcessEntity.getSuperExecutionId());
String subProcessInstanceId = subProcessEntity.getProcessInstanceId();
// sub process instance start created event
event = (ActivitiEntityEvent) listener.getEventsReceived().get(6);
event = (ActivitiEntityEvent) listener.getEventsReceived().get(7);
assertEquals(ActivitiEventType.ENTITY_CREATED, event.getType());
assertEquals(subProcessInstanceId, event.getProcessInstanceId());
assertNotEquals(subProcessInstanceId, event.getExecutionId());
......@@ -247,14 +260,14 @@ public class ProcessInstanceEventsTest extends PluggableActivitiTestCase {
assertEquals("simpleSubProcess", subProcessDefinition.getKey());
// sub process instance start initialized event
event = (ActivitiEntityEvent) listener.getEventsReceived().get(7);
event = (ActivitiEntityEvent) listener.getEventsReceived().get(8);
assertEquals(ActivitiEventType.ENTITY_INITIALIZED, event.getType());
assertEquals(subProcessInstanceId, event.getProcessInstanceId());
assertNotEquals(subProcessInstanceId, event.getExecutionId());
subProcessDefinitionId = ((ExecutionEntity) event.getEntity()).getProcessDefinitionId();
assertNotNull(subProcessDefinitionId);
event = (ActivitiEntityEvent) listener.getEventsReceived().get(8);
event = (ActivitiEntityEvent) listener.getEventsReceived().get(9);
assertEquals(ActivitiEventType.PROCESS_STARTED, event.getType());
assertEquals(subProcessInstanceId, event.getProcessInstanceId());
assertEquals(subProcessDefinitionId, event.getProcessDefinitionId());
......
......@@ -198,7 +198,7 @@ public class ProcessRuntimeIT {
assertThat(RuntimeTestConfiguration.completedProcesses).doesNotContain(categorizeProcess.getId());
assertThat(categorizeProcess).isNotNull();
assertThat(categorizeProcess.getStatus()).isEqualTo(ProcessInstance.ProcessInstanceStatus.RUNNING);
assertThat(categorizeProcess.getStatus()).isEqualTo(ProcessInstance.ProcessInstanceStatus.CREATED);
}
@Test
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册