Add the Conjured Gilded Rose items behaviour

This commit is contained in:
rverlind 2023-12-05 23:04:07 +01:00
parent b846c986ed
commit 3c25bffa4c
5 changed files with 29 additions and 73 deletions

View File

@ -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;

View File

@ -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()) {

View File

@ -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;
}
}
}
}
}

View File

@ -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;
}
}

View File

@ -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) {