package org.jboss.seam.example.restbay.test;
import org.dbunit.operation.DatabaseOperation;
import org.jboss.arquillian.container.test.api.Deployment;
import org.jboss.arquillian.container.test.api.OverProtocol;
import org.jboss.arquillian.junit.Arquillian;
import org.jboss.seam.mock.DBJUnitSeamTest;
import org.jboss.seam.mock.ResourceRequestEnvironment;
import org.jboss.seam.mock.EnhancedMockHttpServletRequest;
import org.jboss.seam.mock.EnhancedMockHttpServletResponse;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.jboss.shrinkwrap.resolver.api.DependencyResolvers;
import org.jboss.shrinkwrap.resolver.api.maven.MavenDependencyResolver;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import static org.jboss.seam.mock.ResourceRequestEnvironment.ResourceRequest;
import static org.jboss.seam.mock.ResourceRequestEnvironment.Method;
import java.util.Map;
import java.util.HashMap;
/**
*
*/
@RunWith(Arquillian.class)
public class CategoryServiceDBUnitTest extends DBJUnitSeamTest
{
@Deployment(name="CategoryServiceDBUnitTest")
@OverProtocol("Servlet 3.0")
public static Archive<?> createDeployment()
{
EnterpriseArchive er = Deployments.restbayDeployment();
WebArchive web = er.getAsType(WebArchive.class, "restbay-web.war");
er.addAsLibraries(DependencyResolvers.use(MavenDependencyResolver.class)
.configureFrom("pom.xml")
.artifact("org.dbunit:dbunit:jar:2.2")
.resolveAsFiles());
web.addAsResource("org/jboss/seam/example/restbay/test/dbunitdata.xml", "org/jboss/seam/example/restbay/test/dbunitdata.xml");
web.addClasses(CategoryServiceDBUnitTest.class);
return er;
}
protected void prepareDBUnitOperations() {
setDatabase("hsql");
setDatasourceJndiName("java:/restbayDatasource");
beforeTestOperations.add(
new DataSetOperation("org/jboss/seam/example/restbay/test/dbunitdata.xml", DatabaseOperation.CLEAN_INSERT)
);
}
// Or, if you don't want shared headers between test methods, just use
// it directly in your test method:
// new ResourceRequest(new ResourceRequestTest(this), Method.GET, ...).run();
ResourceRequestEnvironment sharedEnvironment;
@Before
public void prepareSharedEnvironment() throws Exception
{
sharedEnvironment = new ResourceRequestEnvironment(this)
{
@Override
public Map<String, Object> getDefaultHeaders()
{
return new HashMap<String, Object>()
{{
put("Accept", "text/plain");
}};
}
};
}
@Test
public void testCategories() throws Exception
{
// new ResourceRequest(new ResourceRequestEnvironment(this), Method.GET, "/restv1/category")
// or:
new ResourceRequest(sharedEnvironment, Method.GET, "/restv1/category")
{
@Override
protected void prepareRequest(EnhancedMockHttpServletRequest request)
{
// Or set it as default in environment
request.addHeader("Accept", "text/plain");
}
@Override
protected void onResponse(EnhancedMockHttpServletResponse response)
{
assert response.getStatus() == 200;
String[] lines = response.getContentAsString().split("\n");
assert lines[0].equals("16,foo");
assert lines[1].equals("17,bar");
assert lines[2].equals("18,baz");
}
}.run();
}
}