package org.bonitasoft.web.rest.server.datastore.bpm.cases; import static org.mockito.Matchers.anyList; import static org.mockito.Matchers.anyLong; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; import static org.mockito.MockitoAnnotations.initMocks; import java.util.Arrays; import java.util.Collections; import java.util.List; import org.bonitasoft.engine.api.ProcessAPI; import org.bonitasoft.engine.bpm.process.ArchivedProcessInstance; import org.bonitasoft.engine.bpm.process.ArchivedProcessInstanceNotFoundException; import org.bonitasoft.engine.bpm.process.ProcessInstanceNotFoundException; import org.bonitasoft.engine.exception.BonitaHomeNotSetException; import org.bonitasoft.engine.exception.DeletionException; import org.bonitasoft.engine.exception.ServerAPIException; import org.bonitasoft.engine.exception.UnknownAPITypeException; import org.bonitasoft.web.rest.server.APITestWithMock; import org.bonitasoft.web.toolkit.client.common.exception.api.APIException; import org.bonitasoft.web.toolkit.client.data.APIID; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class ArchivedCaseDatastoreTest extends APITestWithMock { private ArchivedCaseDatastore datastore; @Mock private ProcessAPI processAPI; @Mock private ArchivedProcessInstance archivedProcessInstance1; @Mock private ArchivedProcessInstance archivedProcessInstance2; @Mock private ArchivedProcessInstance archivedProcessInstance3; private long archivedProcessInstanceId1; private long archivedProcessInstanceId2; private long archivedProcessInstanceId3; private long sourceProcessInstanceId1; private long sourceProcessInstanceId2; private long sourceProcessInstanceId3; @Before public void initializeMocks() throws BonitaHomeNotSetException, ServerAPIException, UnknownAPITypeException, ArchivedProcessInstanceNotFoundException { initMocks(this); datastore = spy(new ArchivedCaseDatastore(null)); doReturn(processAPI).when(datastore).getProcessApi(); archivedProcessInstanceId1 = 1L; archivedProcessInstanceId2 = 2L; archivedProcessInstanceId3 = 3L; sourceProcessInstanceId1 = 11L; sourceProcessInstanceId2 = 12L; sourceProcessInstanceId3 = 13L; doReturn(sourceProcessInstanceId1).when(archivedProcessInstance1).getSourceObjectId(); doReturn(sourceProcessInstanceId2).when(archivedProcessInstance2).getSourceObjectId(); doReturn(sourceProcessInstanceId3).when(archivedProcessInstance3).getSourceObjectId(); doReturn(archivedProcessInstance1).when(processAPI).getArchivedProcessInstance(archivedProcessInstanceId1); doReturn(archivedProcessInstance2).when(processAPI).getArchivedProcessInstance(archivedProcessInstanceId2); doReturn(archivedProcessInstance3).when(processAPI).getArchivedProcessInstance(archivedProcessInstanceId3); } @Test public void should_delete_archive_case_call_right_engine_method() throws DeletionException, ArchivedProcessInstanceNotFoundException, ProcessInstanceNotFoundException { //given final List<APIID> idList = Arrays.asList(APIID.makeAPIID(archivedProcessInstanceId1), APIID.makeAPIID(archivedProcessInstanceId2), APIID.makeAPIID(archivedProcessInstanceId3)); //when datastore.delete(idList); //then verify(processAPI, times(3)).getArchivedProcessInstance(anyLong()); verify(processAPI).deleteArchivedProcessInstancesInAllStates( Arrays.asList( sourceProcessInstanceId1, sourceProcessInstanceId2, sourceProcessInstanceId3) ); } @Test public void should_delete_all_archived_cases_when_one_id_is_given() throws DeletionException, ProcessInstanceNotFoundException, ArchivedProcessInstanceNotFoundException { //given final List<APIID> idList = Collections.singletonList(APIID.makeAPIID(archivedProcessInstanceId1)); //when datastore.delete(idList); //then verify(processAPI).getArchivedProcessInstance(archivedProcessInstanceId1); verify(processAPI, times(1)).getArchivedProcessInstance(archivedProcessInstanceId1); verify(processAPI).deleteArchivedProcessInstancesInAllStates(Collections.singletonList(sourceProcessInstanceId1)); } @Test(expected = APIException.class) public void should_throw_an_api_exception_when_deletion_exception_is_rised() throws DeletionException { //given doThrow(new DeletionException("exception!")).when(processAPI).deleteArchivedProcessInstancesInAllStates(anyList()); final List<APIID> idList = Collections.singletonList(APIID.makeAPIID(archivedProcessInstanceId1)); //when datastore.delete(idList); } }