diff --git a/Java/src/main/java/com/gildedrose/AgedBrie.java b/Java/src/main/java/com/gildedrose/AgedBrie.java new file mode 100644 index 00000000..0c1e8bc9 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/AgedBrie.java @@ -0,0 +1,60 @@ +package com.gildedrose; + +import static com.gildedrose.Constants.*; + +public class AgedBrie extends InventoryItem { + public AgedBrie(Item item) { + super(item); + } + + @Override + void age() { + if (item.name.equals(AGED_BRIE) + || item.name.equals(BACKSTAGE)) { + if (item.quality < 50) { + item.quality = item.quality + 1; + + if (item.name.equals(BACKSTAGE)) { + 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; + } + } + } + } + } else { + if (item.quality > 0) { + if (!item.name.equals(SULFURAS)) { + item.quality = item.quality - 1; + } + } + } + if (!item.name.equals(SULFURAS)) { + item.sellIn = item.sellIn - 1; + } + + if (item.sellIn < 0) { + if (item.name.equals(AGED_BRIE)) { + if (item.quality < 50) { + item.quality = item.quality + 1; + } + } else { + if (!item.name.equals(BACKSTAGE)) { + if (item.quality > 0) { + if (!item.name.equals(SULFURAS)) { + item.quality = item.quality - 1; + } + } + } else { + item.quality = 0; + } + } + } + } +} diff --git a/Java/src/main/java/com/gildedrose/Backstage.java b/Java/src/main/java/com/gildedrose/Backstage.java new file mode 100644 index 00000000..cf9e1a6e --- /dev/null +++ b/Java/src/main/java/com/gildedrose/Backstage.java @@ -0,0 +1,60 @@ +package com.gildedrose; + +import static com.gildedrose.Constants.*; + +public class Backstage extends InventoryItem { + public Backstage(Item item) { + super(item); + } + + @Override + void age() { + if (item.name.equals(AGED_BRIE) + || item.name.equals(BACKSTAGE)) { + if (item.quality < 50) { + item.quality = item.quality + 1; + + if (item.name.equals(BACKSTAGE)) { + 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; + } + } + } + } + } else { + if (item.quality > 0) { + if (!item.name.equals(SULFURAS)) { + item.quality = item.quality - 1; + } + } + } + if (!item.name.equals(SULFURAS)) { + item.sellIn = item.sellIn - 1; + } + + if (item.sellIn < 0) { + if (item.name.equals(AGED_BRIE)) { + if (item.quality < 50) { + item.quality = item.quality + 1; + } + } else { + if (!item.name.equals(BACKSTAGE)) { + if (item.quality > 0) { + if (!item.name.equals(SULFURAS)) { + item.quality = item.quality - 1; + } + } + } else { + item.quality = 0; + } + } + } + } +} diff --git a/Java/src/main/java/com/gildedrose/Constants.java b/Java/src/main/java/com/gildedrose/Constants.java new file mode 100644 index 00000000..f5917a58 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/Constants.java @@ -0,0 +1,9 @@ +package com.gildedrose; + +public final class Constants { + public static final String BACKSTAGE = "Backstage passes to a TAFKAL80ETC concert"; + public static final String AGED_BRIE = "Aged Brie"; + public static final String SULFURAS = "Sulfuras, Hand of Ragnaros"; + private Constants() { + } +} diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index ce5dde82..dae21b96 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,65 +1,17 @@ package com.gildedrose; +import java.util.Arrays; + class GildedRose { - public static final String BACKSTAGE = "Backstage passes to a TAFKAL80ETC concert"; - public static final String AGED_BRIE = "Aged Brie"; - public static final String SULFURAS = "Sulfuras, Hand of Ragnaros"; + Item[] items; public GildedRose(Item[] items) { this.items = items; } - public void updateQuality() { - for (Item item : items) { - if (!item.name.equals(AGED_BRIE) - && !item.name.equals(BACKSTAGE)) { - if (item.quality > 0) { - if (!item.name.equals(SULFURAS)) { - item.quality = item.quality - 1; - } - } - } else { - if (item.quality < 50) { - item.quality = item.quality + 1; - - if (item.name.equals(BACKSTAGE)) { - 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)) { - item.sellIn = item.sellIn - 1; - } - - if (item.sellIn < 0) { - if (!item.name.equals(AGED_BRIE)) { - if (!item.name.equals(BACKSTAGE)) { - if (item.quality > 0) { - if (!item.name.equals(SULFURAS)) { - item.quality = item.quality - 1; - } - } - } else { - item.quality = item.quality - item.quality; - } - } else { - if (item.quality < 50) { - item.quality = item.quality + 1; - } - } - } - } + public static void updateQuality(GildedRose gildedRose) { + Arrays.stream(gildedRose.items).forEach(item -> InventoryItem.createInventoryItem(item).age()); } + } diff --git a/Java/src/main/java/com/gildedrose/InventoryItem.java b/Java/src/main/java/com/gildedrose/InventoryItem.java new file mode 100644 index 00000000..6be25cf4 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/InventoryItem.java @@ -0,0 +1,32 @@ +package com.gildedrose; + +import static com.gildedrose.Constants.*; + +public class InventoryItem { + protected final Item item; + + InventoryItem(Item item) { + this.item = item; + } + + public static InventoryItem createInventoryItem(Item item) { + if (item.name.equals(SULFURAS)) return new Sulfuras(item); + if (item.name.equals(AGED_BRIE)) return new AgedBrie(item); + if (item.name.equals(BACKSTAGE)) return new Backstage(item); + return new InventoryItem(item); + } + + void age() { + decreaseQuality(); + decreaseSellIn(); + if (item.sellIn < 0) decreaseQuality(); + } + + protected void decreaseSellIn() { + item.sellIn = item.sellIn - 1; + } + + protected void decreaseQuality() { + if (item.quality > 0) item.quality = item.quality - 1; + } +} diff --git a/Java/src/main/java/com/gildedrose/Sulfuras.java b/Java/src/main/java/com/gildedrose/Sulfuras.java new file mode 100644 index 00000000..30a37cba --- /dev/null +++ b/Java/src/main/java/com/gildedrose/Sulfuras.java @@ -0,0 +1,12 @@ +package com.gildedrose; + +public class Sulfuras extends InventoryItem { + public Sulfuras(Item item) { + super(item); + } + + @Override + void age() { + // Sulfuras never changes its properties + } +} diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index d63b3786..7548e351 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -10,35 +10,35 @@ class GildedRoseTest { void foo() { Item[] items = new Item[]{new Item("foo", 0, 0)}; GildedRose app = new GildedRose(items); - app.updateQuality(); + GildedRose.updateQuality(app); assertEquals("foo", app.items[0].name); } @Test void degradesTwiceAsFastAfterSellInDateHasPassed() { Item[] items = new Item[]{new Item("foo", 0, 2)}; - new GildedRose(items).updateQuality(); + GildedRose.updateQuality(new GildedRose(items)); assertEquals(0, items[0].quality); } @Test void neverMustHaveNegativeQuality() { Item[] items = new Item[]{new Item("foo", 0, 0)}; - new GildedRose(items).updateQuality(); + GildedRose.updateQuality(new GildedRose(items)); assertEquals(0, items[0].quality); } @Test void increaseAgedBrieQualityWhenItGetsOlder() { Item[] items = new Item[]{new Item("Aged Brie", 0, 2)}; - new GildedRose(items).updateQuality(); + GildedRose.updateQuality(new GildedRose(items)); assertEquals(4, items[0].quality); } @Test void neverMustHaveAnItemWithMoreThan50OfQuality() { Item[] items = new Item[]{new Item("Aged Brie", 0, 50)}; - new GildedRose(items).updateQuality(); + GildedRose.updateQuality(new GildedRose(items)); assertEquals(50, items[0].quality); } @@ -46,14 +46,14 @@ class GildedRoseTest { @Test void neverModifySulfurasQuality() { Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", 0, 50)}; - new GildedRose(items).updateQuality(); + GildedRose.updateQuality(new GildedRose(items)); assertEquals(50, items[0].quality); } @Test void neverModifySulfurasQualityEvenISGreaterThan50() { Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", 0, 80)}; - new GildedRose(items).updateQuality(); + GildedRose.updateQuality(new GildedRose(items)); assertEquals(80, items[0].quality); } @@ -62,7 +62,7 @@ class GildedRoseTest { Item[] items = new Item[]{new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20), new Item("Backstage passes to a TAFKAL80ETC concert", 10, 20), new Item("Backstage passes to a TAFKAL80ETC concert", 5, 20)}; - new GildedRose(items).updateQuality(); + GildedRose.updateQuality(new GildedRose(items)); assertEquals(21, items[0].quality); assertEquals(22, items[1].quality); assertEquals(23, items[2].quality); diff --git a/Java/src/test/java/com/gildedrose/GoldenMasterApprovalTest.java b/Java/src/test/java/com/gildedrose/GoldenMasterApprovalTest.java index be076b1f..f434b83c 100644 --- a/Java/src/test/java/com/gildedrose/GoldenMasterApprovalTest.java +++ b/Java/src/test/java/com/gildedrose/GoldenMasterApprovalTest.java @@ -36,7 +36,7 @@ class GoldenMasterApprovalTest { .setSellIn(sellIn) .setQuality(quality) .createItem(); - new GildedRose(new Item[]{item}).updateQuality(); + GildedRose.updateQuality(new GildedRose(new Item[]{item})); return item; } } diff --git a/Java/src/test/java/com/gildedrose/TexttestFixture.java b/Java/src/test/java/com/gildedrose/TexttestFixture.java index d059c88f..bc37f417 100644 --- a/Java/src/test/java/com/gildedrose/TexttestFixture.java +++ b/Java/src/test/java/com/gildedrose/TexttestFixture.java @@ -30,7 +30,7 @@ public class TexttestFixture { System.out.println(item); } System.out.println(); - app.updateQuality(); + GildedRose.updateQuality(app); } }