package org.jboss.resteasy.test.spring.inmodule; 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.logging.Logger; import org.jboss.resteasy.annotations.ClientURI; import org.jboss.resteasy.client.jaxrs.ResteasyClient; import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; import org.jboss.resteasy.test.spring.inmodule.resource.Contact; import org.jboss.resteasy.test.spring.inmodule.resource.ContactService; import org.jboss.resteasy.test.spring.inmodule.resource.Contacts; import org.jboss.resteasy.test.spring.inmodule.resource.ContactsResource; import org.jboss.resteasy.util.HttpHeaderNames; import org.jboss.resteasy.utils.PortProviderUtil; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.asset.StringAsset; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; /** * @tpSubChapter Spring * @tpChapter Integration tests * @tpSince RESTEasy 3.0.16 */ @RunWith(Arquillian.class) @RunAsClient public class ContactsTest { private static Logger logger = Logger.getLogger(ContactsTest.class); private static ContactProxy proxy; private static ResteasyClient client; @Path(ContactsResource.CONTACTS_URL) public interface ContactProxy { @Path("data") @POST @Consumes(MediaType.APPLICATION_XML) Response createContact(Contact contact); @GET @Produces(MediaType.APPLICATION_XML) Contact getContact(@ClientURI String uri); @GET String getString(@ClientURI String uri); } @Deployment private static Archive<?> deploy() { WebArchive archive = ShrinkWrap.create(WebArchive.class, ContactsTest.class.getSimpleName() + ".war") .addClass(ContactsResource.class) .addClass(ContactService.class) .addClass(Contacts.class) .addClass(Contact.class) .addClass(ContactsTest.class) .addAsWebInfResource(ContactsTest.class.getPackage(), "contacts/web.xml", "web.xml") .addAsWebInfResource(ContactsTest.class.getPackage(), "contacts/springmvc-servlet.xml", "springmvc-servlet.xml"); archive.addAsManifestResource(new StringAsset("Dependencies: org.springframework.spring meta-inf\n"), "MANIFEST.MF"); return archive; } private String generateURL(String path) { return PortProviderUtil.generateURL(path, ContactsTest.class.getSimpleName()); } /** * @tpTestDetails Test is using component-scan and annotation-config spring features. This features are unusable if * running with spring dependency 3.2.8.RELEASE and earlier. Only 3.2.9.RELEASE and spring 4 are supported. * @tpSince RESTEasy 3.0.16 */ @Test public void testData() { client = new ResteasyClientBuilder().build(); proxy = client.target(generateURL("")).proxy(ContactProxy.class); Response response = proxy.createContact(new Contact("Solomon", "Duskis")); Assert.assertEquals(201, response.getStatus()); String duskisUri = (String) response.getMetadata().getFirst(HttpHeaderNames.LOCATION); logger.info(duskisUri); Assert.assertTrue("Unexpected response from the server", duskisUri.endsWith(ContactsResource.CONTACTS_URL + "/data/Duskis")); response.close(); Assert.assertEquals("Unexpected response from the server", "Solomon", proxy.getContact(duskisUri).getFirstName()); response = proxy.createContact(new Contact("Bill", "Burkie")); response.close(); logger.info(proxy.getString(generateURL(ContactsResource.CONTACTS_URL + "/data"))); } }