diff --git a/.classpath b/.classpath index 61aad86..a5d9f48 100644 --- a/.classpath +++ b/.classpath @@ -2,8 +2,8 @@ - + diff --git a/bin/VendingTest.class b/bin/VendingTest.class deleted file mode 100644 index ab8b33a..0000000 Binary files a/bin/VendingTest.class and /dev/null differ diff --git a/bin/machine/Machine.class b/bin/machine/Machine.class deleted file mode 100644 index 788183b..0000000 Binary files a/bin/machine/Machine.class and /dev/null differ diff --git a/bin/machine/MoneyHandler.class b/bin/machine/MoneyHandler.class deleted file mode 100644 index 3fbed86..0000000 Binary files a/bin/machine/MoneyHandler.class and /dev/null differ diff --git a/bin/machine/VendingTest.class b/bin/machine/VendingTest.class deleted file mode 100644 index c41f2a5..0000000 Binary files a/bin/machine/VendingTest.class and /dev/null differ diff --git a/bin/machine/Chips.class b/classes/main/machine/Chips.class similarity index 82% rename from bin/machine/Chips.class rename to classes/main/machine/Chips.class index 2a46f04..6fc1f3e 100644 Binary files a/bin/machine/Chips.class and b/classes/main/machine/Chips.class differ diff --git a/bin/machine/Display.class b/classes/main/machine/Display.class similarity index 68% rename from bin/machine/Display.class rename to classes/main/machine/Display.class index 4a21867..3ef9e12 100644 Binary files a/bin/machine/Display.class and b/classes/main/machine/Display.class differ diff --git a/bin/machine/DisplayTest.class b/classes/main/machine/DisplayTest.class similarity index 93% rename from bin/machine/DisplayTest.class rename to classes/main/machine/DisplayTest.class index bcd5878..cd48705 100644 Binary files a/bin/machine/DisplayTest.class and b/classes/main/machine/DisplayTest.class differ diff --git a/bin/machine/Item.class b/classes/main/machine/Item.class similarity index 53% rename from bin/machine/Item.class rename to classes/main/machine/Item.class index fa12c2b..5b8ee78 100644 Binary files a/bin/machine/Item.class and b/classes/main/machine/Item.class differ diff --git a/bin/machine/ItemBin.class b/classes/main/machine/ItemBin.class similarity index 74% rename from bin/machine/ItemBin.class rename to classes/main/machine/ItemBin.class index 947bfab..eb63da5 100644 Binary files a/bin/machine/ItemBin.class and b/classes/main/machine/ItemBin.class differ diff --git a/bin/machine/ItemHandler.class b/classes/main/machine/ItemHandler.class similarity index 65% rename from bin/machine/ItemHandler.class rename to classes/main/machine/ItemHandler.class index 7d31181..0e52d62 100644 Binary files a/bin/machine/ItemHandler.class and b/classes/main/machine/ItemHandler.class differ diff --git a/bin/machine/ItemTest.class b/classes/main/machine/ItemTest.class similarity index 95% rename from bin/machine/ItemTest.class rename to classes/main/machine/ItemTest.class index 828d848..acb75b8 100644 Binary files a/bin/machine/ItemTest.class and b/classes/main/machine/ItemTest.class differ diff --git a/classes/main/machine/Machine.class b/classes/main/machine/Machine.class new file mode 100644 index 0000000..34119d9 Binary files /dev/null and b/classes/main/machine/Machine.class differ diff --git a/bin/machine/MachineBin.class b/classes/main/machine/MachineBin.class similarity index 88% rename from bin/machine/MachineBin.class rename to classes/main/machine/MachineBin.class index 5a55934..5c3e10a 100644 Binary files a/bin/machine/MachineBin.class and b/classes/main/machine/MachineBin.class differ diff --git a/bin/machine/MachineDisplay.class b/classes/main/machine/MachineDisplay.class similarity index 91% rename from bin/machine/MachineDisplay.class rename to classes/main/machine/MachineDisplay.class index 2234249..f21c053 100644 Binary files a/bin/machine/MachineDisplay.class and b/classes/main/machine/MachineDisplay.class differ diff --git a/bin/machine/MachineItemHandler.class b/classes/main/machine/MachineItemHandler.class similarity index 92% rename from bin/machine/MachineItemHandler.class rename to classes/main/machine/MachineItemHandler.class index f5aaef9..0f0839d 100644 Binary files a/bin/machine/MachineItemHandler.class and b/classes/main/machine/MachineItemHandler.class differ diff --git a/classes/main/machine/MachineMoneyHandlerPayment.class b/classes/main/machine/MachineMoneyHandlerPayment.class new file mode 100644 index 0000000..740c7d7 Binary files /dev/null and b/classes/main/machine/MachineMoneyHandlerPayment.class differ diff --git a/classes/main/machine/MoneyHandler.class b/classes/main/machine/MoneyHandler.class new file mode 100644 index 0000000..6d8bf6c Binary files /dev/null and b/classes/main/machine/MoneyHandler.class differ diff --git a/classes/main/machine/Payment.class b/classes/main/machine/Payment.class new file mode 100644 index 0000000..5df09a1 Binary files /dev/null and b/classes/main/machine/Payment.class differ diff --git a/classes/main/machine/VendingTest.class b/classes/main/machine/VendingTest.class new file mode 100644 index 0000000..409c6b7 Binary files /dev/null and b/classes/main/machine/VendingTest.class differ diff --git a/src/Machine/Candy.java b/src/Machine/Candy.java new file mode 100644 index 0000000..56beaa5 --- /dev/null +++ b/src/Machine/Candy.java @@ -0,0 +1,10 @@ +package machine; + +public class Candy implements Item { + public static String name = "candy"; + + public String itemName() { + return name; + } + +} diff --git a/src/Machine/Chips.java b/src/Machine/Chips.java index 34b5e3e..e2f7d5f 100644 --- a/src/Machine/Chips.java +++ b/src/Machine/Chips.java @@ -1,10 +1,10 @@ package machine; public class Chips implements Item { + public static String name = "chips"; public String itemName() { - // TODO Auto-generated method stub - return null; + return name; } } diff --git a/src/Machine/ItemHandler.java b/src/Machine/ItemHandler.java index 3967b9f..b09a2e0 100644 --- a/src/Machine/ItemHandler.java +++ b/src/Machine/ItemHandler.java @@ -6,4 +6,6 @@ public interface ItemHandler { public void dispenseChips(Chips chips); + public boolean isValidItem(String itemName); + } diff --git a/src/Machine/Machine.java b/src/Machine/Machine.java index fd512bc..0b7fa3e 100644 --- a/src/Machine/Machine.java +++ b/src/Machine/Machine.java @@ -12,9 +12,9 @@ public Machine(Display display, MoneyHandler moneyHandler, ItemHandler itemHandl this.itemHandler = itemHandler; } - public Object receivedMoney(double amount) { - moneyHandler.receiveMoney(amount); - display.show("money " + amount + " inserted."); + public Object receivedMoney(Payment payment) { + moneyHandler.receiveMoney(payment); + display.show("money " + payment.amount() + " inserted."); return null; } @@ -25,7 +25,7 @@ public void dispenseItem() { } public void changeMoney() { - moneyHandler.changeMoney(); + moneyHandler.changeMoney(1.0); display.show("Please take your change."); } diff --git a/src/Machine/MachineItemHandler.java b/src/Machine/MachineItemHandler.java index 05aa7f3..915d0d2 100644 --- a/src/Machine/MachineItemHandler.java +++ b/src/Machine/MachineItemHandler.java @@ -1,13 +1,25 @@ package machine; +import java.util.ArrayList; +import java.util.List; + public class MachineItemHandler implements ItemHandler { private ItemBin machineBin; + private List items = new ArrayList(); + public MachineItemHandler(MachineBin bin){ this.machineBin = bin; - } - + addItems(); + } + + private void addItems() { + items.add(new Soda()); + items.add(new Chips()); + items.add(new Candy()); + } + public void dispenseItem() { machineBin.listItems(); } @@ -17,4 +29,14 @@ public void dispenseChips(Chips chips) { machineBin.listItems(); } + @Override + public boolean isValidItem(String itemName) { + for (Item item : items) { + if (item.itemName().equals(itemName)) { + return true; + } + } + return false; + } + } diff --git a/src/Machine/MachineMoneyHandler.java b/src/Machine/MachineMoneyHandler.java new file mode 100644 index 0000000..44e1c2a --- /dev/null +++ b/src/Machine/MachineMoneyHandler.java @@ -0,0 +1,29 @@ +package machine; + +public class MachineMoneyHandler implements MoneyHandler { + + private double amount = 0; + + @Override + public void changeMoney(double amount) { + this.amount -= amount; + } + + @Override + public double getAmount() { + return this.amount; + } + + @Override + public void receiveMoney(Payment payment) { + verifyPayment(payment); + amount += payment.amount(); + } + + @Override + public boolean verifyPayment(Payment payment) { + // TODO Auto-generated method stub + return false; + } + +} diff --git a/src/Machine/MachineMoneyHandlerPayment.java b/src/Machine/MachineMoneyHandlerPayment.java new file mode 100644 index 0000000..71c903a --- /dev/null +++ b/src/Machine/MachineMoneyHandlerPayment.java @@ -0,0 +1,17 @@ +package machine; + +public class MachineMoneyHandlerPayment implements Payment { + + private double amount; + + @Override + public double amount() { + return this.amount; + } + + @Override + public void setAmount(double amount) { + this.amount = amount; + } + +} diff --git a/src/Machine/MoneyHandler.java b/src/Machine/MoneyHandler.java index 6d9336b..2131f14 100644 --- a/src/Machine/MoneyHandler.java +++ b/src/Machine/MoneyHandler.java @@ -1,16 +1,13 @@ package machine; -public class MoneyHandler { +public interface MoneyHandler { + public void receiveMoney(Payment payment); - public void receiveMoney(double amount) { - // TODO Auto-generated method stub + public void changeMoney(double amountDispensed); - } + public double getAmount(); - public void changeMoney() { - // TODO Auto-generated method stub - - } + public boolean verifyPayment(Payment payment); } diff --git a/src/Machine/Payment.java b/src/Machine/Payment.java new file mode 100644 index 0000000..164617e --- /dev/null +++ b/src/Machine/Payment.java @@ -0,0 +1,8 @@ +package machine; + +public interface Payment { + + public double amount(); + + public void setAmount(double amount); +} diff --git a/src/Machine/Soda.java b/src/Machine/Soda.java new file mode 100644 index 0000000..61ef33b --- /dev/null +++ b/src/Machine/Soda.java @@ -0,0 +1,10 @@ +package machine; + +public class Soda implements Item { + public static String name = "soda"; + + public String itemName() { + return name; + } + +} diff --git a/test/machine/ItemTest.java b/test/machine/ItemTest.java index 910cd76..d1aecac 100644 --- a/test/machine/ItemTest.java +++ b/test/machine/ItemTest.java @@ -1,5 +1,6 @@ package machine; +import static org.junit.Assert.*; import static org.mockito.Mockito.verify; import org.junit.Before; @@ -23,7 +24,27 @@ public void setup() { handler = new MachineItemHandler(machineBin); } - @Test + @Test + public void shouldReturnTrueIfChips() { + assertTrue(handler.isValidItem("chips")); + } + + @Test + public void shouldReturnTrueIfSoda() { + assertTrue(handler.isValidItem("soda")); + } + + @Test + public void shouldReturnTrueIfCandy() { + assertTrue(handler.isValidItem("candy")); + } + + @Test + public void shouldReturnFalseIfValidItem() { + assertFalse(handler.isValidItem("pizza")); + } + + @Test public void shouldDispenseItem() { handler.dispenseItem(); diff --git a/test/machine/MoneyTest.java b/test/machine/MoneyTest.java new file mode 100644 index 0000000..d79980c --- /dev/null +++ b/test/machine/MoneyTest.java @@ -0,0 +1,34 @@ +package machine; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; + +public class MoneyTest { + private static final double PRECISION = 0.001; + private MoneyHandler moneyHandler; + + @Before + public void setup() { + moneyHandler = new MachineMoneyHandler(); + } + + @Test + public void receiveShouldIncreaseAmount() { + Payment payment = new MachineMoneyHandlerPayment(); + double amountBefore = moneyHandler.getAmount(); + moneyHandler.receiveMoney(payment); + + assertEquals(payment.amount(), moneyHandler.getAmount() - amountBefore, PRECISION); + } + + @Test + public void dispensingMoneyShouldDecreaseAmount() { + double amountDispensed = 1.0; + double amountBefore = moneyHandler.getAmount(); + moneyHandler.changeMoney(amountDispensed); + + assertEquals(amountDispensed, amountBefore - moneyHandler.getAmount(), 0.001); + } +} diff --git a/test/machine/PaymentTest.java b/test/machine/PaymentTest.java new file mode 100644 index 0000000..358ac16 --- /dev/null +++ b/test/machine/PaymentTest.java @@ -0,0 +1,37 @@ +package machine; + +import static org.mockito.Mockito.verify; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.mockito.Spy; + +public class PaymentTest { + + @InjectMocks + private Machine machine; + + @Spy + MachineMoneyHandler handler; + + @Mock + Display display; + + @Mock + private Payment payment; + + @Before + public void setup() { + MockitoAnnotations.initMocks(this); + } + + @Test + public void shouldVerifyPayment() { + machine.receivedMoney(payment); + verify(handler).verifyPayment(payment); + } + +} diff --git a/test/machine/VendingTest.java b/test/machine/VendingTest.java index c45b25c..0f6edec 100644 --- a/test/machine/VendingTest.java +++ b/test/machine/VendingTest.java @@ -35,9 +35,10 @@ public void setup() { @Test public void shouldAcceptCertainAmountOfMoney() { - double amount = 1.00; - machine.receivedMoney(amount); - verify(moneyHandler).receiveMoney(amount); + Payment payment = new MachineMoneyHandlerPayment(); + payment.setAmount(1.0); + machine.receivedMoney(payment); + verify(moneyHandler).receiveMoney(payment); verify(display).show("money 1.0 inserted."); } @@ -51,7 +52,7 @@ public void shouldDispenseItem() { @Test public void shouldChangeMoney() { machine.changeMoney(); - verify(moneyHandler).changeMoney(); + verify(moneyHandler).changeMoney(anyDouble()); verify(display).show("Please take your change."); }