package org.bonitasoft.web.rest.server.api.bpm.process; import static org.mockito.BDDMockito.given; import static org.mockito.Matchers.anyLong; import static org.mockito.Matchers.anyString; import static org.mockito.Mockito.*; import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.servlet.http.HttpSession; import org.bonitasoft.console.common.server.preferences.constants.WebBonitaConstantsUtils; import org.bonitasoft.engine.bpm.process.ProcessInstanceState; import org.bonitasoft.engine.session.APISession; import org.bonitasoft.web.rest.model.ModelFactory; import org.bonitasoft.web.rest.model.bpm.cases.CaseItem; import org.bonitasoft.web.rest.model.bpm.process.ProcessItem; import org.bonitasoft.web.rest.server.datastore.bpm.cases.CaseDatastore; import org.bonitasoft.web.rest.server.datastore.bpm.process.ProcessDatastore; import org.bonitasoft.web.rest.server.framework.APIServletCall; import org.bonitasoft.web.toolkit.client.ItemDefinitionFactory; 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; /** * @author Alexis Hassler * @author Celine Souchet */ @RunWith(MockitoJUnitRunner.class) public class APIProcessTest { private APIProcess apiProcess; @Mock private APIServletCall caller; @Mock private HttpSession session; @Mock private APISession engineSession; @Mock private ProcessDatastore processDatastore; @Mock private CaseDatastore caseDatastore; @Mock private WebBonitaConstantsUtils webBonitaConstantsUtils; @Before public void consoleTestSetUp() throws IOException { ItemDefinitionFactory.setDefaultFactory(new ModelFactory()); org.bonitasoft.console.common.server.i18n.I18n.getInstance(); given(caller.getHttpSession()).willReturn(session); given(session.getAttribute("apiSession")).willReturn(engineSession); given(engineSession.getTenantId()).willReturn(1L); apiProcess = spy(new APIProcess()); apiProcess.setCaller(caller); doReturn(processDatastore).when(apiProcess).getProcessDatastore(); doReturn(caseDatastore).when(apiProcess).getCaseDatastore(); } /** * Test method for {@link org.bonitasoft.web.rest.server.api.bpm.process.APIProcess#fillCounters(ProcessItem, List). */ @Test public final void fillCounters_should_fill_number_of_failed_cases_when_counter_of_failed_cases_is_active() { // Given final APIID id = APIID.makeAPIID(78L); final ProcessItem item = mock(ProcessItem.class); doReturn(id).when(item).getId(); final List<String> counters = Arrays.asList(ProcessItem.COUNTER_FAILED_CASES); final long numberOfFailedCases = 2L; final Map<String, String> filters = new HashMap<>(); filters.put(CaseItem.FILTER_CALLER, "any"); filters.put(CaseItem.ATTRIBUTE_PROCESS_ID, item.getId().toString()); filters.put(CaseItem.FILTER_STATE, ProcessInstanceState.ERROR.name()); doReturn(numberOfFailedCases).when(caseDatastore).count(null, null, filters); // When apiProcess.fillCounters(item, counters); // Then verify(item).setAttribute(ProcessItem.COUNTER_FAILED_CASES, numberOfFailedCases); } /** * Test method for {@link org.bonitasoft.web.rest.server.api.bpm.process.APIProcess#fillCounters(ProcessItem, List). */ @Test public final void fillCounters_should_do_nothing_when_counter_of_failed_cases_is_not_active() { // Given final ProcessItem item = mock(ProcessItem.class); final List<String> counters = new ArrayList<>(); // When apiProcess.fillCounters(item, counters); // Then verify(item, never()).setAttribute(anyString(), anyLong()); } /** * Test method for {@link org.bonitasoft.web.rest.server.api.bpm.process.APIProcess#fillCounters(ProcessItem, List). */ @Test public final void fillCounters_should_fill_number_of_open_cases_when_counter_of_open_cases_is_active() { // Given final APIID id = APIID.makeAPIID(78L); final ProcessItem item = mock(ProcessItem.class); doReturn(id).when(item).getId(); final List<String> counters = Arrays.asList(ProcessItem.COUNTER_OPEN_CASES); final Map<String, String> filters = new HashMap<>(); filters.put(CaseItem.FILTER_CALLER, "any"); filters.put(CaseItem.ATTRIBUTE_PROCESS_ID, id.toString()); final long numberOfOpenCases = 2L; doReturn(numberOfOpenCases).when(caseDatastore).count(null, null, filters); // When apiProcess.fillCounters(item, counters); // Then verify(item).setAttribute(ProcessItem.COUNTER_OPEN_CASES, numberOfOpenCases); } /** * Test method for {@link org.bonitasoft.web.rest.server.api.bpm.process.APIProcess#fillCounters(ProcessItem, List). */ @Test public final void fillCounters_should_do_nothing_when_counter_of_open_cases_is_not_active() { // Given final ProcessItem item = mock(ProcessItem.class); final List<String> counters = new ArrayList<>(); // When apiProcess.fillCounters(item, counters); // Then verify(item, never()).setAttribute(anyString(), anyLong()); } }