mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 06:21:29 +00:00
Add the Conjured Gilded Rose items behaviour
This commit is contained in:
parent
b846c986ed
commit
3c25bffa4c
@ -2,7 +2,7 @@ package com.gildedrose.items;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
public abstract class AbstractGildedRoseItem implements GildedRoseItem{
|
||||
public abstract class AbstractGildedRoseItem implements GildedRoseItem {
|
||||
|
||||
protected final static int MAX_QUALITY = 50;
|
||||
|
||||
|
||||
@ -15,7 +15,7 @@ public class GildedRoseItemFactory {
|
||||
|
||||
public static GildedRoseItem create(Item item) {
|
||||
if (CONJURED_ITEM.matcher(item.name).matches()) {
|
||||
return new NonStandardGildedRoseItem(item);
|
||||
return new StandardGildedRoseItem(item, StandardGildedRoseItem.STANDARD_DEGRADATION * 2);
|
||||
} else if (AGING_ITEM.matcher(item.name).matches()) {
|
||||
return new AgingGildedRoseItem(item, false);
|
||||
} else if (AGING_HARD_DEGRADATION_ITEM.matcher(item.name).matches()) {
|
||||
|
||||
@ -1,67 +0,0 @@
|
||||
package com.gildedrose.items;
|
||||
|
||||
import com.gildedrose.Item;
|
||||
|
||||
public class NonStandardGildedRoseItem extends AbstractGildedRoseItem {
|
||||
|
||||
public NonStandardGildedRoseItem(Item item) {
|
||||
super(item);
|
||||
}
|
||||
|
||||
@Override
|
||||
public GildedRoseItem updateQuality() {
|
||||
legacyUpdateQuality(item);
|
||||
return this;
|
||||
}
|
||||
|
||||
public void legacyUpdateQuality(Item item) {
|
||||
if (!item.name.equals("Aged Brie")
|
||||
&& !item.name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (item.quality > 0) {
|
||||
if (!item.name.equals("Sulfuras, Hand of Ragnaros")) {
|
||||
item.quality = item.quality - 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
|
||||
if (item.name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (item.sellIn < 11) {
|
||||
if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
}
|
||||
|
||||
if (item.sellIn < 6) {
|
||||
if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!item.name.equals("Sulfuras, Hand of Ragnaros")) {
|
||||
item.sellIn = item.sellIn - 1;
|
||||
}
|
||||
|
||||
if (item.sellIn < 0) {
|
||||
if (!item.name.equals("Aged Brie")) {
|
||||
if (!item.name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
||||
if (item.quality > 0) {
|
||||
if (!item.name.equals("Sulfuras, Hand of Ragnaros")) {
|
||||
item.quality = item.quality - 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
item.quality = item.quality - item.quality;
|
||||
}
|
||||
} else {
|
||||
if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -4,14 +4,25 @@ import com.gildedrose.Item;
|
||||
|
||||
public class StandardGildedRoseItem extends AbstractGildedRoseItem {
|
||||
|
||||
public static final int STANDARD_DEGRADATION = 1;
|
||||
|
||||
private final int degradation;
|
||||
|
||||
public StandardGildedRoseItem(Item item) {
|
||||
super(item);
|
||||
item.quality = Math.min(item.quality, MAX_QUALITY);
|
||||
degradation = STANDARD_DEGRADATION;
|
||||
}
|
||||
|
||||
public StandardGildedRoseItem(Item item, int degradation) {
|
||||
super(item);
|
||||
item.quality = Math.min(item.quality, MAX_QUALITY);
|
||||
this.degradation = degradation;
|
||||
}
|
||||
|
||||
public GildedRoseItem updateQuality() {
|
||||
item.sellIn = item.sellIn - 1;
|
||||
item.quality = item.sellIn < 0 ? Math.max(item.quality - 2, 0) : Math.max(item.quality - 1, 0);
|
||||
item.quality = item.sellIn < 0 ? Math.max(item.quality - degradation * 2, 0) : Math.max(item.quality - degradation, 0);
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
@ -3,7 +3,6 @@ package com.gildedrose;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.fail;
|
||||
|
||||
class GildedRoseTest {
|
||||
|
||||
@ -102,8 +101,21 @@ class GildedRoseTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
void updateQuality_conjuredItem() {
|
||||
fail("NYI");
|
||||
void updateQuality_conjuredItem_normalStep() {
|
||||
GildedRose app = createApp(createItem("Conjured stuff", 10, 15));
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(9, app.items[0].sellIn);
|
||||
assertEquals(13, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void updateQuality_conjuredItem_doubleDecayAfterLastSellDate() {
|
||||
GildedRose app = createApp(createItem("Conjured stuff", 0, 15));
|
||||
app.updateQuality();
|
||||
|
||||
assertEquals(-1, app.items[0].sellIn);
|
||||
assertEquals(11, app.items[0].quality);
|
||||
}
|
||||
|
||||
private GildedRose createApp(Item[] items) {
|
||||
|
||||
Loading…
Reference in New Issue
Block a user