package org.jboss.resteasy.test.cdi.injection;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.RunAsClient;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.resteasy.test.cdi.injection.resource.WeldSubdeploymentApplicationResource;
import org.jboss.resteasy.test.cdi.injection.resource.WeldSubdeploymentCdiJpaInjectingBean;
import org.jboss.resteasy.test.cdi.injection.resource.WeldSubdeploymentRequestResource;
import org.jboss.resteasy.test.cdi.injection.resource.WeldSubdeploymentStatefulResource;
import org.jboss.resteasy.test.cdi.injection.resource.WeldSubdeploymentStatelessResource;
import org.jboss.resteasy.util.HttpResponseCodes;
import org.jboss.resteasy.utils.PortProviderUtil;
import org.jboss.resteasy.utils.TestApplication;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.EmptyAsset;
import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.JavaArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.junit.Assert.assertEquals;
/**
* @tpSubChapter CDI
* @tpChapter Integration tests
* @tpTestCaseDetails Regression test for JBEAP-4084, WFLY-6485
* Test that JPA dependencies are set for sub-deployments
* @tpSince RESTEasy 3.0.16
*/
@RunWith(Arquillian.class)
@RunAsClient
public class WeldSubdeploymentTest {
protected static final Logger logger = LogManager.getLogger(WeldSubdeploymentTest.class.getName());
private static final String WAR_DEPLOYMENT_NAME = "simple";
public static final String ERROR_MESSAGE = "JBEAP-4084 regression, injected EntityManagerFactory should not be null but is";
Client client;
@Deployment
public static Archive<?> deploy() {
EnterpriseArchive ear = ShrinkWrap.create(EnterpriseArchive.class, "WeldSubdeploymentTest.ear");
WebArchive war = ShrinkWrap.create(WebArchive.class, String.format("%s.war", WAR_DEPLOYMENT_NAME));
war.addClasses(WeldSubdeploymentTest.class, WeldSubdeploymentCdiJpaInjectingBean.class, TestApplication.class);
war.addClasses(WeldSubdeploymentRequestResource.class, WeldSubdeploymentApplicationResource.class,
WeldSubdeploymentStatefulResource.class, WeldSubdeploymentStatelessResource.class);
war.addAsWebInfResource(EmptyAsset.INSTANCE, "beans.xml");
JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "util.jar");
jar.addAsManifestResource(WeldSubdeploymentTest.class.getPackage(), "persistence_subdeployment.xml", "persistence.xml");
war.addAsLibrary(jar);
ear.addAsModule(war);
return ear;
}
@Before
public void init() {
client = ClientBuilder.newClient();
}
@After
public void close() {
client.close();
}
private void testEndPoint(String scope) {
String url = PortProviderUtil.generateURL(String.format("/%s", scope), WAR_DEPLOYMENT_NAME);
logger.info(String.format("Request to %s", url));
WebTarget base = client.target(url);
Response response = base.request().get();
assertEquals(HttpResponseCodes.SC_NO_CONTENT, response.getStatus());
response.close();
}
/**
* @tpTestDetails Test for bean with application scope
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testAppcliationScope() throws Exception {
testEndPoint("application");
}
/**
* @tpTestDetails Test for bean with request scope
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testRequestScope() throws Exception {
testEndPoint("request");
}
/**
* @tpTestDetails Test for stateful bean
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testStateful() throws Exception {
testEndPoint("stateful");
}
/**
* @tpTestDetails Test for stateless bean
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testStateLess() throws Exception {
testEndPoint("stateless");
}
}