/*******************************************************************************
* Copyright (c) 2012-2016 Codenvy, S.A.
* 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:
* Codenvy, S.A. - initial API and implementation
*******************************************************************************/
package org.everrest.core.impl.method;
import org.everrest.core.ApplicationContext;
import org.everrest.core.InitialProperties;
import org.everrest.core.Parameter;
import org.everrest.core.impl.EnvironmentContext;
import org.everrest.core.impl.ProviderBinder;
import org.junit.Before;
import org.junit.Test;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.Request;
import javax.ws.rs.core.SecurityContext;
import javax.ws.rs.core.UriInfo;
import javax.ws.rs.ext.Providers;
import static org.junit.Assert.assertSame;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.never;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@SuppressWarnings("unchecked")
public class ContextParameterResolverTest {
private Parameter parameter;
private ApplicationContext applicationContext;
private EnvironmentContext environmentContext;
private ContextParameterResolver contextParameterResolver;
@Before
public void setUp() throws Exception {
parameter = mock(Parameter.class);
applicationContext = mock(ApplicationContext.class);
contextParameterResolver = new ContextParameterResolver();
environmentContext = mock(EnvironmentContext.class);
EnvironmentContext.setCurrent(environmentContext);
}
@Test
public void resolvesHttpHeaders() throws Exception {
HttpHeaders httpHeaders = mock(HttpHeaders.class);
when(applicationContext.getHttpHeaders()).thenReturn(httpHeaders);
when(parameter.getParameterClass()).thenReturn((Class)HttpHeaders.class);
assertSame(httpHeaders, contextParameterResolver.resolve(parameter, applicationContext));
verify(environmentContext, never()).get(any(Class.class));
}
@Test
public void resolvesSecurityContext() throws Exception {
SecurityContext securityContext = mock(SecurityContext.class);
when(applicationContext.getSecurityContext()).thenReturn(securityContext);
when(parameter.getParameterClass()).thenReturn((Class)SecurityContext.class);
assertSame(securityContext, contextParameterResolver.resolve(parameter, applicationContext));
verify(environmentContext, never()).get(any(Class.class));
}
@Test
public void resolvesRequest() throws Exception {
Request request = mock(Request.class);
when(applicationContext.getRequest()).thenReturn(request);
when(parameter.getParameterClass()).thenReturn((Class)Request.class);
assertSame(request, contextParameterResolver.resolve(parameter, applicationContext));
verify(environmentContext, never()).get(any(Class.class));
}
@Test
public void resolvesUriInfo() throws Exception {
UriInfo uriInfo = mock(UriInfo.class);
when(applicationContext.getUriInfo()).thenReturn(uriInfo);
when(parameter.getParameterClass()).thenReturn((Class)UriInfo.class);
assertSame(uriInfo, contextParameterResolver.resolve(parameter, applicationContext));
verify(environmentContext, never()).get(any(Class.class));
}
@Test
public void resolvesProviders() throws Exception {
ProviderBinder providers = mock(ProviderBinder.class);
when(applicationContext.getProviders()).thenReturn(providers);
when(parameter.getParameterClass()).thenReturn((Class)Providers.class);
assertSame(providers, contextParameterResolver.resolve(parameter, applicationContext));
verify(environmentContext, never()).get(any(Class.class));
}
@Test
public void resolvesApplication() throws Exception {
Application application = mock(Application.class);
when(applicationContext.getApplication()).thenReturn(application);
when(parameter.getParameterClass()).thenReturn((Class)Application.class);
assertSame(application, contextParameterResolver.resolve(parameter, applicationContext));
verify(environmentContext, never()).get(any(Class.class));
}
@Test
public void resolvesInitialProperties() throws Exception {
InitialProperties initialProperties = mock(InitialProperties.class);
when(applicationContext.getInitialProperties()).thenReturn(initialProperties);
when(parameter.getParameterClass()).thenReturn((Class)InitialProperties.class);
assertSame(initialProperties, contextParameterResolver.resolve(parameter, applicationContext));
verify(environmentContext, never()).get(any(Class.class));
}
@Test
public void usesEnvironmentContextToResolveContextParameters() throws Exception {
HttpServletRequest servletRequest = mock(HttpServletRequest.class);
when(environmentContext.get(eq(HttpServletRequest.class))).thenReturn(servletRequest);
when(parameter.getParameterClass()).thenReturn((Class)HttpServletRequest.class);
assertSame(servletRequest, contextParameterResolver.resolve(parameter, applicationContext));
verify(environmentContext, times(1)).get(any(Class.class));
}
}