import org.junit.Test;
import static org.junit.Assert.*;
import static org.easymock.EasyMock.*;
import org.apache.commons.io.FileUtils;
import java.io.File;
import java.io.IOException;
public class OrderTest {
@Test
public void totalCostOneItemUsingFake() {
Order order = new Order();
OrderItem item1 = new OrderItemFake("item 1", 50);
order.addItem(item1);
assertEquals(50, order.totalCost());
}
@Test
public void totalCostMultipleItemsUsingFake() {
Order order = new Order();
OrderItem item1 = new OrderItemFake("item 1", 50);
OrderItem item2 = new OrderItemFake("item 2", 35);
order.addItem(item1);
order.addItem(item2);
assertEquals(85, order.totalCost());
}
@Test
public void totalCostOneItemUsingMock() {
Order order = new Order();
OrderItem orderItem = createMock(OrderItem.class);
expect(orderItem.cost()).andReturn(50);
replay(orderItem);
order.addItem(orderItem);
assertEquals(50, order.totalCost());
}
//TODO: separate fixture helper?
//TODO: refactor printing to use template?
@Test
public void printUsingFake() throws IOException {
Order order = new Order();
OrderItem item1 = new OrderItemFake("item 1", 50);
OrderItem item2 = new OrderItemFake("item 2", 35);
order.addItem(item1);
order.addItem(item2);
String expected = FileUtils.readFileToString(new File("fixtures/OrderPrintResult.txt"));
assertEquals(expected, order.print());
}
@Test
public void printUsingMock() throws IOException {
Order order = new Order();
OrderItem item1 = createMock(OrderItem.class);
OrderItem item2 = createMock(OrderItem.class);
expect(item1.cost()).andReturn(50).atLeastOnce();
expect(item2.cost()).andReturn(35).atLeastOnce();
expect(item1.display()).andReturn("item 1").atLeastOnce();
expect(item2.display()).andReturn("item 2").atLeastOnce();
replay(item1);
replay(item2);
order.addItem(item1);
order.addItem(item2);
String expected = FileUtils.readFileToString(new File("fixtures/OrderPrintResult.txt"));
assertEquals(expected, order.print());
}
}