From 3c25bffa4c4f6f52c779c4c84a2215bfb4e30dca Mon Sep 17 00:00:00 2001 From: rverlind Date: Tue, 5 Dec 2023 23:04:07 +0100 Subject: [PATCH] Add the Conjured Gilded Rose items behaviour --- .../items/AbstractGildedRoseItem.java | 2 +- .../items/GildedRoseItemFactory.java | 2 +- .../items/NonStandardGildedRoseItem.java | 67 ------------------- .../items/StandardGildedRoseItem.java | 13 +++- .../java/com/gildedrose/GildedRoseTest.java | 18 ++++- 5 files changed, 29 insertions(+), 73 deletions(-) delete mode 100644 Java/src/main/java/com/gildedrose/items/NonStandardGildedRoseItem.java diff --git a/Java/src/main/java/com/gildedrose/items/AbstractGildedRoseItem.java b/Java/src/main/java/com/gildedrose/items/AbstractGildedRoseItem.java index 7b3880bb..5e60c6b2 100644 --- a/Java/src/main/java/com/gildedrose/items/AbstractGildedRoseItem.java +++ b/Java/src/main/java/com/gildedrose/items/AbstractGildedRoseItem.java @@ -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; diff --git a/Java/src/main/java/com/gildedrose/items/GildedRoseItemFactory.java b/Java/src/main/java/com/gildedrose/items/GildedRoseItemFactory.java index 873905c8..d62b346c 100644 --- a/Java/src/main/java/com/gildedrose/items/GildedRoseItemFactory.java +++ b/Java/src/main/java/com/gildedrose/items/GildedRoseItemFactory.java @@ -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()) { diff --git a/Java/src/main/java/com/gildedrose/items/NonStandardGildedRoseItem.java b/Java/src/main/java/com/gildedrose/items/NonStandardGildedRoseItem.java deleted file mode 100644 index 1828fe25..00000000 --- a/Java/src/main/java/com/gildedrose/items/NonStandardGildedRoseItem.java +++ /dev/null @@ -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; - } - } - } - } -} diff --git a/Java/src/main/java/com/gildedrose/items/StandardGildedRoseItem.java b/Java/src/main/java/com/gildedrose/items/StandardGildedRoseItem.java index 25861556..f238eb85 100644 --- a/Java/src/main/java/com/gildedrose/items/StandardGildedRoseItem.java +++ b/Java/src/main/java/com/gildedrose/items/StandardGildedRoseItem.java @@ -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; } } diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 86ef7bdb..91f2398b 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -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) {