/* * Copyright (c) 2006 Rogério Liesenfeld * This file is subject to the terms of the MIT license (see LICENSE.txt). */ package orderMngr.domain.order; import java.math.*; import java.sql.*; import java.util.*; import orderMngr.service.*; import org.junit.*; import static org.junit.Assert.*; import mockit.*; public final class OrderFindersTest { @Mocked final Database db = null; @Mocked ResultSet rs; @Tested @Mocked OrderRepository repository; Order order; @Test public void findOrderByNumber(@Mocked final ResultSet rsItems) throws Exception { // Set up state. order = new Order(1, "test"); final OrderItem orderItem = new OrderItem(order, "343443", "Some product", 3, new BigDecimal(5)); order.getItems().add(orderItem); // Expectations for the first database query, which loads order data: new Expectations() {{ Database.executeQuery(withSubstring("where number="), order.getNumber()); result = rs; rs.next(); result = true; rs.getString(1); result = order.getCustomerId(); }}; // Expectations for the second query, which loads the order items: new Expectations() {{ Database.executeQuery(withMatch("select .+ from order_item where .+"), order.getNumber()); result = rsItems; rsItems.next(); result = new boolean[] {true, false}; rsItems.getString(1); result = orderItem.getProductId(); rsItems.getString(2); result = orderItem.getProductDescription(); rsItems.getInt(3); result = orderItem.getQuantity(); rsItems.getBigDecimal(4); result = orderItem.getUnitPrice(); }}; // Exercise code under test: Order found = repository.findByNumber(order.getNumber()); // Verify results: assertEquals(order, found); assertEquals(1, found.getItems().size()); assertEquals(orderItem, found.getItems().get(0)); } @Test public void findOrderByCustomer() throws Exception { final String customerId = "Cust"; order = new Order(890, customerId); new Expectations() {{ rs.next(); result = new boolean[] {true, false}; rs.getInt(1); result = order.getNumber(); }}; List<Order> found = repository.findByCustomer(customerId); assertTrue("Order not found by customer id", found.contains(order)); new Verifications() {{ Database.executeQuery(withMatch("select.+from\\s+order.*where.+customer_id\\s*=\\s*\\?"), customerId); Database.closeStatement(rs); }}; } }