package org.jboss.resteasy.test.cdi.interceptors;
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.interceptors.resource.InterceptorBook;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorBookReader;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorBookReaderInterceptor;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorBookReaderInterceptorInterceptor;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorBookWriter;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorBookWriterInterceptor;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorBookWriterInterceptorInterceptor;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorClassBinding;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorClassInterceptorStereotype;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorClassMethodInterceptorStereotype;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorFilterBinding;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorFour;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorLifecycleBinding;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorMethodBinding;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorOne;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorPostConstructInterceptor;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorPreDestroyInterceptor;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorReaderBinding;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorRequestFilter;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorRequestFilterInterceptor;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorRequestFilterInterceptorBinding;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorResource;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorResponseFilter;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorResponseFilterInterceptor;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorResponseFilterInterceptorBinding;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorStereotyped;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorThree;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorTwo;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorVisitList;
import org.jboss.resteasy.test.cdi.interceptors.resource.InterceptorWriterBinding;
import org.jboss.resteasy.test.cdi.util.Constants;
import org.jboss.resteasy.test.cdi.util.UtilityProducer;
import org.jboss.resteasy.utils.PortProviderUtil;
import org.jboss.resteasy.utils.TestUtil;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
import javax.swing.text.Utilities;
import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;
import static org.hamcrest.core.Is.is;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertThat;
/**
* @tpSubChapter CDI
* @tpChapter Integration tests
* @tpTestCaseDetails Interceptors test.
* @tpSince RESTEasy 3.0.16
*/
@RunWith(Arquillian.class)
@RunAsClient
public class InterceptorTest {
protected static final Logger log = LogManager.getLogger(InterceptorTest.class.getName());
@Deployment
public static Archive<?> createTestArchive() {
WebArchive war = TestUtil.prepareArchive(InterceptorTest.class.getSimpleName());
war.addClasses(Constants.class, UtilityProducer.class, Utilities.class, InterceptorVisitList.class)
.addClasses(InterceptorResource.class, InterceptorOne.class, InterceptorTwo.class)
.addClasses(InterceptorClassBinding.class, InterceptorMethodBinding.class, InterceptorThree.class, InterceptorFour.class)
.addClasses(InterceptorFilterBinding.class, InterceptorRequestFilterInterceptorBinding.class)
.addClasses(InterceptorResponseFilterInterceptorBinding.class)
.addClasses(InterceptorRequestFilterInterceptor.class, InterceptorResponseFilterInterceptor.class, InterceptorRequestFilter.class, InterceptorResponseFilter.class)
.addClasses(InterceptorReaderBinding.class, InterceptorWriterBinding.class)
.addClasses(InterceptorBook.class, InterceptorBookReader.class, InterceptorBookWriter.class)
.addClasses(InterceptorBookReaderInterceptor.class, InterceptorBookWriterInterceptor.class)
.addClasses(InterceptorBookReaderInterceptorInterceptor.class, InterceptorBookWriterInterceptorInterceptor.class)
.addClasses(InterceptorClassInterceptorStereotype.class, InterceptorClassMethodInterceptorStereotype.class, InterceptorStereotyped.class)
.addClasses(InterceptorLifecycleBinding.class, InterceptorPostConstructInterceptor.class, InterceptorPreDestroyInterceptor.class)
.addAsWebInfResource(InterceptorTest.class.getPackage(), "interceptorBeans.xml", "beans.xml");
return war;
}
private String generateURL(String path) {
return PortProviderUtil.generateURL(path, InterceptorTest.class.getSimpleName());
}
/**
* @tpTestDetails One item is stored and load to collection in resources.
* @tpSince RESTEasy 3.0.16
*/
@Test
public void testInterceptors() throws Exception {
Client client = ClientBuilder.newClient();
// Create book.
InterceptorBook book = new InterceptorBook("RESTEasy: the Sequel");
WebTarget base = client.target(generateURL("/create/"));
Response response = base.request().post(Entity.entity(book, Constants.MEDIA_TYPE_TEST_XML));
assertEquals(200, response.getStatus());
int id = response.readEntity(int.class);
assertThat("Id of stored book is wrong.", 0, is(id));
// Retrieve book.
base = client.target(generateURL("/book/" + id));
response = base.request().accept(Constants.MEDIA_TYPE_TEST_XML).get();
assertEquals(200, response.getStatus());
InterceptorBook result = response.readEntity(InterceptorBook.class);
assertEquals("Wrong book is received.", book, result);
// check interceptors
base = client.target(generateURL("/test/"));
response = base.request().post(Entity.text(new String()));
assertEquals(200, response.getStatus());
client.close();
}
}