End to End tests ReST with APE.
edevera Mar 31, 2013 7:16 PMI want to be able to do an end to end test, starting with the ReST web services and ending with Database verification. I want to be able to seed the database with Arquillian Persistence Extension based on DbUnit, call the Web Service and do a match afterwards again with APE. For some unknown reason, Arquillian does not seem to be seeding the database correctly.
The tests looks like:
package com.edevera.iexchange.ws; import java.net.URISyntaxException; import java.net.URL; import java.util.UUID; import com.edevera.iexchange.entities.User; 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.arquillian.persistence.UsingDataSet; import org.jboss.arquillian.test.api.ArquillianResource; import org.jboss.resteasy.client.ProxyFactory; import org.jboss.resteasy.plugins.providers.RegisterBuiltin; import org.jboss.resteasy.spi.ResteasyProviderFactory; import org.jboss.shrinkwrap.api.Archive; import org.jboss.shrinkwrap.api.ShrinkWrap; import org.jboss.shrinkwrap.api.formatter.Formatters; import org.jboss.shrinkwrap.api.spec.WebArchive; import org.jboss.shrinkwrap.resolver.api.maven.Maven; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import static org.hamcrest.CoreMatchers.equalTo; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.notNullValue; import static org.hamcrest.CoreMatchers.nullValue; import static org.junit.Assert.assertThat; /** * @author <a href="mailto:eduardo.devera@gmail.com">Eduardo de Vera</a> */ @RunWith(Arquillian.class) @UsingDataSet public class ReStUserServiceIT { @Deployment public static Archive<?> createDeployment() { final WebArchive result = ShrinkWrap.create(WebArchive.class, "iexchange.war") .addPackage("com.edevera.iexchange.ws") .addAsLibrary( Maven.resolver() .loadPomFromFile("pom.xml").resolve("com.edevera.iexchange:com.edevera.iexchange.model:1.0-SNAPSHOT") .withoutTransitivity().asSingleFile() ) .addAsLibrary( Maven.resolver() .loadPomFromFile("pom.xml").resolve("com.edevera.iexchange:com.edevera.iexchange.core:1.0-SNAPSHOT") .withoutTransitivity().asSingleFile() ) .addAsWebInfResource("jboss-ds.xml") .addAsWebInfResource("beans.xml") //.addAsResource("META-INF/test-persistence.xml", "META-INF/persistence.xml") ; result.writeTo(System.out, Formatters.VERBOSE); System.out.println(); return result; } @Before public void setUp() throws Exception { RegisterBuiltin.register(ResteasyProviderFactory.getInstance()); } @Test @RunAsClient public void testViewUser(@ArquillianResource final URL url) throws URISyntaxException { final ReStUserService client = ProxyFactory.create(ReStUserService.class, url.toString()); final String username = "existingUsername"; final User user = client.viewUser(username); assertThat("The user must exist", user, is(notNullValue())); assertThat("The user name must be the expected", user.getName(), is(equalTo("User Name"))); } @Test @RunAsClient public void testCreateUser(@ArquillianResource final URL url) throws Exception { final ReStUserService client = ProxyFactory.create(ReStUserService.class, url.toString()); final String email = "user@domain.com"; final String nameOfTheUser = "User Name"; final String businessKey = UUID.randomUUID().toString(); final User user = new User(); user.setEmail(email); user.setName(nameOfTheUser); user.setBusinessKey(businessKey); client.registerUser(user); assertThat(user.getBusinessKey(), is(equalTo(user.getBusinessKey()))); final User result = client.viewUser(user.getBusinessKey()); assertThat("The user must exist", result, notNullValue()); assertThat("The business key of the user ", result.getBusinessKey(), is(equalTo(businessKey))); assertThat("The email must be the expected", result.getEmail(), is(equalTo(email))); assertThat("The name must be the expected", result.getName(), is(equalTo(nameOfTheUser))); } @Test @RunAsClient public void testUpdateUser(@ArquillianResource final URL url) throws Exception { final ReStUserService client = ProxyFactory.create(ReStUserService.class, url.toString()); final User user = client.viewUser("existingUsername"); assertThat("The user must exist in order to be able to update it.", user, is(notNullValue())); user.setName("New Name"); final User result = client.updateUser(user); assertThat("The business key of the user must not have changed.", result.getBusinessKey(), is(equalTo(user.getBusinessKey()))); assertThat("The name of the user must have changed.", result.getName(), is(equalTo("New Name"))); } @Test @RunAsClient public void testBanUser(@ArquillianResource final URL url) throws Exception { final ReStUserService client = ProxyFactory.create(ReStUserService.class, url.toString()); final String existingUsername = "existingUsername"; client.banUser(existingUsername); final User unexistingUser = client.viewUser(existingUsername); assertThat("The user should have been deleted and null should be returned.", unexistingUser, is(nullValue())); } }
Has someone taken the same approach for testing their ReST services? Am I doing something wrong?
Edited: just saw ticket https://issues.jboss.org/browse/ARQ-1077 and realized this is a know problem. The question now is, does Arquillian want to enable such testing?