package org.jboss.seam.example.itext.test;
import java.io.File;
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.contexts.Contexts;
import org.jboss.seam.core.Conversation;
import org.jboss.seam.document.ByteArrayDocumentData;
import org.jboss.seam.document.DocumentData;
import org.jboss.seam.document.DocumentStore;
import org.jboss.seam.mock.JUnitSeamTest;
import org.jboss.seam.pdf.ui.UIDocument;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.ShrinkWrap;
import org.jboss.shrinkwrap.api.asset.StringAsset;
import org.jboss.shrinkwrap.api.importer.ZipImporter;
import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
* This is just a placeholder until I can find a way to actually test the UI
* components.
*/
@RunWith(Arquillian.class)
public class DocumentTest extends JUnitSeamTest
{
@Deployment
@OverProtocol("Servlet 3.0")
public static Archive<?> createDeployment()
{
EnterpriseArchive er = ShrinkWrap.create(ZipImporter.class, "seam-itext.ear").importFrom(new File("../itext-ear/target/seam-itext.ear"))
.as(EnterpriseArchive.class);
WebArchive web = er.getAsType(WebArchive.class, "itext-web.war");
web.addAsWebInfResource(new StringAsset("org.jboss.seam.mock.MockFacesContextFactory"), "classes/META-INF/services/javax.faces.context.FacesContextFactory");
web.addClasses(DocumentTest.class);
// Install org.jboss.seam.mock.MockSeamListener
web.delete("/WEB-INF/web.xml");
web.addAsWebInfResource("web.xml");
return er;
}
@Test
public void documentStore() throws Exception
{
String conversationId = new FacesRequest("/whyseam.xhtml")
{
@Override
protected void invokeApplication() throws Exception
{
Conversation.instance().begin();
DocumentStore store = (DocumentStore) getValue("#{org.jboss.seam.document.documentStore}");
String docId = store.newId();
Contexts.getSessionContext().set("docId", docId);
DocumentData documentData = new ByteArrayDocumentData("base", UIDocument.PDF, new byte[100]);
store.saveData(docId, documentData);
}
@Override
protected void renderResponse() throws Exception
{
String docId = (String) getValue("#{docId}");
assert docId != null;
DocumentStore store = (DocumentStore) getValue("#{org.jboss.seam.document.documentStore}");
assert store.idIsValid(docId);
}
}.run();
// different conversation
new FacesRequest("/whyseam.xhtml")
{
@Override
protected void renderResponse() throws Exception
{
String docId = (String) getValue("#{docId}");
assert docId != null;
DocumentStore store = (DocumentStore) getValue("#{org.jboss.seam.document.documentStore}");
assert !store.idIsValid(docId);
}
}.run();
new FacesRequest("/whyseam.xhtml", conversationId)
{
@Override
protected void renderResponse() throws Exception
{
String docId = (String) getValue("#{docId}");
assert docId != null;
DocumentStore store = (DocumentStore) getValue("#{org.jboss.seam.document.documentStore}");
assert store.idIsValid(docId);
ByteArrayDocumentData data = (ByteArrayDocumentData)store.getDocumentData(docId);
assert data.getDocumentType().equals(UIDocument.PDF);
assert data.getData().length == 100;
}
}.run();
}
}