@Test
  public void testDoFilter_restrictedMarketplaceWithNoAccess() throws Exception {
    doReturn(false).when(closedMplFilter).isSAMLAuthentication();

    // given
    doReturn("/portal/*").when(requestMock).getServletPath();
    doReturn("mpid").when(sessionMock).getAttribute(Constants.REQ_PARAM_MARKETPLACE_ID);
    doReturn(getConfiguration(true, true, "testOrg")).when(closedMplFilter).getConfig("mpid");
    doReturn(getUserDetails("anotherOrg")).when(sessionMock).getAttribute(Constants.SESS_ATTR_USER);

    // when
    closedMplFilter.doFilter(requestMock, responseMock, chainMock);

    // then
    verify(redirectorMock, times(1))
        .forward(eq(requestMock), eq(responseMock), eq(INSUFFICIENT_AUTH_URL));

    // when
    doReturn(true).when(sessionMock).getAttribute(Constants.PORTAL_HAS_BEEN_REQUESTED);
    ConfigurationService configurationMock = mock(ConfigurationService.class);
    doReturn(configurationMock).when(closedMplFilter).getConfigurationService(requestMock);
    VOConfigurationSetting voConfigSet = new VOConfigurationSetting();
    voConfigSet.setValue("address");
    doReturn(voConfigSet)
        .when(configurationMock)
        .getVOConfigurationSetting(MP_ERROR_REDIRECT_HTTP, GLOBAL_CONTEXT);

    closedMplFilter.doFilter(requestMock, responseMock, chainMock);
    verify(responseMock, times(1)).sendRedirect(anyString());
  }
  @Test
  public void testDoFilter_requestMatchesExcludePattern() throws Exception {
    doReturn(false).when(closedMplFilter).isSAMLAuthentication();

    // given
    doReturn("/css/style.css").when(requestMock).getServletPath();

    // when
    closedMplFilter.doFilter(requestMock, responseMock, chainMock);

    // then
    verify(chainMock, times(1)).doFilter(requestMock, responseMock);
  }
  @Test
  public void testDoFilter_emptyMplId() throws Exception {
    doReturn(false).when(closedMplFilter).isSAMLAuthentication();

    // given
    doReturn("/portal/*").when(requestMock).getServletPath();
    doReturn("").when(sessionMock).getAttribute(Constants.REQ_PARAM_MARKETPLACE_ID);

    // when
    closedMplFilter.doFilter(requestMock, responseMock, chainMock);

    // then
    verify(chainMock, times(1)).doFilter(requestMock, responseMock);
  }
  @Test
  public void testDoFilter_notRestrictedMarketplace() throws Exception {
    doReturn(false).when(closedMplFilter).isSAMLAuthentication();

    // given
    doReturn("/portal/*").when(requestMock).getServletPath();
    doReturn("mpid").when(sessionMock).getAttribute(Constants.REQ_PARAM_MARKETPLACE_ID);
    doReturn(getConfiguration(false, false, null)).when(closedMplFilter).getConfig("mpid");

    // when
    closedMplFilter.doFilter(requestMock, responseMock, chainMock);

    // then
    verify(chainMock, times(1)).doFilter(requestMock, responseMock);
  }
  @Test
  public void testDoFilter_restrictedMarketplaceWithAccess() throws Exception {
    doReturn(false).when(closedMplFilter).isSAMLAuthentication();

    // given
    doReturn("/portal/*").when(requestMock).getServletPath();
    doReturn("mpid").when(sessionMock).getAttribute(Constants.REQ_PARAM_MARKETPLACE_ID);
    doReturn(getConfiguration(true, true, "testOrg")).when(closedMplFilter).getConfig("mpid");
    doReturn(getUserDetails("testOrg")).when(sessionMock).getAttribute(Constants.SESS_ATTR_USER);

    // when
    closedMplFilter.doFilter(requestMock, responseMock, chainMock);

    // then
    verify(chainMock, times(1)).doFilter(requestMock, responseMock);
  }
  @Test
  public void testDoFilter_saml() throws Exception {
    doReturn(true).when(closedMplFilter).isSAMLAuthentication();

    // given
    RequestDispatcher dispatcherMock = mock(RequestDispatcher.class);
    ServletContext mockServletContext = mock(ServletContext.class);
    doReturn(mockServletContext).when(requestMock).getServletContext();
    doReturn(dispatcherMock).when(mockServletContext).getRequestDispatcher(any(String.class));
    doReturn(true).when(closedMplFilter).isSAMLAuthentication();
    doReturn("/portal/*").when(requestMock).getServletPath();
    doReturn("mpid").when(sessionMock).getAttribute(Constants.REQ_PARAM_MARKETPLACE_ID);
    doReturn(getConfiguration(true, true, "testOrg")).when(closedMplFilter).getConfig("mpid");
    doReturn(getUserDetails("anotherOrg")).when(sessionMock).getAttribute(Constants.SESS_ATTR_USER);

    // when
    closedMplFilter.doFilter(requestMock, responseMock, chainMock);

    // then
    verify(dispatcherMock, times(1)).forward(requestMock, responseMock);
  }