import com.prancingdonkey.domain.LineItem;
import org.junit.Test;
import org.mule.DefaultMuleMessage;
import org.mule.api.MuleMessage;
import org.mule.api.context.notification.ComponentMessageNotificationListener;
import org.mule.api.context.notification.ServerNotification;
import org.mule.tck.junit4.FunctionalTestCase;
import org.mule.util.UUID;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
import static org.junit.Assert.*;
public class AggregateLineItemsFunctionalTestCase extends FunctionalTestCase {
CountDownLatch callbackLatch;
@Override
protected String getConfigResources() {
return "src/main/app/aggregateLineItems.xml";
}
@Override
protected void doSetUp() throws Exception {
super.doSetUp();
callbackLatch = new CountDownLatch(2);
muleContext.registerListener(new ComponentMessageNotificationListener() {
public void onNotification(final ServerNotification notification) {
callbackLatch.countDown();
}
});
}
@Test
public void testCanAggregateLineItems() throws Exception {
String orderId = UUID.getUUID();
for (int i=0; i<3; i++) {
LineItem lineItem = new LineItem();
Map properties = new HashMap();
properties.put("MULE_CORRELATION_ID",orderId);
properties.put("MULE_CORRELATION_GROUP_SIZE",3);
MuleMessage message = new DefaultMuleMessage(lineItem,properties,muleContext);
muleContext.getClient().dispatch("jms://lineitem.complete",message);
}
assertTrue(callbackLatch.await(15, TimeUnit.SECONDS));
}
}