package org.jboss.seam.example.quartz.test; import static org.jboss.seam.example.quartz.Payment.Frequency.ONCE; import java.math.BigDecimal; import org.jboss.seam.async.QuartzTriggerHandle; import org.jboss.seam.example.quartz.Account; import org.jboss.seam.example.quartz.Payment; import org.jboss.seam.mock.DBUnitSeamTest; import org.testng.annotations.Test; /** * * @author Pete Muir * */ public class OnceTest extends DBUnitSeamTest { private QuartzTriggerHandle quartzTriggerHandle; @Override protected void prepareDBUnitOperations() { beforeTestOperations.add( new DataSetOperation("org/jboss/seam/example/quartz/test/BaseData.xml") ); } //@Test public void scheduleOnce() throws Exception { try { 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("100.00")); setValue("#{newPayment.paymentFrequency}", ONCE); } @Override protected void invokeApplication() throws Exception { assert "persisted".equals(invokeMethod("#{paymentHome.saveAndSchedule}")); } @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; Payment payment = (Payment) getValue("#{newPayment}"); assert payment.getPayee().equals("IRS"); assert payment.getAmount().equals(new BigDecimal("100.00")); assert payment.getAccount() != null; assert payment.getAccount().getId() == 1; quartzTriggerHandle = payment.getQuartzTriggerHandle(); } }.run(); // Wait, let quartz execute the job (async but straight away) pause(500); new FacesRequest("/search.xhtml", id) { @Override protected void beforeRequest() { setParameter("accountId", "1"); } @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; Payment payment = account.getPayments().get(0); assert new BigDecimal("100.00").equals(payment.getAmount()); assert !payment.getActive(); assert ONCE.equals(payment.getPaymentFrequency()); assert payment.getLastPaid() != null; assert new BigDecimal("901.46").equals(account.getBalance()); } }.run(); } finally { // Always cancel the job if (quartzTriggerHandle != null) { quartzTriggerHandle.cancel(); quartzTriggerHandle = null; } } } private void pause(long ms) { try { Thread.sleep(ms); } catch (InterruptedException e) { } } }