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.");
}