Minimum quality problem with Backstage fixed

This commit is contained in:
Erol Kaya 2019-08-21 22:06:12 +02:00
parent 8e1b4e9347
commit 35229d0a47
2 changed files with 69 additions and 56 deletions

View File

@ -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;
}
}

View File

@ -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());
}
}