Skip to content

Commit 0f067e6

Browse files
committed
second code club update - more refactorings around coins instead of values
1 parent ac6f00f commit 0f067e6

File tree

2 files changed

+41
-58
lines changed

2 files changed

+41
-58
lines changed

src/vending/VendingMachine.java

Lines changed: 16 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,12 @@ public class VendingMachine {
55

66
Double currentAmount = 0.0;
77
Double coinReturnAmount = 0.0;
8-
ArrayList<Double> coinsList = new ArrayList<Double>();
9-
ArrayList<Double> returnSlotCoins = new ArrayList<Double>();
8+
ArrayList<Coin> coinsList = new ArrayList<Coin>();
9+
ArrayList<Coin> returnSlotCoins = new ArrayList<Coin>();
1010
String display = "";
1111
ArrayList<String> itemBinList = new ArrayList<String>();
1212

13-
public ArrayList<Double> returnCoins() {
13+
public ArrayList<Coin> returnCoins() {
1414
setCoinReturnAmount(getCurrentAmount());
1515
setCurrentAmount(0.00);
1616

@@ -21,28 +21,7 @@ public ArrayList<Double> returnCoins() {
2121
public void insertPenny() {
2222
setCoinReturnAmount(0.01);
2323

24-
returnSlotCoins.add((Double) 0.01);
25-
}
26-
27-
public void insertNickel() {
28-
setCurrentAmount(getCurrentAmount() + 0.05);
29-
updateDisplay();
30-
31-
coinsList.add((Double) 0.05);
32-
}
33-
34-
public void insertDime() {
35-
setCurrentAmount(getCurrentAmount() + 0.10);
36-
updateDisplay();
37-
38-
coinsList.add((Double) 0.10);
39-
}
40-
41-
public void insertQuarter() {
42-
setCurrentAmount(getCurrentAmount() + 0.25);
43-
updateDisplay();
44-
45-
coinsList.add((Double) 0.25);
24+
returnSlotCoins.add(Coin.PENNY);
4625
}
4726

4827
public void sodaButton() {
@@ -98,11 +77,11 @@ public void setCurrentAmount(Double currentAmount) {
9877
this.currentAmount = currentAmount;
9978
}
10079

101-
public ArrayList<Double> getReturnSlotCoins() {
80+
public ArrayList<Coin> getReturnSlotCoins() {
10281
return returnSlotCoins;
10382
}
10483

105-
public void setReturnSlotCoins(ArrayList<Double> returnSlotCoins) {
84+
public void setReturnSlotCoins(ArrayList<Coin> returnSlotCoins) {
10685
this.returnSlotCoins = returnSlotCoins;
10786
}
10887

@@ -123,20 +102,19 @@ public void setItemBinList(ArrayList<String> itemBinList) {
123102
}
124103

125104
public void insert(Coin coin) {
126-
switch (coin) {
127-
case QUARTER:
128-
insertQuarter();
129-
break;
130-
case DIME:
131-
insertDime();
132-
break;
133-
case PENNY:
105+
if (isValidCoin(coin)) {
106+
setCurrentAmount(getCurrentAmount() + coin.getValue());
107+
coinsList.add(coin);
108+
updateDisplay();
109+
} else {
134110
insertPenny();
135-
break;
136-
default:
137-
insertNickel();
111+
return;
138112
}
139113

140114
}
141115

116+
private boolean isValidCoin(Coin coin) {
117+
return !Coin.PENNY.equals(coin);
118+
}
119+
142120
}

test/vending/VendingMachineTests.java

Lines changed: 25 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,15 @@
11
import static org.junit.Assert.assertEquals;
22

33
import java.util.ArrayList;
4+
import java.util.List;
45

56
import org.junit.Before;
67
import org.junit.Test;
78

89
public class VendingMachineTest {
910

10-
private static final Double DIME = (Double) 0.10;
11-
private static final Double NICKEL = (Double) 0.05;
12-
private static final Double PENNY = (Double) 0.01;
11+
1312
private static final Double NO_COIN = (Double) 0.0;
14-
private static final Double QUARTER_VALUE = (Double) 0.25;
1513

1614
private VendingMachine vendingMachine;
1715

@@ -25,49 +23,56 @@ public void shouldAcceptQuarter() {
2523

2624
vendingMachine.insert(Coin.QUARTER);
2725

28-
assertEquals(QUARTER_VALUE, vendingMachine.getCurrentAmount());
26+
assertEquals(Coin.QUARTER.getValue(), vendingMachine.getCurrentAmount());
2927
}
3028

3129
@Test
3230
public void shouldResetCurrentAmountEqualToZeroWhenReturnCoinsIsPressed() {
3331

34-
vendingMachine.setCurrentAmount(QUARTER_VALUE);
32+
vendingMachine.setCurrentAmount(Coin.QUARTER.getValue());
3533

3634
vendingMachine.returnCoins();
3735

3836
assertEquals(NO_COIN, vendingMachine.getCurrentAmount());
3937
}
4038

4139
@Test
42-
public void shouldNotAcceptPenny() {
40+
public void pennyShouldGoToCoinReturn() {
4341
vendingMachine.insert(Coin.PENNY);
4442

45-
assertEquals(PENNY, vendingMachine.getCoinReturnAmount());
43+
assertEquals(Coin.PENNY.getValue(), vendingMachine.getCoinReturnAmount());
4644
}
4745

46+
@Test
47+
public void shouldNotAddPennyToCurrentValue() {
48+
vendingMachine.insert(Coin.PENNY);
49+
50+
assertEquals(NO_COIN, vendingMachine.getCurrentAmount());
51+
}
52+
4853
@Test
4954
public void shouldAcceptNickel() {
5055
vendingMachine.insert(Coin.NICKEL);
5156

52-
assertEquals(NICKEL, vendingMachine.getCurrentAmount());
57+
assertEquals(Coin.NICKEL.getValue(), vendingMachine.getCurrentAmount());
5358
}
5459

5560
@Test
5661
public void shouldAcceptDime() {
5762
vendingMachine.insert(Coin.DIME);
5863

59-
assertEquals(DIME, vendingMachine.getCurrentAmount());
64+
assertEquals(Coin.DIME.getValue(), vendingMachine.getCurrentAmount());
6065
}
6166

6267
@Test
6368
public void pressingCoinReturnShouldReturnExactCoinsInserted() {
6469
insertFiftyCentsInQuarters();
6570
vendingMachine.insert(Coin.NICKEL);
6671

67-
ArrayList<Double> expectedCoinList = new ArrayList<Double>();
68-
expectedCoinList.add(QUARTER_VALUE);
69-
expectedCoinList.add(QUARTER_VALUE);
70-
expectedCoinList.add(NICKEL);
72+
List<Coin> expectedCoinList = new ArrayList<Coin>();
73+
expectedCoinList.add(Coin.QUARTER);
74+
expectedCoinList.add(Coin.QUARTER);
75+
expectedCoinList.add(Coin.NICKEL);
7176

7277
assertEquals(expectedCoinList, vendingMachine.returnCoins());
7378
}
@@ -78,11 +83,11 @@ public void returnCoinSlotShouldHoldAllCoinsReturned() {
7883
insertFiftyCentsInQuarters();
7984
vendingMachine.insert(Coin.NICKEL);
8085

81-
ArrayList<Double> expectedCoinList = new ArrayList<Double>();
82-
expectedCoinList.add(PENNY);
83-
expectedCoinList.add(QUARTER_VALUE);
84-
expectedCoinList.add(QUARTER_VALUE);
85-
expectedCoinList.add(NICKEL);
86+
List<Coin> expectedCoinList = new ArrayList<Coin>();
87+
expectedCoinList.add(Coin.PENNY);
88+
expectedCoinList.add(Coin.QUARTER);
89+
expectedCoinList.add(Coin.QUARTER);
90+
expectedCoinList.add(Coin.NICKEL);
8691

8792
vendingMachine.returnCoins();
8893

@@ -206,7 +211,7 @@ public void machineShouldMakeChangeIfTooMuchMoneyPaidForSoda() {
206211
vendingMachine.sodaButton();
207212
vendingMachine.returnCoins();
208213

209-
assertEquals(QUARTER_VALUE, vendingMachine.getCoinReturnAmount());
214+
assertEquals(Coin.QUARTER.getValue(), vendingMachine.getCoinReturnAmount());
210215
}
211216

212217
private void insertDollarInQuarters() {

0 commit comments

Comments
 (0)