%100 test coverage achieved

This commit is contained in:
Erol Shaban 2019-08-21 17:14:43 +02:00
parent 7cdd525d14
commit 5e0d871565
8 changed files with 61 additions and 14 deletions

View File

@ -1,6 +1,6 @@
package com.gildedrose; package com.gildedrose;
public class AgedBrieUpdater extends ItemUpdater { public class AgedBrieUpdater extends CustomItemUpdater {
@Override @Override
void updateSellIn(Item item) { void updateSellIn(Item item) {

View File

@ -1,6 +1,6 @@
package com.gildedrose; package com.gildedrose;
public class BackstagePassUpdater extends ItemUpdater { public class BackstagePassUpdater extends CustomItemUpdater {
@Override @Override
void updateSellIn(Item item) { void updateSellIn(Item item) {

View File

@ -0,0 +1,7 @@
package com.gildedrose;
public abstract class CustomItemUpdater extends ItemUpdater{
int getNewQuality(Item item){
return Math.min(item.quality + getUpdateValue(item), HIGHEST_QUALITY);
}
}

View File

@ -16,14 +16,11 @@ public abstract class ItemUpdater {
private void updateQuality(Item item) { private void updateQuality(Item item) {
if (canUpdateQuality(item)) { if (canUpdateQuality(item)) {
item.quality = Math.max(getNewQuality(item), 0); item.quality = Math.max(getNewQuality(item), MIN_QUALITY);
} }
} }
abstract void updateSellIn(Item item); abstract void updateSellIn(Item item);
abstract boolean canUpdateQuality(Item item); abstract boolean canUpdateQuality(Item item);
abstract int getUpdateValue(Item item); abstract int getUpdateValue(Item item);
abstract int getNewQuality(Item item);
private int getNewQuality(Item item){
return Math.min(item.quality + getUpdateValue(item), HIGHEST_QUALITY);
}
} }

View File

@ -0,0 +1,9 @@
package com.gildedrose;
public abstract class LegendaryItemUpdater extends ItemUpdater{
static int HIGHEST_QUALITY = 80;
int getNewQuality(Item item){
return Math.min(item.quality + getUpdateValue(item), HIGHEST_QUALITY);
}
}

View File

@ -20,4 +20,9 @@ public class StandardItemUpdater extends ItemUpdater {
return DEGRADE_NORMAL; return DEGRADE_NORMAL;
} }
} }
@Override
int getNewQuality(Item item) {
return Math.min(item.quality + getUpdateValue(item), HIGHEST_QUALITY);
}
} }

View File

@ -1,6 +1,6 @@
package com.gildedrose; package com.gildedrose;
public class SulfurasUpdater extends ItemUpdater { public class SulfurasUpdater extends LegendaryItemUpdater {
@Override @Override
void updateSellIn(Item item) { void updateSellIn(Item item) {
System.out.print("########Never gets old ############"); System.out.print("########Never gets old ############");
@ -9,12 +9,12 @@ public class SulfurasUpdater extends ItemUpdater {
@Override @Override
boolean canUpdateQuality(Item item) { boolean canUpdateQuality(Item item) {
// "Sulfuras", being a legendary item, never decreases in Quality // "Sulfuras", being a legendary item, never decreases in Quality
return false; return item.quality < HIGHEST_QUALITY;
} }
@Override @Override
int getUpdateValue(Item item) { int getUpdateValue(Item item) {
// "Sulfuras", being a legendary item, never decreases in Quality // "Sulfuras", being a legendary item, never decreases in Quality. Its value is always 80
return 0; return HIGHEST_QUALITY - item.quality;
} }
} }

View File

@ -122,6 +122,7 @@ public class GildedRoseTest {
assertEquals(originalSellIn - 1, app.items[0].sellIn); assertEquals(originalSellIn - 1, app.items[0].sellIn);
assertEquals(originalQuality + 1, app.items[0].quality); assertEquals(originalQuality + 1, app.items[0].quality);
} }
@Test @Test
public void agedBrie_shouldNotIncrease_moreThanHighestValue() { public void agedBrie_shouldNotIncrease_moreThanHighestValue() {
final int originalQuality = agedBrieWithHighestQuality.quality; final int originalQuality = agedBrieWithHighestQuality.quality;
@ -151,7 +152,7 @@ public class GildedRoseTest {
@Test @Test
public void sulfurus_shouldNeverDegradeAndBeSold() { public void sulfuras_shouldNeverDegradeAndBeSold() {
final Item[] items = new Item[]{sulfuras}; final Item[] items = new Item[]{sulfuras};
app = new GildedRose(items); app = new GildedRose(items);
app.updateQuality(); app.updateQuality();
@ -164,6 +165,16 @@ public class GildedRoseTest {
assertEquals(80, app.items[0].quality); assertEquals(80, app.items[0].quality);
} }
@Test
public void sulfurasQuality_shouldAlwaysBe80() {
final Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", 0, 40)};
app = new GildedRose(items);
app.updateQuality();
assertEquals("Sulfuras, Hand of Ragnaros", app.items[0].name);
assertEquals(0, app.items[0].sellIn);
assertEquals(80, app.items[0].quality);
}
@Test @Test
public void qualityOfItem_exceptLegendaryItems_cantBeMoreThanHighestValue() { public void qualityOfItem_exceptLegendaryItems_cantBeMoreThanHighestValue() {
final Item[] items = new Item[]{standardWithHighestQuality, backstageWithHighestQuality, final Item[] items = new Item[]{standardWithHighestQuality, backstageWithHighestQuality,
@ -211,11 +222,29 @@ public class GildedRoseTest {
final Item[] items = new Item[]{conjuredWithHighestQuality}; final Item[] items = new Item[]{conjuredWithHighestQuality};
app = new GildedRose(items); app = new GildedRose(items);
for (int i=0; i< 7; i++) { for (int i = 0; i < 7; i++) {
app.updateQuality(); app.updateQuality();
} }
assertEquals(-2, app.items[0].sellIn); assertEquals(-2, app.items[0].sellIn);
assertEquals(32, app.items[0].quality); assertEquals(32, app.items[0].quality);
} }
}
@Test
public void newStandardItem_shouldDegradeAsNormal() {
ItemUpdaterFactory.registerCustomUpdater("New Item", new StandardItemUpdater());
final int originalQuality = 40;
final Item newItem = new Item("New Item", 1, originalQuality);
final Item[] items = new Item[]{newItem};
app = new GildedRose(items);
app.updateQuality();
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());
}
}