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
|
@Override
|
||||||
boolean canUpdateQuality() {
|
boolean canUpdateQuality() {
|
||||||
return item.quality < HIGHEST_QUALITY && item.quality > MIN_QUALITY;
|
return item.quality < HIGHEST_QUALITY;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
int getUpdateValue() {
|
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
|
// if sell by date has passed then the quality should be zero
|
||||||
return -item.quality;
|
return -item.quality;
|
||||||
} else if (sellByDateLessThan(item, 6)) {
|
} else if (sellInLessThan(sellIn, 6)) {
|
||||||
return INCREASE_THRICE_AS_FAST;
|
return INCREASE_THRICE_AS_FAST;
|
||||||
} else if (sellByDateLessThan(item, 11) ) {
|
} else if (sellInLessThan(sellIn, 11) ) {
|
||||||
return INCREASE_TWICE_AS_FAST;
|
return INCREASE_TWICE_AS_FAST;
|
||||||
}
|
}
|
||||||
return INCREASE_NORMAL;
|
return INCREASE_NORMAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static boolean sellByDateLessThan(final Item item, final int remainingDayCount) {
|
private static boolean sellInLessThan(final int sellIn, final int remainingDayCount) {
|
||||||
return item.sellIn < remainingDayCount;
|
return sellIn < remainingDayCount;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -28,6 +28,42 @@ public class GildedRoseTest {
|
|||||||
|
|
||||||
private GildedRose app;
|
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
|
@Test
|
||||||
public void backstageItem_shouldIncreaseThriceAsFast_whenLessThan5DaysLeftToSellByDate() {
|
public void backstageItem_shouldIncreaseThriceAsFast_whenLessThan5DaysLeftToSellByDate() {
|
||||||
final int originalQuality = 20;
|
final int originalQuality = 20;
|
||||||
@ -61,6 +97,17 @@ public class GildedRoseTest {
|
|||||||
assertEquals(originalQuality + 1, app.items[0].quality);
|
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
|
@Test
|
||||||
public void backstageItemQuality_shouldBeZero_whenSellByDatePassed() {
|
public void backstageItemQuality_shouldBeZero_whenSellByDatePassed() {
|
||||||
final int originalQuality = 20;
|
final int originalQuality = 20;
|
||||||
@ -88,6 +135,21 @@ public class GildedRoseTest {
|
|||||||
assertEquals(MIN_QUALITY, app.items[0].quality);
|
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
|
@Test
|
||||||
public void standardItem_shouldDegradeNormal_whenSellByDateNotPassed() {
|
public void standardItem_shouldDegradeNormal_whenSellByDateNotPassed() {
|
||||||
final int originalQuality = 40;
|
final int originalQuality = 40;
|
||||||
@ -99,42 +161,6 @@ public class GildedRoseTest {
|
|||||||
assertEquals(originalQuality - 1, app.items[0].quality);
|
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
|
@Test
|
||||||
public void standardItem_shouldDegradeTwiceAsFast_whenSellByDatePassed() {
|
public void standardItem_shouldDegradeTwiceAsFast_whenSellByDatePassed() {
|
||||||
final int originalQuality = 40;
|
final int originalQuality = 40;
|
||||||
@ -217,19 +243,6 @@ public class GildedRoseTest {
|
|||||||
assertEquals(3, minimumQualityItemsCount);
|
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
|
@Test
|
||||||
public void newStandardItem_shouldDegradeAsNormal() {
|
public void newStandardItem_shouldDegradeAsNormal() {
|
||||||
ItemUpdaterFactory.registerCustomUpdater("New Item", new StandardItemUpdater());
|
ItemUpdaterFactory.registerCustomUpdater("New Item", new StandardItemUpdater());
|
||||||
@ -244,7 +257,6 @@ public class GildedRoseTest {
|
|||||||
assertEquals("New Item", app.items[0].name);
|
assertEquals("New Item", app.items[0].name);
|
||||||
assertEquals(0, app.items[0].sellIn);
|
assertEquals(0, app.items[0].sellIn);
|
||||||
assertEquals(originalQuality -1, app.items[0].quality);
|
assertEquals(originalQuality -1, app.items[0].quality);
|
||||||
|
|
||||||
assertEquals(newItem.name + ", " + newItem.sellIn + ", " + newItem.quality, app.items[0].toString());
|
assertEquals(newItem.name + ", " + newItem.sellIn + ", " + newItem.quality, app.items[0].toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Loading…
Reference in New Issue
Block a user