package com.ewolff.orderhandling.integration;
import javax.annotation.Resource;
import junit.framework.Assert;
import org.junit.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.integration.Message;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.MessageHeaders;
import org.springframework.integration.channel.QueueChannel;
import org.springframework.integration.support.MessageBuilder;
import com.ewolff.orderhandling.domain.Order;
import com.ewolff.orderhandling.domain.OrderItem;
import com.ewolff.orderhandling.fullfillment.ExpressFulFillmentJms;
import com.ewolff.orderhandling.fullfillment.NormalFulFillment;
import com.ewolff.orderhandling.test.AbstractSpringBasedTest;
public class IntegrationTestChannel extends AbstractSpringBasedTest {
@Resource
private MessageChannel fulfillment;
@Resource
private MessageChannel normalfulfillment;
@Autowired
private NormalFulFillment normalFulFillment;
@Autowired
private ExpressFulFillmentJms expressFulFillmentJms;
@Test
public void testNormalOrder() throws Exception {
int fulFillmentBefore = normalFulFillment.getOrders().size();
Order order = new Order(false, 21);
order.addOrderItem(new OrderItem(1, "iPod"));
Message<Order> response = sendMessage(order, fulfillment);
Assert.assertEquals(21, response.getPayload().getCustomer());
Assert.assertEquals(fulFillmentBefore + 1, normalFulFillment
.getOrders().size());
}
@Test
public void testNormalOrderDirect() throws Exception {
int fulFillmentBefore = normalFulFillment.getOrders().size();
Order order = new Order(false, 21);
order.addOrderItem(new OrderItem(1, "iPod"));
Message<Order> response = sendMessage(order, normalfulfillment);
Assert.assertEquals(21, response.getPayload().getCustomer());
Assert.assertEquals(fulFillmentBefore + 1, normalFulFillment
.getOrders().size());
}
@Test
public void testExpressOrder() throws Exception {
int fulFillmentBeforeJms = expressFulFillmentJms.getOrders().size();
Order order = new Order(true, 22);
order.addOrderItem(new OrderItem(1, "iPod"));
Message<Order> response = sendMessage(order, fulfillment);
Assert.assertEquals(22, response.getPayload().getCustomer());
Assert.assertEquals(fulFillmentBeforeJms + 1, expressFulFillmentJms
.getOrders().size());
}
private Message<Order> sendMessage(Order order,
MessageChannel messageChannel) {
QueueChannel replyChannel = new QueueChannel(10);
Message<Order> message = MessageBuilder.withPayload(order)
.setHeader(MessageHeaders.REPLY_CHANNEL, replyChannel).build();
messageChannel.send(message);
Message<Order> response = (Message<Order>) replyChannel.receive(30000);
return response;
}
}