mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 06:21:29 +00:00
Extract the aging (Brie, Passes) Gilded Rose items behaviour
This commit is contained in:
parent
fdd930f5cd
commit
b846c986ed
@ -4,6 +4,8 @@ import com.gildedrose.Item;
|
||||
|
||||
public abstract class AbstractGildedRoseItem implements GildedRoseItem{
|
||||
|
||||
protected final static int MAX_QUALITY = 50;
|
||||
|
||||
protected final Item item;
|
||||
|
||||
public AbstractGildedRoseItem(Item item) {
|
||||
@ -14,4 +16,12 @@ public abstract class AbstractGildedRoseItem implements GildedRoseItem{
|
||||
public Item getItem() {
|
||||
return item;
|
||||
}
|
||||
|
||||
protected int getSellIn() {
|
||||
return getItem().sellIn;
|
||||
}
|
||||
|
||||
protected int getQuality() {
|
||||
return getItem().quality;
|
||||
}
|
||||
}
|
||||
|
||||
@ -0,0 +1,36 @@
|
||||
package com.gildedrose.items;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
public class AgingGildedRoseItem extends AbstractGildedRoseItem {
|
||||
|
||||
final static int DOUBLE_QUALITY_INCREASE_DAYS = 10;
|
||||
final static int TRIPLE_QUALITY_INCREASE_DAYS = 5;
|
||||
|
||||
final Boolean hardDegradation;
|
||||
|
||||
public AgingGildedRoseItem(Item item, Boolean hardDegradation) {
|
||||
super(item);
|
||||
this.hardDegradation = hardDegradation;
|
||||
}
|
||||
|
||||
@Override
|
||||
public GildedRoseItem updateQuality() {
|
||||
item.sellIn = item.sellIn - 1;
|
||||
|
||||
int newQuality;
|
||||
|
||||
if (getSellIn() <= 0) {
|
||||
newQuality = hardDegradation ? 0 : getQuality() - 1;
|
||||
} else if (getSellIn() <= TRIPLE_QUALITY_INCREASE_DAYS) {
|
||||
newQuality = getQuality() + 3;
|
||||
} else if (getSellIn() <= DOUBLE_QUALITY_INCREASE_DAYS) {
|
||||
newQuality = getQuality() + 2;
|
||||
} else {
|
||||
newQuality = getQuality() + 1;
|
||||
}
|
||||
item.quality = Math.min(Math.max(newQuality, 0), MAX_QUALITY);
|
||||
|
||||
return this;
|
||||
}
|
||||
}
|
||||
@ -9,14 +9,18 @@ import static java.util.regex.Pattern.CASE_INSENSITIVE;
|
||||
public class GildedRoseItemFactory {
|
||||
|
||||
static final Pattern LEGENDARY_NAME_PATTERN = Pattern.compile("Sulfuras.*", CASE_INSENSITIVE);
|
||||
static final Pattern AGING_ITEM = Pattern.compile("", CASE_INSENSITIVE);
|
||||
static final Pattern AGING_ITEM = Pattern.compile(".*Brie.*", CASE_INSENSITIVE);
|
||||
static final Pattern AGING_HARD_DEGRADATION_ITEM = Pattern.compile("backstage passes.*", CASE_INSENSITIVE);
|
||||
static final Pattern CONJURED_ITEM = Pattern.compile("Conjured.*", CASE_INSENSITIVE);
|
||||
|
||||
public static GildedRoseItem create(Item item) {
|
||||
if (AGING_ITEM.matcher(item.name).matches()
|
||||
|| CONJURED_ITEM.matcher(item.name).matches()) {
|
||||
if (CONJURED_ITEM.matcher(item.name).matches()) {
|
||||
return new NonStandardGildedRoseItem(item);
|
||||
} else if (LEGENDARY_NAME_PATTERN.matcher(item.name).matches()) {
|
||||
} else if (AGING_ITEM.matcher(item.name).matches()) {
|
||||
return new AgingGildedRoseItem(item, false);
|
||||
} else if (AGING_HARD_DEGRADATION_ITEM.matcher(item.name).matches()) {
|
||||
return new AgingGildedRoseItem(item, true);
|
||||
} else if (LEGENDARY_NAME_PATTERN.matcher(item.name).matches()) {
|
||||
return new LegendaryGildedRoseItem(item);
|
||||
} else {
|
||||
return new StandardGildedRoseItem(item);
|
||||
|
||||
@ -4,8 +4,6 @@ import com.gildedrose.Item;
|
||||
|
||||
public class StandardGildedRoseItem extends AbstractGildedRoseItem {
|
||||
|
||||
private final static int MAX_QUALITY = 50;
|
||||
|
||||
public StandardGildedRoseItem(Item item) {
|
||||
super(item);
|
||||
item.quality = Math.min(item.quality, MAX_QUALITY);
|
||||
|
||||
@ -49,7 +49,7 @@ class GildedRoseTest {
|
||||
|
||||
@Test
|
||||
void updateQuality_legendaryItem() {
|
||||
GildedRose app = createApp(createItem("Sulfuras, Hand of Ragnaros ", 10, 80));
|
||||
GildedRose app = createApp(createItem("SulFUras, Hand of Ragnaros ", 10, 80));
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(10, app.items[0].sellIn);
|
||||
@ -57,8 +57,48 @@ class GildedRoseTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void updateQuality_agingItem() {
|
||||
fail("NYI");
|
||||
void updateQuality_agingItem_normalIncrease() {
|
||||
GildedRose app = createApp(createItem("Aging Brie", 20, 10));
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(19, app.items[0].sellIn);
|
||||
assertEquals(11, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void updateQuality_agingItem_doubleQualityIncrease() {
|
||||
GildedRose app = createApp(createItem("Aging Brie", 11, 10));
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(10, app.items[0].sellIn);
|
||||
assertEquals(12, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void updateQuality_agingItem_doubleTripleIncrease() {
|
||||
GildedRose app = createApp(createItem("A lot of Aging BRIE", 6, 10));
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(5, app.items[0].sellIn);
|
||||
assertEquals(13, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void updateQuality_agingItem_normalDecrease() {
|
||||
GildedRose app = createApp(createItem("Aging BRIE", 0, 50));
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(-1, app.items[0].sellIn);
|
||||
assertEquals(49, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void updateQuality_agingItem_BackstagePasses_HardDegradation() {
|
||||
GildedRose app = createApp(createItem("Backstage paSSes for", 0, 50));
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(-1, app.items[0].sellIn);
|
||||
assertEquals(0, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
|
||||
Loading…
Reference in New Issue
Block a user