package org.jboss.seam.example.quartz.test;
import static org.jboss.seam.example.quartz.Payment.Frequency.ONCE;
import java.math.BigDecimal;
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.example.quartz.Account;
import org.jboss.seam.example.quartz.Payment;
import org.jboss.seam.mock.DBJUnitSeamTest;
import org.jboss.shrinkwrap.api.Archive;
import org.jboss.shrinkwrap.api.spec.EnterpriseArchive;
import org.jboss.shrinkwrap.api.spec.WebArchive;
import org.junit.Test;
import org.junit.runner.RunWith;
/**
*
* @author Pete Muir
*
*/
// Actually this doesn't happen in the example, but lets test it here to keep
// all quartz tests in one place
@RunWith(Arquillian.class)
public class EventsTest extends DBJUnitSeamTest
{
@Deployment(name="EventsTest")
@OverProtocol("Servlet 3.0")
public static Archive<?> createDeployment()
{
EnterpriseArchive er = Deployments.quartzDeployment();
WebArchive web = er.getAsType(WebArchive.class, "quartz-web.war");
web.addClasses(EventsTest.class);
return er;
}
@Override
protected void prepareDBUnitOperations() {
setDatabase("HSQL");
setDatasourceJndiName("java:jboss/datasources/ExampleDS");
beforeTestOperations.add(
new DataSetOperation("BaseData.xml")
);
}
@Test
public void testAsynchronousEvent() throws Exception
{
String id = new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("110.00"));
setValue("#{newPayment.paymentFrequency}", ONCE);
}
@Override
protected void invokeApplication() throws Exception
{
invokeMethod("#{paymentHome.scheduleAndSaveUsingAsynchronousEvent}");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
}
}.run();
// Wait, let quartz execute the async method which schedules the job
// for immediate execution
pause(50);
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
System.out.println("running renderResponse");
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
//assert !payment.getActive();
//assert payment.getLastPaid() != null;
assert new BigDecimal("891.46").equals(account.getBalance());
}
}.run();
}
@Test
public void testTransactionSuccessEvents() throws Exception
{
String id = new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("110.00"));
setValue("#{newPayment.paymentFrequency}", ONCE);
}
@Override
protected void invokeApplication() throws Exception
{
invokeMethod("#{paymentHome.scheduleAndSaveWithTransactionEvents}");
}
@Override
protected void renderResponse() throws Exception
{
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
}
}.run();
// Wait, let quartz execute the async method which schedules the job
// for immediate execution
pause(50);
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
System.out.println("running renderResponse");
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("110.00").equals(payment.getAmount());
//assert !payment.getActive();
//assert payment.getLastPaid() != null;
assert new BigDecimal("891.46").equals(account.getBalance());
assert (Boolean) getValue("#{transactionStatus.transactionCompleted}");
assert (Boolean) getValue("#{transactionStatus.transactionSucceded}");
assert payment.getId().equals(getValue("#{transactionStatus.id}"));
}
}.run();
}
@Test
public void testTimedEvent() throws Exception
{
String id = new FacesRequest("/search.xhtml")
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void updateModelValues() throws Exception
{
setValue("#{newPayment.payee}", "IRS");
setValue("#{newPayment.amount}", new BigDecimal("120.00"));
setValue("#{newPayment.paymentFrequency}", ONCE);
}
@Override
protected void invokeApplication() throws Exception
{
invokeMethod("#{paymentHome.scheduleAndSaveUsingTimedEvent}");
}
@Override
protected void renderResponse() throws Exception
{
Thread.sleep(1000);
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account !=null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
}
}.run();
// Wait, let quartz execute the async method which schedules the job
// for immediate execution
pause(1000l);
new FacesRequest("/search.xhtml", id)
{
@Override
protected void beforeRequest()
{
setParameter("accountId", "1");
}
@Override
protected void renderResponse() throws Exception
{
System.out.println("running renderResponse");
assert ((Boolean)getValue("#{accountHome.idDefined}"));
Account account = (Account) getValue("#{selectedAccount}");
assert account != null;
assert account.getId() == 1;
assert account.getPayments().size() == 1;
Payment payment = account.getPayments().get(0);
assert new BigDecimal("120.00").equals(payment.getAmount()) : "Invalid payment amount: " + payment.getAmount();
//assert !payment.getActive();
//assert payment.getLastPaid() != null;
assert new BigDecimal("881.46").equals(account.getBalance()) : "Invalid account balance: " + account.getBalance();
}
}.run();
}
private void pause(long ms) {
try {
Thread.sleep(ms);
} catch (InterruptedException e) {
}
}
}