package org.molgenis.das; import org.mockito.ArgumentCaptor; import org.molgenis.das.impl.DasURLFilter; import org.testng.annotations.BeforeTest; import org.testng.annotations.Test; import uk.ac.ebi.mydas.exceptions.DataSourceException; import uk.ac.ebi.mydas.exceptions.UnimplementedFeatureException; import javax.servlet.FilterChain; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException; import java.net.MalformedURLException; import static org.mockito.Matchers.eq; import static org.mockito.Mockito.*; import static org.testng.AssertJUnit.assertEquals; public class DasPatientFilterTest { private HttpServletRequest request; private HttpServletResponse response; private DasURLFilter filter; private FilterChain chain; private HttpServletRequest requestNoPatient; private HttpServletResponse responseNoPatient; private RequestDispatcher requestDispatcher; @BeforeTest public void setUp() throws MalformedURLException { request = mock(HttpServletRequest.class); response = mock(HttpServletResponse.class); chain = mock(FilterChain.class); requestDispatcher = mock(RequestDispatcher.class); filter = new DasURLFilter(); when(request.getRequestURI()).thenReturn("/das/col7a1/dasdataset_502/features"); when(request.getQueryString()).thenReturn("3:48618447,48640609;maxbins=636"); when(request.getRequestDispatcher("/das/col7a1/features")).thenReturn(requestDispatcher); requestNoPatient = mock(HttpServletRequest.class); responseNoPatient = mock(HttpServletResponse.class); when(requestNoPatient.getRequestURI()).thenReturn("/das/col7a1/features"); when(requestNoPatient.getQueryString()).thenReturn("3:48618447,48640609;maxbins=636"); when(requestNoPatient.getRequestDispatcher("/das/col7a1/features")).thenReturn(requestDispatcher); } @Test public void doFilterPatientTest() throws UnimplementedFeatureException, DataSourceException, IOException, ServletException { ArgumentCaptor<HttpServletRequest> argumentRequest = ArgumentCaptor.forClass(HttpServletRequest.class); ArgumentCaptor<HttpServletResponse> argumentResponse = ArgumentCaptor.forClass(HttpServletResponse.class); filter.doFilter(request, response, chain); verify(requestDispatcher).forward(argumentRequest.capture(), argumentResponse.capture()); assertEquals("3,dasdataset_502:48618447,48640609;maxbins=636", argumentRequest.getValue().getQueryString()); } @Test public void doFilterNoPatientTest() throws UnimplementedFeatureException, DataSourceException, IOException, ServletException { filter.doFilter(requestNoPatient, responseNoPatient, chain); verify(chain).doFilter(eq(requestNoPatient), eq(responseNoPatient)); } }