mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 06:21:29 +00:00
%100 test coverage achieved
This commit is contained in:
parent
7cdd525d14
commit
5e0d871565
@ -1,6 +1,6 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public class AgedBrieUpdater extends ItemUpdater {
|
||||
public class AgedBrieUpdater extends CustomItemUpdater {
|
||||
|
||||
@Override
|
||||
void updateSellIn(Item item) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package com.gildedrose;
|
||||
|
||||
public class BackstagePassUpdater extends ItemUpdater {
|
||||
public class BackstagePassUpdater extends CustomItemUpdater {
|
||||
|
||||
@Override
|
||||
void updateSellIn(Item item) {
|
||||
|
||||
7
Java/src/main/java/com/gildedrose/CustomItemUpdater.java
Normal file
7
Java/src/main/java/com/gildedrose/CustomItemUpdater.java
Normal 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);
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@ -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());
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user