package org.bonitasoft.web.rest.server.api.bpm.flownode.archive; import static org.bonitasoft.web.rest.server.utils.ResponseAssert.assertThat; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import org.assertj.core.api.Assertions; import org.bonitasoft.engine.api.ProcessAPI; import org.bonitasoft.engine.bpm.flownode.UserTaskNotFoundException; import org.bonitasoft.web.rest.server.FinderFactory; import org.bonitasoft.web.rest.server.utils.RestletTest; import org.bonitasoft.web.toolkit.client.common.exception.api.APIException; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.runners.MockitoJUnitRunner; import org.restlet.Response; import org.restlet.data.Status; import org.restlet.resource.ServerResource; import java.io.Serializable; import java.util.HashMap; import java.util.Map; @RunWith(MockitoJUnitRunner.class) public class ArchivedUserTaskContextResourceTest extends RestletTest { @Mock private ProcessAPI processAPI; @Mock private FinderFactory finderFactory; ArchivedUserTaskContextResource archviedTaskContextResource; @Override protected ServerResource configureResource() { return new ArchivedUserTaskContextResource(processAPI, finderFactory); } @Before public void initializeMocks() { archviedTaskContextResource = spy(new ArchivedUserTaskContextResource(processAPI, finderFactory)); } @Test public void should_return_a_context_of_type_SingleBusinessDataRef_for_a_given_archived_task_instance() throws Exception { //given final Map<String, Serializable> context = new HashMap<String, Serializable>(); String engineResult = "object returned by engine"; context.put("Ticket", engineResult); when(processAPI.getArchivedUserTaskExecutionContext(2L)).thenReturn(context); doReturn("clientResult").when(finderFactory).getContextResultElement(engineResult); //when final Response response = request("/bpm/archivedUserTask/2/context").get(); //then assertThat(response).hasStatus(Status.SUCCESS_OK); assertThat(response).hasJsonEntityEqualTo("{\"Ticket\":\"clientResult\"}"); } @Test public void should_getArchivedTaskIDParameter_throws_an_exception_when_archived_task_id_parameter_is_null() throws Exception { //given doReturn(null).when(archviedTaskContextResource).getAttribute(ArchivedUserTaskContextResource.ARCHIVED_TASK_ID); try { //when archviedTaskContextResource.getArchivedTaskIdParameter(); } catch (final Exception e) { //then Assertions.assertThat(e).isInstanceOf(APIException.class); Assertions.assertThat(e.getMessage()).isEqualTo("Attribute '" +ArchivedUserTaskContextResource.ARCHIVED_TASK_ID + "' is mandatory in order to get the archived task context"); } } @Test public void should_respond_404_Not_found_when_task_is_not_found_when_getting_context() throws Exception { when(processAPI.getArchivedUserTaskExecutionContext(2)).thenThrow(new UserTaskNotFoundException("task 2 not found")); final Response response = request("/bpm/archivedUserTask/2/context").get(); assertThat(response).hasStatus(Status.CLIENT_ERROR_NOT_FOUND); } }