From 35229d0a47acc68b2ef4c2c4ff836c490ee416d0 Mon Sep 17 00:00:00 2001 From: Erol Kaya Date: Wed, 21 Aug 2019 22:06:12 +0200 Subject: [PATCH] Minimum quality problem with Backstage fixed --- .../com/gildedrose/BackstagePassUpdater.java | 13 +- .../java/com/gildedrose/GildedRoseTest.java | 112 ++++++++++-------- 2 files changed, 69 insertions(+), 56 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/BackstagePassUpdater.java b/Java/src/main/java/com/gildedrose/BackstagePassUpdater.java index b7ed093d..b0834873 100644 --- a/Java/src/main/java/com/gildedrose/BackstagePassUpdater.java +++ b/Java/src/main/java/com/gildedrose/BackstagePassUpdater.java @@ -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; } } diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index b05e6146..90efad66 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -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()); } } \ No newline at end of file