mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 06:21:29 +00:00
Minimum quality problem with Backstage fixed
This commit is contained in:
parent
8e1b4e9347
commit
35229d0a47
@ -12,23 +12,24 @@ class BackstagePassUpdater extends CustomItemUpdater {
|
||||
|
||||
@Override
|
||||
boolean canUpdateQuality() {
|
||||
return item.quality < HIGHEST_QUALITY && item.quality > MIN_QUALITY;
|
||||
return item.quality < HIGHEST_QUALITY;
|
||||
}
|
||||
|
||||
@Override
|
||||
int getUpdateValue() {
|
||||
if (sellByDateLessThan(item, 0)) {
|
||||
int sellIn = item.sellIn;
|
||||
if (sellInLessThan(sellIn, 0)) {
|
||||
// if sell by date has passed then the quality should be zero
|
||||
return -item.quality;
|
||||
} else if (sellByDateLessThan(item, 6)) {
|
||||
} else if (sellInLessThan(sellIn, 6)) {
|
||||
return INCREASE_THRICE_AS_FAST;
|
||||
} else if (sellByDateLessThan(item, 11) ) {
|
||||
} else if (sellInLessThan(sellIn, 11) ) {
|
||||
return INCREASE_TWICE_AS_FAST;
|
||||
}
|
||||
return INCREASE_NORMAL;
|
||||
}
|
||||
|
||||
private static boolean sellByDateLessThan(final Item item, final int remainingDayCount) {
|
||||
return item.sellIn < remainingDayCount;
|
||||
private static boolean sellInLessThan(final int sellIn, final int remainingDayCount) {
|
||||
return sellIn < remainingDayCount;
|
||||
}
|
||||
}
|
||||
|
||||
@ -28,6 +28,42 @@ public class GildedRoseTest {
|
||||
|
||||
private GildedRose app;
|
||||
|
||||
@Test
|
||||
public void agedBrie_shouldIncreaseNormal() {
|
||||
final int originalQuality = agedBrieWithLowQuality.quality;
|
||||
final int originalSellIn = agedBrieWithLowQuality.sellIn;
|
||||
final Item[] items = new Item[]{agedBrieWithLowQuality};
|
||||
app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(agedBrieWithLowQuality.name, app.items[0].name);
|
||||
assertEquals(originalSellIn - 1, app.items[0].sellIn);
|
||||
assertEquals(originalQuality + 1, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void agedBrie_shouldIncreaseNormal_whenOriginalQualityIsZero() {
|
||||
final int originalQuality = 0;
|
||||
final int originalSellIn = 2;
|
||||
final Item[] items = new Item[]{new Item("Aged Brie", originalSellIn, originalQuality)};
|
||||
app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals("Aged Brie", app.items[0].name);
|
||||
assertEquals(originalSellIn - 1, app.items[0].sellIn);
|
||||
assertEquals(originalQuality + 1, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void agedBrie_shouldNotIncrease_moreThanHighestValue() {
|
||||
final int originalQuality = agedBrieWithHighestQuality.quality;
|
||||
final int originalSellIn = agedBrieWithHighestQuality.sellIn;
|
||||
final Item[] items = new Item[]{agedBrieWithHighestQuality};
|
||||
app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(agedBrieWithHighestQuality.name, app.items[0].name);
|
||||
assertEquals(originalSellIn - 1, app.items[0].sellIn);
|
||||
assertEquals(originalQuality, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void backstageItem_shouldIncreaseThriceAsFast_whenLessThan5DaysLeftToSellByDate() {
|
||||
final int originalQuality = 20;
|
||||
@ -61,6 +97,17 @@ public class GildedRoseTest {
|
||||
assertEquals(originalQuality + 1, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void backstageItem_shouldIncreaseNormal_whenQualityIsMinimum() {
|
||||
final int originalQuality = MIN_QUALITY;
|
||||
final Item[] items = new Item[]{new Item("Backstage passes to a TAFKAL80ETC concert", 15, originalQuality)};
|
||||
app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(14, app.items[0].sellIn);
|
||||
assertEquals(originalQuality + 1, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void backstageItemQuality_shouldBeZero_whenSellByDatePassed() {
|
||||
final int originalQuality = 20;
|
||||
@ -88,6 +135,21 @@ public class GildedRoseTest {
|
||||
assertEquals(MIN_QUALITY, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void conjuredItems_shouldDegradeAsTwiceAsFast_thenTheStandardItems() {
|
||||
final Item[] items = new Item[]{conjuredWithHighestQuality};
|
||||
app = new GildedRose(items);
|
||||
|
||||
// First 5 times it should degrade by 2
|
||||
// Last 2 times (after the sell by date has passed) it should degrade by 4
|
||||
for (int i = 0; i < 7; i++) {
|
||||
app.updateQuality();
|
||||
}
|
||||
|
||||
assertEquals(-2, app.items[0].sellIn);
|
||||
assertEquals(32, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void standardItem_shouldDegradeNormal_whenSellByDateNotPassed() {
|
||||
final int originalQuality = 40;
|
||||
@ -99,42 +161,6 @@ public class GildedRoseTest {
|
||||
assertEquals(originalQuality - 1, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void agedBrie_shouldIncreaseNormal() {
|
||||
final int originalQuality = agedBrieWithLowQuality.quality;
|
||||
final int originalSellIn = agedBrieWithLowQuality.sellIn;
|
||||
final Item[] items = new Item[]{agedBrieWithLowQuality};
|
||||
app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(agedBrieWithLowQuality.name, app.items[0].name);
|
||||
assertEquals(originalSellIn - 1, app.items[0].sellIn);
|
||||
assertEquals(originalQuality + 1, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void agedBrie_shouldIncreaseNormal_whenOriginalQualityIsZero() {
|
||||
final int originalQuality = 0;
|
||||
final int originalSellIn = 2;
|
||||
final Item[] items = new Item[]{new Item("Aged Brie", originalSellIn, originalQuality)};
|
||||
app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals("Aged Brie", app.items[0].name);
|
||||
assertEquals(originalSellIn - 1, app.items[0].sellIn);
|
||||
assertEquals(originalQuality + 1, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void agedBrie_shouldNotIncrease_moreThanHighestValue() {
|
||||
final int originalQuality = agedBrieWithHighestQuality.quality;
|
||||
final int originalSellIn = agedBrieWithHighestQuality.sellIn;
|
||||
final Item[] items = new Item[]{agedBrieWithHighestQuality};
|
||||
app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals(agedBrieWithHighestQuality.name, app.items[0].name);
|
||||
assertEquals(originalSellIn - 1, app.items[0].sellIn);
|
||||
assertEquals(originalQuality, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void standardItem_shouldDegradeTwiceAsFast_whenSellByDatePassed() {
|
||||
final int originalQuality = 40;
|
||||
@ -217,19 +243,6 @@ public class GildedRoseTest {
|
||||
assertEquals(3, minimumQualityItemsCount);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void conjuredItems_shouldDegradeAsTwiceAsFast_thenTheStandardItems() {
|
||||
final Item[] items = new Item[]{conjuredWithHighestQuality};
|
||||
app = new GildedRose(items);
|
||||
|
||||
for (int i = 0; i < 7; i++) {
|
||||
app.updateQuality();
|
||||
}
|
||||
|
||||
assertEquals(-2, app.items[0].sellIn);
|
||||
assertEquals(32, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void newStandardItem_shouldDegradeAsNormal() {
|
||||
ItemUpdaterFactory.registerCustomUpdater("New Item", new StandardItemUpdater());
|
||||
@ -244,7 +257,6 @@ public class GildedRoseTest {
|
||||
assertEquals("New Item", app.items[0].name);
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
assertEquals(originalQuality -1, app.items[0].quality);
|
||||
|
||||
assertEquals(newItem.name + ", " + newItem.sellIn + ", " + newItem.quality, app.items[0].toString());
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user