/**
* Copyright (C) 2015 Orange
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
* http://www.apache.org/licenses/LICENSE-2.0
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.francetelecom.clara.cloud.paas.activation.v1;
import com.francetelecom.clara.cloud.commons.tasks.TaskStatusEnum;
import com.francetelecom.clara.cloud.coremodel.EnvironmentRepository;
import com.francetelecom.clara.cloud.model.ModelItemRepository;
import com.francetelecom.clara.cloud.paas.activation.ActivationStepEnum;
import com.francetelecom.clara.cloud.techmodel.cf.Space;
import org.activiti.engine.ProcessEngine;
import org.activiti.engine.RuntimeService;
import org.activiti.engine.runtime.Execution;
import org.activiti.engine.runtime.ExecutionQuery;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.Mock;
import org.mockito.Spy;
import org.mockito.runners.MockitoJUnitRunner;
import static org.fest.assertions.Assertions.assertThat;
import static org.mockito.Mockito.*;
/**
* ActivationTaskHandlerCallbackTest
* <p>
* Last update : $LastChangedDate$
* Last author : $Author$
*
* @version : $Revision$
*/
@RunWith(MockitoJUnitRunner.class)
public class ActivationTaskHandlerCallbackTest {
@Mock
RuntimeService activitiRuntimeService;
@SuppressWarnings("unused")
@Mock
private ProcessEngine processEngineMock;
@SuppressWarnings("unused")
@Mock
private ActivationPluginStrategy pluginStrategyMock;
@SuppressWarnings("unused")
@Mock
private ModelItemRepository modelItemRepository;
@SuppressWarnings("unused")
@Mock
private EnvironmentRepository environmentRepositoryMock;
@Mock
private Execution executionActiviti;
@Spy @InjectMocks
private ActivationTaskHandlerCallback taskHandlerCallback = new ActivationTaskHandlerCallback();
@Mock
private ExecutionQuery executionQuery;
@Before
public void init() {
doReturn(executionQuery).when(taskHandlerCallback).createActivitiRuntimeQuery();
}
@Test
public void testOnTaskComplete_ReportDetailsOnError() throws Exception {
// GIVEN
// activation task
final String processInstanceId = "taskPid";
String activationStep = ActivationStepEnum.STOP.getName();
final String activitiTaskId = "activity1234";
int tdiId = 111;
int entityId = 1111;
String entityClassName = "com.francetelecom.clara.cloud.techmodel.cf.Space";
String activationTaskErrorMessage = "ActivationTask Error message.";
String activitiTaskErrorMessage = "ActivitiTask Error message.";
int taskIndex = 0;
int taskCount = 1;
ActivationTask activationTask
= new ActivationTask(processInstanceId, activationStep, activitiTaskId, tdiId, entityId,
entityClassName, activationTaskErrorMessage, taskIndex, taskCount);
// current activiti status task
TaskStatusActivitiTask currentTask = new TaskStatusActivitiTask();
currentTask.setActivationTask(activationTask);
currentTask.setTaskStatus(TaskStatusEnum.FINISHED_FAILED);
currentTask.setErrorMessage(activitiTaskErrorMessage);
Space space = new Space();
String executionActivitiId = "124";
when(executionActiviti.getId())
.thenReturn(executionActivitiId);
doReturn(executionActiviti)
.when(taskHandlerCallback).findExecutionByEndTask(any(ActivationTask.class));
doReturn(activitiRuntimeService).when(processEngineMock).getRuntimeService();
doReturn(space).when(modelItemRepository).find(anyInt(),any());
String calculatedErrorMessage = "stop failed on Space#1111 (activity1234) : ActivitiTask Error message.";
doNothing()
.when(taskHandlerCallback).signalFailedTaskToActivitiEngine(executionActivitiId,
"1", calculatedErrorMessage, entityId,
Space.class, activationStep);
String communicationId = "1234";
// WHEN
taskHandlerCallback.onTaskComplete(currentTask, communicationId);
// THEN
verify(taskHandlerCallback).signalFailedTaskToActivitiEngine(executionActivitiId,
"1", calculatedErrorMessage, entityId,
Space.class, activationStep);
}
@Test
public void finding_execution_should_use_process_and_task_id() throws Exception {
//Given
ActivationTask activationTask = mock(ActivationTask.class);
String processInstanceId = "processId-0";
String activitiTaskId = "taskId-0";
when(activationTask.getProcessInstanceId()).thenReturn(processInstanceId);
when(activationTask.getActivitiTaskId()).thenReturn(activitiTaskId);
String expectedActivityId = activitiTaskId+"-end";
when(executionQuery.activityId(expectedActivityId)).thenReturn(executionQuery);
when(executionQuery.processInstanceId(processInstanceId)).thenReturn(executionQuery);
when(executionQuery.singleResult()).thenReturn(executionActiviti);
//When
Execution execution = taskHandlerCallback.findExecutionByEndTask(activationTask);
//Then
verify(executionQuery).singleResult();
verify(executionQuery).activityId(expectedActivityId);
verify(executionQuery).processInstanceId(processInstanceId);
assertThat(execution).isEqualTo(executionActiviti);
}
}