-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathGildedRoseTest.java
260 lines (186 loc) · 7.84 KB
/
GildedRoseTest.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
//Tests from:
//https://github.com/sparsick/coding-katas/blob/master/GildedRose-Refactoring-Kata-Java/com/gildedrose/GildedRoseTest.java
//NOTE: tests are only for the purpose of validating you do not break the code when adding new features / refactoring
// Proper test construction will be covered later in the course
package com.gildedrose;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals;
class GildedRoseTest {
//All items have a name
@Test
public void checkItemName() {
Item[] items = new Item[] { new Item("foo", 0, 0) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals("foo", app.items[0].name);
}
//All items have a SellIn value which denotes the number of days we have to sell the item
//All items have a Quality value which denotes how valuable the item is
//At the end of each day our system lowers both values for every item
@Test
public void decreaseSellDate() {
Item[] items = new Item[] { new Item("foo", 0, 0) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(-1, app.items[0].sellIn);
}
@Test
public void decreaseQuality() {
Item[] items = new Item[] { new Item("foo", 0, 1) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(0, app.items[0].quality);
}
//Once the sell by date has passed, Quality degrades twice as fast
@Test
public void decreaseQualityTwice() {
Item[] items = new Item[] { new Item("foo", -1, 2) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(0, app.items[0].quality);
}
@Test
public void decreaseQualityTwiceWithNoNegativeValue() {
Item[] items = new Item[] { new Item("foo", -1, 1) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(0, app.items[0].quality);
}
//The Quality of an item is never negative
@Test
public void qualityCannotBeNegative() {
Item[] items = new Item[] { new Item("foo", 0, 0) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(0, app.items[0].quality);
}
//"Aged Brie" actually increases in Quality the older it gets
@Test
public void increaseQualityForAgedBrieItem() {
Item[] items = new Item[] { new Item("Aged Brie", 2, 1) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(2, app.items[0].quality);
}
@Test
public void increaseQualityTwicedForAgedBrieItemBecauseSellInIsPassed() {
Item[] items = new Item[] { new Item("Aged Brie", -2, 1) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(3, app.items[0].quality);
}
@Test
public void increaseQualityTwicedForAgedBrieItemBecauseSellInIs0() {
Item[] items = new Item[] { new Item("Aged Brie", 0, 1) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(3, app.items[0].quality);
}
//The Quality of an item is never more than 50
@Test
public void qualityCannotBeGreaterThan50() {
Item[] items = new Item[] { new Item("Aged Brie", 2, 50) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(50, app.items[0].quality);
}
@Test
public void qualityIncreasedTwiceCannotBeGreaterThan50() {
Item[] items = new Item[] { new Item("Aged Brie", -2, 50) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(50, app.items[0].quality);
}
//"Sulfuras", being a legendary item, never has to be sold or decreases in Quality
//Just for clarification, an item can never have its Quality increase above 50, however "Sulfuras" is a
//legendary item and as such its Quality is 80 and it never alters.
@Test
public void sulfurasItemNeverBeSold() {
Item[] items = new Item[] { new Item("Sulfuras, Hand of Ragnaros", 2, 80) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(2, app.items[0].sellIn);
}
@Test
public void sulfurasItemNeverDecreaseQuality() {
Item[] items = new Item[] { new Item("Sulfuras, Hand of Ragnaros", 2, 80) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(80, app.items[0].quality);
}
//"Backstage passes", like aged brie, increases in Quality as its SellIn value approaches;
//Quality increases by 2 when there are 10 days or less and by 3 when there are 5 days or less but
//Quality drops to 0 after the concert
@Test
public void checkQualityForBackstagePasses11Daysleft() {
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 11, 10) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(11, app.items[0].quality);
}
@Test
public void checkQualityForBackstagePasses10Daysleft() {
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 10, 10) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(12, app.items[0].quality);
}
@Test
public void checkQualityCannotBeGreaterThan50ForBackstagePasses10Daysleft() {
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 10, 50) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(50, app.items[0].quality);
}
@Test
public void checkQualityForBackstagePasses5Daysleft() {
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 5, 10) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(13, app.items[0].quality);
}
@Test
public void checkQualityCannotBeGreaterThan50ForBackstagePasses5Daysleft() {
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 5, 50) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(50, app.items[0].quality);
}
@Test
public void checkQualityForBackstagePasses0Daysleft() {
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 0, 10) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(0, app.items[0].quality);
}
@Test
public void checkQualityForBackstagePassesAfterConcert() {
Item[] items = new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", -1, 10) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(0, app.items[0].quality);
}
//"Conjured" items degrade in Quality twice as fast as normal items
//TODO: code should be updated to get below tests to pass
@Test
public void checkQualityForConjuredItemsBeforeSellInPassed(){
Item[] items = new Item[] { new Item("Conjured", 2, 10) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(8, app.items[0].quality);
}
@Test
public void checkQualityForConjuredItemsAfterSellInPassed(){
Item[] items = new Item[] { new Item("Conjured", -2, 10) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(6, app.items[0].quality);
}
@Test
public void checkSellInForConjuredItems(){
Item[] items = new Item[] { new Item("Conjured", 2, 10) };
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(1, app.items[0].sellIn);
}
}