package org.bonitasoft.forms.server; import static org.hamcrest.Matchers.is; import static org.junit.Assert.assertThat; import static org.mockito.Matchers.any; import static org.mockito.Matchers.anyMap; import static org.mockito.Matchers.anyString; import static org.mockito.Matchers.eq; 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 java.io.PrintWriter; import java.io.StringWriter; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Map; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.bonitasoft.console.common.server.utils.SessionUtil; import org.bonitasoft.engine.session.APISession; import org.bonitasoft.forms.server.api.IFormDefinitionAPI; import org.bonitasoft.forms.server.exception.ApplicationFormDefinitionNotFoundException; import org.bonitasoft.forms.server.exception.FormNotFoundException; import org.bonitasoft.forms.server.provider.impl.util.FormServiceProviderUtil; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.Spy; import org.mockito.runners.MockitoJUnitRunner; @RunWith(MockitoJUnitRunner.class) public class FormsCacheServletTest { @Mock private HttpServletRequest request; @Mock private HttpServletResponse response; @Mock private HttpSession session; @Mock private APISession apiSession; @Mock private IFormDefinitionAPI formDefinitionAPI; @Mock private PrintWriter printWriter; @Spy private final FormsCacheServlet formsCacheServlet = spy(new FormsCacheServlet()); @Test public void should_get_return_list_of_forms() throws Exception { doReturn("12").when(request).getParameter(FormServiceProviderUtil.PROCESS_UUID); doReturn(session).when(request).getSession(); doReturn(apiSession).when(session).getAttribute(SessionUtil.API_SESSION_PARAM_KEY); doReturn(Locale.ENGLISH).when(request).getLocale(); doReturn(formDefinitionAPI).when(formsCacheServlet).getDefinitionAPI(any(HttpServletRequest.class), anyMap(), anyString()); final List<String> formIDs = new ArrayList<String>(); formIDs.add("processName--1.0$ENTRY"); formIDs.add("processName--1.0-activityName$ENTRY"); doReturn(formIDs).when(formDefinitionAPI).getFormsList(anyMap()); doReturn(1l).when(formsCacheServlet).getTenantID(request); final StringWriter stringWriter = new StringWriter(); doReturn(new PrintWriter(stringWriter)).when(response).getWriter(); stringWriter.close(); formsCacheServlet.doGet(request, response); assertThat(stringWriter.toString(), is("[\"processName--1.0$ENTRY\",\"processName--1.0-activityName$ENTRY\"]")); } @Test public void should_put_call_cacheForm() throws Exception { doReturn("/12/processName--1.0$ENTRY").when(request).getPathInfo(); doReturn(session).when(request).getSession(); doReturn(apiSession).when(session).getAttribute(SessionUtil.API_SESSION_PARAM_KEY); doReturn(Locale.ENGLISH).when(request).getLocale(); final Map<String, Object> context = new HashMap<String, Object>(); doReturn(context).when(formsCacheServlet).initContext(any(HttpServletRequest.class), anyMap(), any(Locale.class)); doReturn(formDefinitionAPI).when(formsCacheServlet).getDefinitionAPI(any(HttpServletRequest.class), anyMap(), anyString()); doReturn(1l).when(formsCacheServlet).getTenantID(request); formsCacheServlet.doPut(request, response); verify(formDefinitionAPI, times(1)).cacheForm("processName--1.0$ENTRY", context); } @Test public void should_put_call_send_error_status_code_when_form_definition_not_found() throws Exception { doReturn("/12/processName--1.0$ENTRY").when(request).getPathInfo(); doReturn(session).when(request).getSession(); doReturn(apiSession).when(session).getAttribute(SessionUtil.API_SESSION_PARAM_KEY); doReturn(Locale.ENGLISH).when(request).getLocale(); final Map<String, Object> context = new HashMap<String, Object>(); doReturn(context).when(formsCacheServlet).initContext(any(HttpServletRequest.class), anyMap(), any(Locale.class)); doThrow(FormNotFoundException.class).when(formsCacheServlet).getDefinitionAPI(any(HttpServletRequest.class), anyMap(), anyString()); doReturn(1l).when(formsCacheServlet).getTenantID(request); formsCacheServlet.doPut(request, response); verify(response, times(1)).sendError(eq(HttpServletResponse.SC_NOT_FOUND), anyString()); } @Test public void should_put_call_send_error_status_code_when_form_not_found() throws Exception { doReturn("/12/processName--1.0$ENTRY").when(request).getPathInfo(); doReturn(session).when(request).getSession(); doReturn(apiSession).when(session).getAttribute(SessionUtil.API_SESSION_PARAM_KEY); doReturn(Locale.ENGLISH).when(request).getLocale(); final Map<String, Object> context = new HashMap<String, Object>(); doReturn(context).when(formsCacheServlet).initContext(any(HttpServletRequest.class), anyMap(), any(Locale.class)); doReturn(formDefinitionAPI).when(formsCacheServlet).getDefinitionAPI(any(HttpServletRequest.class), anyMap(), anyString()); doReturn(1l).when(formsCacheServlet).getTenantID(request); doThrow(ApplicationFormDefinitionNotFoundException.class).when(formDefinitionAPI).cacheForm(anyString(), anyMap()); formsCacheServlet.doPut(request, response); verify(response, times(1)).sendError(eq(HttpServletResponse.SC_NOT_FOUND), anyString()); } @Test public void should_get_call_send_error_status_code_when_form_definition_not_found() throws Exception { doReturn("12").when(request).getParameter(FormServiceProviderUtil.PROCESS_UUID); doReturn(session).when(request).getSession(); doReturn(apiSession).when(session).getAttribute(SessionUtil.API_SESSION_PARAM_KEY); doReturn(Locale.ENGLISH).when(request).getLocale(); doThrow(FormNotFoundException.class).when(formsCacheServlet).getDefinitionAPI(any(HttpServletRequest.class), anyMap(), anyString()); doReturn(1l).when(formsCacheServlet).getTenantID(request); formsCacheServlet.doGet(request, response); verify(response, times(1)).sendError(eq(HttpServletResponse.SC_NOT_FOUND), anyString()); } }