mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 14:31:28 +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{
|
public abstract class AbstractGildedRoseItem implements GildedRoseItem{
|
||||||
|
|
||||||
|
protected final static int MAX_QUALITY = 50;
|
||||||
|
|
||||||
protected final Item item;
|
protected final Item item;
|
||||||
|
|
||||||
public AbstractGildedRoseItem(Item item) {
|
public AbstractGildedRoseItem(Item item) {
|
||||||
@ -14,4 +16,12 @@ public abstract class AbstractGildedRoseItem implements GildedRoseItem{
|
|||||||
public Item getItem() {
|
public Item getItem() {
|
||||||
return item;
|
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,13 +9,17 @@ import static java.util.regex.Pattern.CASE_INSENSITIVE;
|
|||||||
public class GildedRoseItemFactory {
|
public class GildedRoseItemFactory {
|
||||||
|
|
||||||
static final Pattern LEGENDARY_NAME_PATTERN = Pattern.compile("Sulfuras.*", CASE_INSENSITIVE);
|
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);
|
static final Pattern CONJURED_ITEM = Pattern.compile("Conjured.*", CASE_INSENSITIVE);
|
||||||
|
|
||||||
public static GildedRoseItem create(Item item) {
|
public static GildedRoseItem create(Item item) {
|
||||||
if (AGING_ITEM.matcher(item.name).matches()
|
if (CONJURED_ITEM.matcher(item.name).matches()) {
|
||||||
|| CONJURED_ITEM.matcher(item.name).matches()) {
|
|
||||||
return new NonStandardGildedRoseItem(item);
|
return new NonStandardGildedRoseItem(item);
|
||||||
|
} 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()) {
|
} else if (LEGENDARY_NAME_PATTERN.matcher(item.name).matches()) {
|
||||||
return new LegendaryGildedRoseItem(item);
|
return new LegendaryGildedRoseItem(item);
|
||||||
} else {
|
} else {
|
||||||
|
|||||||
@ -4,8 +4,6 @@ import com.gildedrose.Item;
|
|||||||
|
|
||||||
public class StandardGildedRoseItem extends AbstractGildedRoseItem {
|
public class StandardGildedRoseItem extends AbstractGildedRoseItem {
|
||||||
|
|
||||||
private final static int MAX_QUALITY = 50;
|
|
||||||
|
|
||||||
public StandardGildedRoseItem(Item item) {
|
public StandardGildedRoseItem(Item item) {
|
||||||
super(item);
|
super(item);
|
||||||
item.quality = Math.min(item.quality, MAX_QUALITY);
|
item.quality = Math.min(item.quality, MAX_QUALITY);
|
||||||
|
|||||||
@ -49,7 +49,7 @@ class GildedRoseTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
void updateQuality_legendaryItem() {
|
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();
|
app.updateQuality();
|
||||||
|
|
||||||
assertEquals(10, app.items[0].sellIn);
|
assertEquals(10, app.items[0].sellIn);
|
||||||
@ -57,8 +57,48 @@ class GildedRoseTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void updateQuality_agingItem() {
|
void updateQuality_agingItem_normalIncrease() {
|
||||||
fail("NYI");
|
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
|
@Test
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user