mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 22:41:30 +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;
|
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 static int MAX_QUALITY = 50;
|
||||||
|
|
||||||
|
|||||||
@ -15,7 +15,7 @@ public class GildedRoseItemFactory {
|
|||||||
|
|
||||||
public static GildedRoseItem create(Item item) {
|
public static GildedRoseItem create(Item item) {
|
||||||
if (CONJURED_ITEM.matcher(item.name).matches()) {
|
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()) {
|
} else if (AGING_ITEM.matcher(item.name).matches()) {
|
||||||
return new AgingGildedRoseItem(item, false);
|
return new AgingGildedRoseItem(item, false);
|
||||||
} else if (AGING_HARD_DEGRADATION_ITEM.matcher(item.name).matches()) {
|
} 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 class StandardGildedRoseItem extends AbstractGildedRoseItem {
|
||||||
|
|
||||||
|
public static final int STANDARD_DEGRADATION = 1;
|
||||||
|
|
||||||
|
private final int degradation;
|
||||||
|
|
||||||
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);
|
||||||
|
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() {
|
public GildedRoseItem updateQuality() {
|
||||||
item.sellIn = item.sellIn - 1;
|
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;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -3,7 +3,6 @@ package com.gildedrose;
|
|||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import static org.junit.jupiter.api.Assertions.fail;
|
|
||||||
|
|
||||||
class GildedRoseTest {
|
class GildedRoseTest {
|
||||||
|
|
||||||
@ -102,8 +101,21 @@ class GildedRoseTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void updateQuality_conjuredItem() {
|
void updateQuality_conjuredItem_normalStep() {
|
||||||
fail("NYI");
|
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) {
|
private GildedRose createApp(Item[] items) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user