/*******************************************************************************
* Copyright (c) 2010-2014 SAP AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* SAP AG - initial API and implementation
*******************************************************************************/
package org.eclipse.skalli.view.internal.filter;
import static org.easymock.EasyMock.*;
import java.util.List;
import java.util.Map;
import java.util.UUID;
import javax.servlet.FilterChain;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.eclipse.skalli.model.User;
import org.eclipse.skalli.model.ValidationException;
import org.eclipse.skalli.services.Services;
import org.eclipse.skalli.services.favorites.Favorites;
import org.eclipse.skalli.services.favorites.FavoritesService;
import org.eclipse.skalli.testutil.BundleManager;
import org.eclipse.skalli.view.Consts;
import org.junit.Before;
import org.junit.Ignore;
import org.junit.Test;
@SuppressWarnings("nls")
public class FavoritesFilterTest {
private static final String USERID = "Homer";
private static final User USER = new User(USERID, USERID, "Simpson", "homer@example.org");
private HttpServletRequest mockRequest;
private HttpServletResponse mockResponse;
private FilterChain mockChain;
private Object[] mocks;
private Favorites favorites;
@Before
public void setup() throws Exception {
BundleManager.startBundles();
persistFavorites();
mockRequest = createMock(HttpServletRequest.class);
mockResponse = createMock(HttpServletResponse.class);
mockChain = createMock(FilterChain.class);
mocks = new Object[] { mockRequest, mockResponse, mockChain };
reset(mocks);
recordMocks();
replay(mocks);
}
private void persistFavorites() throws ValidationException {
favorites = new Favorites(USERID);
favorites.addProject(UUID.fromString("0a9dc902-5350-4744-a30e-f8aad616a943"));
favorites.addProject(UUID.fromString("234d9ad0-1bf2-4cee-b10f-6fc6bee165c3"));
favorites.addProject(UUID.fromString("37c64257-9355-40b5-8f3c-87513a03d197"));
favorites.addProject(UUID.fromString("5bf88924-9469-4980-8834-199ac4f20cb8"));
favorites.addProject(UUID.fromString("8b53fbd7-dae2-43e7-8208-2b45e9ec718a"));
FavoritesService favoritesService = Services.getRequiredService(FavoritesService.class);
favoritesService.persist(favorites, USERID);
}
private void recordMocks() throws Exception {
expect(mockRequest.getAttribute(Consts.ATTRIBUTE_USER)).andReturn(USER);
expect(mockRequest.getParameter(Consts.PARAM_START)).andReturn("0");
expect(mockRequest.getParameter(Consts.PARAM_COUNT)).andReturn("");
mockRequest.setAttribute(eq("title"), eq("Favorites for " + USER.getDisplayName()));
mockRequest.setAttribute(eq("projects"), isA(List.class));
mockRequest.setAttribute(eq("natures"), isA(Map.class));
mockRequest.setAttribute(eq("parents"), isA(Map.class));
mockRequest.setAttribute(eq("parentChains"), isA(Map.class));
mockRequest.setAttribute(eq("subprojects"), isA(Map.class));
mockRequest.setAttribute(eq("favorites"), eq(favorites.asMap()));
mockRequest.setAttribute(eq("duration"), eq(0L));
mockRequest.setAttribute(eq("start"), eq(0));
mockRequest.setAttribute(eq("viewSize"), eq(10));
mockRequest.setAttribute(eq("resultSize"), eq(5));
mockRequest.setAttribute(eq("currentPage"), eq(1));
mockRequest.setAttribute(eq("pages"), eq(1));
mockRequest.setAttribute(eq("user"), eq(USER));
mockChain.doFilter(eq(mockRequest), eq(mockResponse));
}
private class FavoritesFilterWrapper extends FavoritesFilter {
@Override
protected User getUser(HttpServletRequest request) {
return USER;
}
}
// ignore this test at the moment, refactoring necessary:
// - test doesn't rely on projects located in this bundle when running maven build
// - persisted favorites are not cleaned up after test execution
@Ignore
@Test
public void testDoFilter() throws Exception {
FavoritesFilterWrapper filter = new FavoritesFilterWrapper();
filter.doFilter(mockRequest, mockResponse, mockChain);
verify(mocks);
}
}