@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 testIsSAMLAuthentication() {
   // given
   ServiceAccess mockServiceAccess = mock(ServiceAccess.class);
   ConfigurationService mockConfServ = mock(ConfigurationService.class);
   closedMplFilter.serviceAccess = mockServiceAccess;
   doReturn(mockConfServ).when(mockServiceAccess).getService(ConfigurationService.class);
   TenantService tenantMock = mock(TenantService.class);
   doReturn(tenantMock).when(mockServiceAccess).getService(TenantService.class);
   // when
   closedMplFilter.isSAMLAuthentication();
   // then
 }
  @Before
  public void setup() throws Exception {

    requestMock = mock(HttpServletRequest.class);
    responseMock = mock(HttpServletResponse.class);
    chainMock = mock(FilterChain.class);
    sessionMock = mock(HttpSession.class);
    redirectorMock = mock(RequestRedirector.class);
    doReturn(sessionMock).when(requestMock).getSession();

    closedMplFilter = spy(new ClosedMarketplaceFilter());
    closedMplFilter.excludeUrlPattern = EXCLUDE_URL_PATTERN;
    closedMplFilter.redirector = redirectorMock;
  }
  @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);
  }