%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;
public class AgedBrieUpdater extends ItemUpdater {
public class AgedBrieUpdater extends CustomItemUpdater {
@Override
void updateSellIn(Item item) {

View File

@ -1,6 +1,6 @@
package com.gildedrose;
public class BackstagePassUpdater extends ItemUpdater {
public class BackstagePassUpdater extends CustomItemUpdater {
@Override
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) {
if (canUpdateQuality(item)) {
item.quality = Math.max(getNewQuality(item), 0);
item.quality = Math.max(getNewQuality(item), MIN_QUALITY);
}
}
abstract void updateSellIn(Item item);
abstract boolean canUpdateQuality(Item item);
abstract int getUpdateValue(Item item);
private int getNewQuality(Item item){
return Math.min(item.quality + getUpdateValue(item), HIGHEST_QUALITY);
}
abstract int getNewQuality(Item item);
}

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;
}
}
@Override
int getNewQuality(Item item) {
return Math.min(item.quality + getUpdateValue(item), HIGHEST_QUALITY);
}
}

View File

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

View File

@ -122,6 +122,7 @@ public class GildedRoseTest {
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;
@ -151,7 +152,7 @@ public class GildedRoseTest {
@Test
public void sulfurus_shouldNeverDegradeAndBeSold() {
public void sulfuras_shouldNeverDegradeAndBeSold() {
final Item[] items = new Item[]{sulfuras};
app = new GildedRose(items);
app.updateQuality();
@ -164,6 +165,16 @@ public class GildedRoseTest {
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
public void qualityOfItem_exceptLegendaryItems_cantBeMoreThanHighestValue() {
final Item[] items = new Item[]{standardWithHighestQuality, backstageWithHighestQuality,
@ -211,11 +222,29 @@ public class GildedRoseTest {
final Item[] items = new Item[]{conjuredWithHighestQuality};
app = new GildedRose(items);
for (int i=0; i< 7; i++) {
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());
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());
}
}