From cb1aa70657c32411730ccd7245e99f2a1e435add Mon Sep 17 00:00:00 2001 From: Richard Xu Date: Thu, 22 Dec 2022 16:47:59 -0500 Subject: [PATCH] Implement conjured --- .../com/gildedrose/ConjuredItemHandler.java | 12 ++ .../main/java/com/gildedrose/GildedRose.java | 2 + .../main/java/com/gildedrose/ItemHandler.java | 3 +- .../main/java/com/gildedrose/ItemType.java | 1 + .../java/com/gildedrose/GildedRoseTest.java | 142 +++++++++++------- 5 files changed, 106 insertions(+), 54 deletions(-) create mode 100644 Java/src/main/java/com/gildedrose/ConjuredItemHandler.java diff --git a/Java/src/main/java/com/gildedrose/ConjuredItemHandler.java b/Java/src/main/java/com/gildedrose/ConjuredItemHandler.java new file mode 100644 index 00000000..46f81dff --- /dev/null +++ b/Java/src/main/java/com/gildedrose/ConjuredItemHandler.java @@ -0,0 +1,12 @@ +package com.gildedrose; + +public class ConjuredItemHandler extends ItemHandler { + @Override + public void handleDay(Item item) { + item.quality -= 2; + item.sellIn -= 1; + if (item.sellIn < 0) { + item.quality -= 2; + } + } +} diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 1660fc26..d23d2a24 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -13,6 +13,8 @@ class GildedRose { SulfurasItemHandler.class, ItemType.BACKSTAGE_PASSES, BackstagePassesItemHandler.class, + ItemType.CONJURED, + ConjuredItemHandler.class, ItemType.GENERIC, GenericItemHandler.class ); diff --git a/Java/src/main/java/com/gildedrose/ItemHandler.java b/Java/src/main/java/com/gildedrose/ItemHandler.java index 2395d81d..f5017e84 100644 --- a/Java/src/main/java/com/gildedrose/ItemHandler.java +++ b/Java/src/main/java/com/gildedrose/ItemHandler.java @@ -2,5 +2,6 @@ package com.gildedrose; public abstract class ItemHandler { - public void handleDay(Item item) {} + public void handleDay(Item item) { + } } diff --git a/Java/src/main/java/com/gildedrose/ItemType.java b/Java/src/main/java/com/gildedrose/ItemType.java index 3c578565..d400a102 100644 --- a/Java/src/main/java/com/gildedrose/ItemType.java +++ b/Java/src/main/java/com/gildedrose/ItemType.java @@ -6,6 +6,7 @@ public enum ItemType { AGED_BRIE("Aged Brie"), SULFURAS("Sulfuras, Hand of Ragnaros"), BACKSTAGE_PASSES("Backstage passes to a TAFKAL80ETC concert"), + CONJURED("Conjured Mana Cake"), GENERIC("Generic item"); private final String displayName; diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 4d83f246..95bd18b4 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -12,9 +12,9 @@ class GildedRoseTest { Item[] items = new Item[]{new Item(ItemType.AGED_BRIE.getDisplayName(), 2, 0)}; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).quality, 1); + assertEquals(1, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 2); + assertEquals(2, app.items.get(0).quality); } @Test @@ -25,9 +25,9 @@ class GildedRoseTest { }; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, sellIn); + assertEquals(sellIn, app.items.get(0).sellIn); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, sellIn); + assertEquals(sellIn, app.items.get(0).sellIn); } @Test @@ -37,9 +37,9 @@ class GildedRoseTest { }; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).quality, SULFURAS_QUALITY); + assertEquals(SULFURAS_QUALITY, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, SULFURAS_QUALITY); + assertEquals(SULFURAS_QUALITY, app.items.get(0).quality); } @Test @@ -49,7 +49,7 @@ class GildedRoseTest { }; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).quality, SULFURAS_QUALITY); + assertEquals(SULFURAS_QUALITY, app.items.get(0).quality); } @Test @@ -60,9 +60,9 @@ class GildedRoseTest { }; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).quality, 2); + assertEquals(2, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 4); + assertEquals(4, app.items.get(0).quality); } @Test @@ -73,11 +73,11 @@ class GildedRoseTest { }; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).quality, 3); + assertEquals(3, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 6); + assertEquals(6, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 9); + assertEquals(9, app.items.get(0).quality); } @Test @@ -88,9 +88,9 @@ class GildedRoseTest { }; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).quality, 13); + assertEquals(13, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 0); + assertEquals(0, app.items.get(0).quality); } @Test @@ -100,11 +100,11 @@ class GildedRoseTest { Item[] items = new Item[]{new Item("generic item", 5, quality)}; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).quality, 0); + assertEquals(0, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 0); + assertEquals(0, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 0); + assertEquals(0, app.items.get(0).quality); } @Test @@ -112,11 +112,11 @@ class GildedRoseTest { Item[] items = new Item[]{new Item(ItemType.AGED_BRIE.getDisplayName(), 5, 50)}; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).quality, 50); + assertEquals(50, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 50); + assertEquals(50, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 50); + assertEquals(50, app.items.get(0).quality); } @Test @@ -124,11 +124,11 @@ class GildedRoseTest { Item[] items = new Item[]{new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 5, 50)}; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).quality, 50); + assertEquals(50, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 50); + assertEquals(50, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 50); + assertEquals(50, app.items.get(0).quality); } @Test @@ -136,11 +136,11 @@ class GildedRoseTest { Item[] items = new Item[]{new Item("generic item", 5, 5)}; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).quality, 4); + assertEquals(4, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 3); + assertEquals(3, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 2); + assertEquals(2, app.items.get(0).quality); } @Test @@ -148,11 +148,11 @@ class GildedRoseTest { Item[] items = new Item[]{new Item("generic item", 1, 6)}; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).quality, 5); + assertEquals(5, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 3); + assertEquals(3, app.items.get(0).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 1); + assertEquals(1, app.items.get(0).quality); } @Test @@ -160,11 +160,11 @@ class GildedRoseTest { Item[] items = new Item[]{new Item(ItemType.AGED_BRIE.getDisplayName(), 5, 1)}; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, 4); + assertEquals(4, app.items.get(0).sellIn); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, 3); + assertEquals(3, app.items.get(0).sellIn); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, 2); + assertEquals(2, app.items.get(0).sellIn); } @Test @@ -172,11 +172,11 @@ class GildedRoseTest { Item[] items = new Item[]{new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 5, 1)}; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, 4); + assertEquals(4, app.items.get(0).sellIn); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, 3); + assertEquals(3, app.items.get(0).sellIn); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, 2); + assertEquals(2, app.items.get(0).sellIn); } @Test @@ -184,11 +184,11 @@ class GildedRoseTest { Item[] items = new Item[]{new Item("generic item", 5, 1)}; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, 4); + assertEquals(4, app.items.get(0).sellIn); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, 3); + assertEquals(3, app.items.get(0).sellIn); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, 2); + assertEquals(2, app.items.get(0).sellIn); } @Test @@ -196,11 +196,11 @@ class GildedRoseTest { Item[] items = new Item[]{new Item("generic item", 1, 1)}; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, 0); + assertEquals(0, app.items.get(0).sellIn); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, -1); + assertEquals(-1, app.items.get(0).sellIn); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, -2); + assertEquals(-2, app.items.get(0).sellIn); } @Test @@ -208,11 +208,11 @@ class GildedRoseTest { Item[] items = new Item[]{new Item(ItemType.AGED_BRIE.getDisplayName(), 1, 1)}; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, 0); + assertEquals(0, app.items.get(0).sellIn); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, -1); + assertEquals(-1, app.items.get(0).sellIn); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, -2); + assertEquals(-2, app.items.get(0).sellIn); } @Test @@ -220,11 +220,11 @@ class GildedRoseTest { Item[] items = new Item[]{new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 1, 1)}; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, 0); + assertEquals(0, app.items.get(0).sellIn); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, -1); + assertEquals(-1, app.items.get(0).sellIn); app.updateQuality(); - assertEquals(app.items.get(0).sellIn, -2); + assertEquals(-2, app.items.get(0).sellIn); } @Test @@ -235,13 +235,49 @@ class GildedRoseTest { }; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(app.items.get(0).quality, 4); - assertEquals(app.items.get(1).quality, 9); + assertEquals(4, app.items.get(0).quality); + assertEquals(9, app.items.get(1).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 3); - assertEquals(app.items.get(1).quality, 8); + assertEquals(3, app.items.get(0).quality); + assertEquals(8, app.items.get(1).quality); app.updateQuality(); - assertEquals(app.items.get(0).quality, 2); - assertEquals(app.items.get(1).quality, 7); + assertEquals(2, app.items.get(0).quality); + assertEquals(7, app.items.get(1).quality); + } + + @Test + public void conjuredItemsDecreaseByTwoEachDayBeforeSellInDate() { + Item[] items = new Item[]{new Item("Conjured Mana Cake", 10, 10)}; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals(8, app.items.get(0).quality); + app.updateQuality(); + assertEquals(6, app.items.get(0).quality); + app.updateQuality(); + assertEquals(4, app.items.get(0).quality); + } + + @Test + public void sellInDateDecreasesByOneEachDayForConjuredItem() { + Item[] items = new Item[]{new Item("Conjured Mana Cake", 2, 10)}; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals(1, app.items.get(0).sellIn); + app.updateQuality(); + assertEquals(0, app.items.get(0).sellIn); + app.updateQuality(); + assertEquals(-1, app.items.get(0).sellIn); + } + + @Test + public void conjuredItemsQualityDecreasesByFourEachDayAfterSellInDate() { + Item[] items = new Item[]{new Item("Conjured Mana Cake", 1, 10)}; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals(8, app.items.get(0).quality); + app.updateQuality(); + assertEquals(4, app.items.get(0).quality); + app.updateQuality(); + assertEquals(0, app.items.get(0).quality); } }