com.holonplatform.vaadin.spring.utils.AbstractVaadinSpringTest Maven / Gradle / Ivy
/*
* Copyright 2016-2017 Axioma srl.
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package com.holonplatform.vaadin.spring.utils;
import java.util.Locale;
import java.util.Properties;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import javax.servlet.http.HttpServletRequest;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit.jupiter.SpringExtension;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.web.context.WebApplicationContext;
import com.holonplatform.vaadin.internal.test.AbstractVaadinTest;
import com.vaadin.server.DefaultDeploymentConfiguration;
import com.vaadin.server.ServiceException;
import com.vaadin.server.UIProvider;
import com.vaadin.server.VaadinServlet;
import com.vaadin.server.VaadinServletRequest;
import com.vaadin.server.VaadinServletService;
import com.vaadin.server.VaadinSession;
import com.vaadin.spring.annotation.EnableVaadin;
import com.vaadin.spring.internal.BeanStore;
import com.vaadin.spring.internal.BeanStoreRetrievalStrategy;
import com.vaadin.spring.internal.UIScopeImpl;
import com.vaadin.spring.server.SpringUIProvider;
import com.vaadin.spring.server.SpringVaadinServlet;
import com.vaadin.spring.server.SpringVaadinServletRequest;
import com.vaadin.spring.server.SpringVaadinServletService;
/**
* Abstract JUnit test class using Spring to enable a web environment to test Vaadin application elements with Spring
* support.
*
* @since 5.0.0
*/
@ExtendWith(SpringExtension.class)
@ContextConfiguration
@WebAppConfiguration
@DirtiesContext
public abstract class AbstractVaadinSpringTest extends AbstractVaadinTest {
@Configuration
@EnableVaadin
public static class Config {
@Autowired
private WebApplicationContext appContext;
@Bean
public VaadinSession vaadinSession() throws Exception {
return new TestVaadinSpringSession(appContext);
}
}
@Autowired
protected WebApplicationContext applicationContext;
@Autowired
protected HttpServletRequest request;
@BeforeEach
@Override
public void setup() throws Exception {
UIScopeImpl.setBeanStoreRetrievalStrategy(new TestSingletonBeanStoreRetrievalStrategy());
super.setup();
}
/*
* (non-Javadoc)
* @see com.holonplatform.vaadin.core.utils.test.AbstractVaadinTest#createVaadinSession(java.util.Locale)
*/
@Override
protected VaadinSession createVaadinSession(Locale locale) throws Exception {
return applicationContext.getBean(VaadinSession.class);
}
/*
* (non-Javadoc)
* @see com.holonplatform.vaadin.core.utils.test.AbstractVaadinTest#buildUiProvider()
*/
@Override
protected UIProvider buildUiProvider() {
return new SpringUIProvider(vaadinSession);
}
/*
* (non-Javadoc)
* @see com.holonplatform.vaadin.core.utils.test.AbstractVaadinTest#buildVaadinRequest()
*/
@Override
protected VaadinServletRequest buildVaadinRequest() {
return new SpringVaadinServletRequest(request, (VaadinServletService) vaadinSession.getService(), false);
}
/*
* (non-Javadoc)
* @see com.holonplatform.vaadin.utils.test.AbstractVaadinTest#buildVaadinRequest(java.lang.String)
*/
@SuppressWarnings("serial")
@Override
protected VaadinServletRequest buildVaadinRequest(String location) {
return new SpringVaadinServletRequest(request, (VaadinServletService) vaadinSession.getService(), false) {
/*
* (non-Javadoc)
* @see javax.servlet.ServletRequestWrapper#getParameter(java.lang.String)
*/
@Override
public String getParameter(String name) {
if ("v-loc".equals(name)) {
return location;
}
return super.getParameter(name);
}
};
}
@SuppressWarnings("serial")
public static class TestVaadinSpringSession extends VaadinSession {
private final Lock lock = new ReentrantLock();
public TestVaadinSpringSession(WebApplicationContext applicationContext) throws ServiceException {
super(new TestSpringVaadinServletService(new SpringVaadinServlet(), applicationContext));
}
@Override
public boolean hasLock() {
return true;
}
/*
* (non-Javadoc)
* @see com.vaadin.server.VaadinSession#getLockInstance()
*/
@Override
public Lock getLockInstance() {
return lock;
}
}
public static class TestSingletonBeanStoreRetrievalStrategy implements BeanStoreRetrievalStrategy {
public static final String CONVERSATION_ID = "testConversation";
private BeanStore beanStore = new BeanStore("testBeanStore");
@Override
public BeanStore getBeanStore() {
return beanStore;
}
@Override
public String getConversationId() {
return CONVERSATION_ID;
}
}
@SuppressWarnings("serial")
public static class TestSpringVaadinServletService extends SpringVaadinServletService {
private WebApplicationContext appContext;
public TestSpringVaadinServletService(VaadinServlet servlet, WebApplicationContext applicationContext)
throws ServiceException {
super(servlet, new DefaultDeploymentConfiguration(TestSpringVaadinServletService.class, new Properties()),
"");
this.appContext = applicationContext;
init();
}
@Override
public WebApplicationContext getWebApplicationContext() {
return appContext;
}
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy