diff --git a/Java/src/main/java/com/gildedrose/item/.DS_Store b/Java/src/main/java/com/gildedrose/item/.DS_Store new file mode 100644 index 00000000..6bc317c4 Binary files /dev/null and b/Java/src/main/java/com/gildedrose/item/.DS_Store differ diff --git a/Java/src/main/java/com/gildedrose/item/ConjuredItem.java b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java new file mode 100644 index 00000000..648c81f9 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/ConjuredItem.java @@ -0,0 +1,20 @@ +package com.gildedrose.item; + +public class ConjuredItem implements CustomisedItem { + + private final Item item; + + public ConjuredItem(Item item) { + this.item = item; + } + + public void updateState() { + item.sellIn -= 1; + if (item.sellIn > 0) { + item.quality -= 2; + } else { + item.quality -= 4; + } + } + +} diff --git a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java index 770abcc1..9aa14e06 100644 --- a/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java +++ b/Java/src/main/java/com/gildedrose/item/CustomisedItemFactory.java @@ -5,6 +5,7 @@ public class CustomisedItemFactory { public final static String SULFURAS = "Sulfuras, Hand of Ragnaros"; public final static String BRIE = "Aged Brie"; public final static String BACKSTAGE_PASSES_ITEM = "Backstage passes to a TAFKAL80ETC concert"; + public final static String CONJURED_ITEM = "Conjured"; public CustomisedItem customiseItem(Item item) { if (item.name.equals(SULFURAS)) { @@ -13,6 +14,8 @@ public class CustomisedItemFactory { return new AgedBrie(item); } else if (item.name.equals(BACKSTAGE_PASSES_ITEM)) { return new BackstagePassesItem(item); + } else if (item.name.equals(CONJURED_ITEM)) { + return new ConjuredItem(item); } else { return new StandardItem(item); } diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index d211789e..7bda5177 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -2,6 +2,7 @@ package com.gildedrose; import static org.junit.Assert.*; +import com.gildedrose.item.CustomisedItem; import com.gildedrose.item.Item; import com.gildedrose.item.CustomisedItemFactory; import org.junit.Test; @@ -44,6 +45,15 @@ public class GildedRoseTest { assertEquals(-1, itemSellByDayNumber(app)); } + @Test + public void conjuredItemDecreasesSellByDayNumberEachTime() { + GildedRose app = newGildedRose(CustomisedItemFactory.CONJURED_ITEM, 0, 0); + + app.updateQuality(); + + assertEquals(-1, itemSellByDayNumber(app)); + } + @Test public void brieIncreasesInQualityEachTime() { GildedRose app = newGildedRose(CustomisedItemFactory.BRIE, 1, 1); @@ -152,6 +162,33 @@ public class GildedRoseTest { assertEquals(1, itemSellByDayNumber(app)); } + @Test + public void conjuredItemDecreasesQualityByTwoIfSellByDayIsAboveZero() { + GildedRose app = newGildedRose(CustomisedItemFactory.CONJURED_ITEM, 2, 5); + + app.updateQuality(); + + assertEquals(3, itemQualityValue(app)); + } + + @Test + public void conjuredItemDecreasesQualityByFourOnceSellByDayIsZeroOrLess() { + GildedRose app = newGildedRose(CustomisedItemFactory.CONJURED_ITEM,0, 5); + + app.updateQuality(); + + assertEquals(1, itemQualityValue(app)); + } + + @Test + public void conjuredItemCannotHaveQualityBelowZero() { + GildedRose app = newGildedRose(CustomisedItemFactory.CONJURED_ITEM, 0, 0); + + app.updateQuality(); + + assertEquals(0, itemQualityValue(app)); + } + private GildedRose newGildedRose(String itemName, int itemSellIn, int itemQuality) { Item[] items = new Item[] { new Item(itemName, itemSellIn, itemQuality)}; return new GildedRose(items);