From fa28c3021580a2f2d36b417ac8cbd37b1375e3e3 Mon Sep 17 00:00:00 2001 From: Velizar Todorov Date: Tue, 30 Nov 2021 17:25:06 +0100 Subject: [PATCH] :hammer: move item name to implementations --- .../gildedrose/item_helpers/ItemFactory.java | 36 ++++++------ .../com/gildedrose/item_helpers/ItemName.java | 30 ---------- .../com/gildedrose/item_helpers/ItemType.java | 2 + .../com/gildedrose/items/AgedBrieItem.java | 31 ++++++---- .../gildedrose/items/BackstagePassItem.java | 38 +++++++------ .../com/gildedrose/items/ConjuredItem.java | 31 ++++++---- .../com/gildedrose/items/LegendaryItem.java | 38 +++++++------ .../java/com/gildedrose/items/NormalItem.java | 30 ++++++---- .../gildedrose/items/AgedBrieItemTest.java | 36 ++++++------ .../items/BackstagePassItemTest.java | 56 +++++++++---------- .../gildedrose/items/ConjuredItemTest.java | 36 ++++++------ .../gildedrose/items/LegendaryItemTest.java | 43 +++++++------- .../com/gildedrose/items/NormalItemTest.java | 48 ++++++++-------- .../com/gildedrose/main/ItemClassTest.java | 20 +++---- 14 files changed, 238 insertions(+), 237 deletions(-) delete mode 100644 src/main/java/com/gildedrose/item_helpers/ItemName.java diff --git a/src/main/java/com/gildedrose/item_helpers/ItemFactory.java b/src/main/java/com/gildedrose/item_helpers/ItemFactory.java index ab629857..ea1776a8 100644 --- a/src/main/java/com/gildedrose/item_helpers/ItemFactory.java +++ b/src/main/java/com/gildedrose/item_helpers/ItemFactory.java @@ -7,28 +7,28 @@ import com.gildedrose.items.LegendaryItem; import com.gildedrose.items.NormalItem; import com.gildedrose.main.Item; -import static com.gildedrose.item_helpers.ItemName.getItemName; +import java.util.Map; +import java.util.stream.Collectors; +import java.util.stream.Stream; public class ItemFactory { - private ItemFactory() { - } + private ItemFactory() { + } - public static ItemType getItemType(Item item) { - QualityValidator.validateQuality(item); - ItemName itemName = getItemName(item.name); - switch (itemName) { - case AGED_BRIE: - return new AgedBrieItem(item); - case LEGENDARY: - return new LegendaryItem(item); - case BACKSTAGE_PASS: - return new BackstagePassItem(item); - case CONJURED: - return new ConjuredItem(item); - default: - return new NormalItem(item); - } + public static ItemType getItemType(Item item) { + QualityValidator.validateQuality(item); + ItemType itemType = getItems(item).get(item.name); + if (itemType == null) { + itemType = new NormalItem(item); } + return itemType; + } + + private static Map getItems(Item item) { + return Stream.of(new NormalItem(item), new AgedBrieItem(item), new LegendaryItem(item), + new BackstagePassItem(item), new ConjuredItem(item)) + .collect(Collectors.toMap(ItemType::getName, itemType -> itemType)); + } } diff --git a/src/main/java/com/gildedrose/item_helpers/ItemName.java b/src/main/java/com/gildedrose/item_helpers/ItemName.java deleted file mode 100644 index c97790f4..00000000 --- a/src/main/java/com/gildedrose/item_helpers/ItemName.java +++ /dev/null @@ -1,30 +0,0 @@ -package com.gildedrose.item_helpers; - -public enum ItemName { - - LEGENDARY("Sulfuras, Hand of Ragnaros"), - NORMAL("Normal"), - AGED_BRIE("Aged Brie"), - BACKSTAGE_PASS("Backstage passes to a TAFKAL80ETC concert"), - CONJURED("Conjured Mana Cake"); - - private final String name; - - ItemName(String input) { - this.name = input; - } - - @Override - public String toString() { - return name; - } - - public static ItemName getItemName(String input) { - for (ItemName itemName : ItemName.values()) { - if (itemName.name.equalsIgnoreCase(input)) { - return itemName; - } - } - return NORMAL; - } -} diff --git a/src/main/java/com/gildedrose/item_helpers/ItemType.java b/src/main/java/com/gildedrose/item_helpers/ItemType.java index fd889cb4..1b742452 100644 --- a/src/main/java/com/gildedrose/item_helpers/ItemType.java +++ b/src/main/java/com/gildedrose/item_helpers/ItemType.java @@ -2,4 +2,6 @@ package com.gildedrose.item_helpers; public interface ItemType { void updateQuality(); + + String getName(); } diff --git a/src/main/java/com/gildedrose/items/AgedBrieItem.java b/src/main/java/com/gildedrose/items/AgedBrieItem.java index 505f3312..e79c4348 100644 --- a/src/main/java/com/gildedrose/items/AgedBrieItem.java +++ b/src/main/java/com/gildedrose/items/AgedBrieItem.java @@ -6,20 +6,27 @@ import com.gildedrose.main.Item; public class AgedBrieItem implements ItemType { - private final ItemHandler item; + public static final String AGED_BRIE = "Aged Brie"; - public AgedBrieItem(Item item) { - this.item = new ItemHandler(item); - } + private final ItemHandler item; - @Override - public void updateQuality() { - item.decrementSellInDate(); - if (item.beforeSellInDate()) { - item.incrementQuality(); - } else { - item.incrementQualityBy2(); - } + public AgedBrieItem(Item item) { + this.item = new ItemHandler(item); + } + + @Override + public void updateQuality() { + item.decrementSellInDate(); + if (item.beforeSellInDate()) { + item.incrementQuality(); + } else { + item.incrementQualityBy2(); } + } + + @Override + public String getName() { + return AGED_BRIE; + } } diff --git a/src/main/java/com/gildedrose/items/BackstagePassItem.java b/src/main/java/com/gildedrose/items/BackstagePassItem.java index afe2d82e..82e0efef 100644 --- a/src/main/java/com/gildedrose/items/BackstagePassItem.java +++ b/src/main/java/com/gildedrose/items/BackstagePassItem.java @@ -6,24 +6,30 @@ import com.gildedrose.main.Item; public class BackstagePassItem implements ItemType { - private final ItemHandler item; + public static final String BACKSTAGE_PASS = "Backstage passes to a TAFKAL80ETC concert"; + private final ItemHandler item; - public BackstagePassItem(Item item) { - this.item = new ItemHandler(item); - } + public BackstagePassItem(Item item) { + this.item = new ItemHandler(item); + } - @Override - public void updateQuality() { - item.decrementSellInDate(); - if (item.moreThan10DaysToSellIn()) { - item.incrementQuality(); - } else if (item.lessThan10DaysToSellIn()) { - item.incrementQualityBy2(); - } else if (item.lessThan5DaysToSellIn()) { - item.incrementQualityBy3(); - } else { - item.makeQualityZero(); - } + @Override + public void updateQuality() { + item.decrementSellInDate(); + if (item.moreThan10DaysToSellIn()) { + item.incrementQuality(); + } else if (item.lessThan10DaysToSellIn()) { + item.incrementQualityBy2(); + } else if (item.lessThan5DaysToSellIn()) { + item.incrementQualityBy3(); + } else { + item.makeQualityZero(); } + } + + @Override + public String getName() { + return BACKSTAGE_PASS; + } } diff --git a/src/main/java/com/gildedrose/items/ConjuredItem.java b/src/main/java/com/gildedrose/items/ConjuredItem.java index 064c7641..47f11b2b 100644 --- a/src/main/java/com/gildedrose/items/ConjuredItem.java +++ b/src/main/java/com/gildedrose/items/ConjuredItem.java @@ -6,20 +6,27 @@ import com.gildedrose.main.Item; public class ConjuredItem implements ItemType { - private final ItemHandler item; + public static final String CONJURED = "Conjured Mana Cake"; - public ConjuredItem(Item item) { - this.item = new ItemHandler(item); - } + private final ItemHandler item; - @Override - public void updateQuality() { - item.decrementSellInDate(); - if (item.beforeSellInDate()) { - item.decrementQualityBy2(); - } else { - item.decrementQualityBy4(); - } + public ConjuredItem(Item item) { + this.item = new ItemHandler(item); + } + + @Override + public void updateQuality() { + item.decrementSellInDate(); + if (item.beforeSellInDate()) { + item.decrementQualityBy2(); + } else { + item.decrementQualityBy4(); } + } + + @Override + public String getName() { + return CONJURED; + } } diff --git a/src/main/java/com/gildedrose/items/LegendaryItem.java b/src/main/java/com/gildedrose/items/LegendaryItem.java index db7550b4..e8a586b5 100644 --- a/src/main/java/com/gildedrose/items/LegendaryItem.java +++ b/src/main/java/com/gildedrose/items/LegendaryItem.java @@ -4,29 +4,33 @@ import com.gildedrose.item_helpers.ItemHandler; import com.gildedrose.item_helpers.ItemType; import com.gildedrose.main.Item; -import static com.gildedrose.item_helpers.ItemName.LEGENDARY; - public class LegendaryItem implements ItemType { - public static final int LEGENDARY_ITEM_QUALITY = 80; + public static final int LEGENDARY_ITEM_QUALITY = 80; + public static final String LEGENDARY = "Sulfuras, Hand of Ragnaros"; - private final ItemHandler item; + private final ItemHandler item; - public LegendaryItem(Item item) { - this.item = new ItemHandler(item); - } + public LegendaryItem(Item item) { + this.item = new ItemHandler(item); + } - @Override - public void updateQuality() { - item.decrementSellInDate(); - } + @Override + public void updateQuality() { + item.decrementSellInDate(); + } - public static boolean isLegendary(Item item) { - return item.name.equals(LEGENDARY.toString()); - } + @Override + public String getName() { + return LEGENDARY; + } - public static boolean isNotLegendary(Item item) { - return !item.name.equals(LEGENDARY.toString()); - } + public static boolean isLegendary(Item item) { + return item.name.equals(LEGENDARY); + } + + public static boolean isNotLegendary(Item item) { + return !item.name.equals(LEGENDARY); + } } diff --git a/src/main/java/com/gildedrose/items/NormalItem.java b/src/main/java/com/gildedrose/items/NormalItem.java index cb4316fc..048010b0 100644 --- a/src/main/java/com/gildedrose/items/NormalItem.java +++ b/src/main/java/com/gildedrose/items/NormalItem.java @@ -6,20 +6,26 @@ import com.gildedrose.main.Item; public class NormalItem implements ItemType { - private final ItemHandler item; + public static final String NORMAL = "Normal"; + private final ItemHandler item; - public NormalItem(Item item) { - this.item = new ItemHandler(item); - } + public NormalItem(Item item) { + this.item = new ItemHandler(item); + } - @Override - public void updateQuality() { - item.decrementSellInDate(); - if (item.beforeSellInDate()) { - item.decrementQuality(); - } else { - item.decrementQualityBy2(); - } + @Override + public void updateQuality() { + item.decrementSellInDate(); + if (item.beforeSellInDate()) { + item.decrementQuality(); + } else { + item.decrementQualityBy2(); } + } + + @Override + public String getName() { + return NORMAL; + } } diff --git a/src/test/java/com/gildedrose/items/AgedBrieItemTest.java b/src/test/java/com/gildedrose/items/AgedBrieItemTest.java index 083096f2..b950046f 100644 --- a/src/test/java/com/gildedrose/items/AgedBrieItemTest.java +++ b/src/test/java/com/gildedrose/items/AgedBrieItemTest.java @@ -8,30 +8,30 @@ import org.junit.jupiter.api.TestMethodOrder; import static com.gildedrose.helper.TestHelper.testItem; import static com.gildedrose.helper.TestHelper.testItemException; -import static com.gildedrose.item_helpers.ItemName.AGED_BRIE; +import static com.gildedrose.items.AgedBrieItem.AGED_BRIE; @TestMethodOrder(OrderAnnotation.class) class AgedBrieItemTest { - private final Item item = new Item(AGED_BRIE.toString(), 5, 20); - private final Item itemError = new Item(AGED_BRIE.toString(), 10, -5); + private final Item item = new Item(AGED_BRIE, 5, 20); + private final Item itemError = new Item(AGED_BRIE, 10, -5); - @Test - @Order(1) - void incrementQualityByOneSuccess() { - testItem(item, 2, 3, 22); - } + @Test + @Order(1) + void incrementQualityByOneSuccess() { + testItem(item, 2, 3, 22); + } - @Test - @Order(2) - void incrementQualityByTwoSuccess() { - testItem(item, 7, -2, 29); - } + @Test + @Order(2) + void incrementQualityByTwoSuccess() { + testItem(item, 7, -2, 29); + } - @Test - @Order(3) - void negativeQualityFail() { - testItemException(itemError); - } + @Test + @Order(3) + void negativeQualityFail() { + testItemException(itemError); + } } diff --git a/src/test/java/com/gildedrose/items/BackstagePassItemTest.java b/src/test/java/com/gildedrose/items/BackstagePassItemTest.java index bdb7f280..cd4f59d9 100644 --- a/src/test/java/com/gildedrose/items/BackstagePassItemTest.java +++ b/src/test/java/com/gildedrose/items/BackstagePassItemTest.java @@ -8,42 +8,42 @@ import org.junit.jupiter.api.TestMethodOrder; import static com.gildedrose.helper.TestHelper.testItem; import static com.gildedrose.helper.TestHelper.testItemException; -import static com.gildedrose.item_helpers.ItemName.BACKSTAGE_PASS; +import static com.gildedrose.items.BackstagePassItem.BACKSTAGE_PASS; @TestMethodOrder(OrderAnnotation.class) class BackstagePassItemTest { - private final Item item = new Item(BACKSTAGE_PASS.toString(), 15, 20); - private final Item itemError = new Item(BACKSTAGE_PASS.toString(), 10, -5); + private final Item item = new Item(BACKSTAGE_PASS, 15, 20); + private final Item itemError = new Item(BACKSTAGE_PASS, 10, -5); - @Test - @Order(1) - void testIncrementQualityByOneSuccess() { - testItem(item, 5, 10, 25); - } + @Test + @Order(1) + void testIncrementQualityByOneSuccess() { + testItem(item, 5, 10, 25); + } - @Test - @Order(2) - void testIncrementQualityByTwoSuccess() { - testItem(item, 10, 5, 35); - } + @Test + @Order(2) + void testIncrementQualityByTwoSuccess() { + testItem(item, 10, 5, 35); + } - @Test - @Order(3) - void testIncrementQualityByThreeSuccess() { - testItem(item, 15, 0, 50); - } + @Test + @Order(3) + void testIncrementQualityByThreeSuccess() { + testItem(item, 15, 0, 50); + } - @Test - @Order(4) - void testQualityZeroSuccess() { - testItem(item, 16, -1, 0); - } + @Test + @Order(4) + void testQualityZeroSuccess() { + testItem(item, 16, -1, 0); + } - @Test - @Order(2) - void negativeQualityFail() { - testItemException(itemError); - } + @Test + @Order(2) + void negativeQualityFail() { + testItemException(itemError); + } } diff --git a/src/test/java/com/gildedrose/items/ConjuredItemTest.java b/src/test/java/com/gildedrose/items/ConjuredItemTest.java index 54f6d1b0..8cf64a97 100644 --- a/src/test/java/com/gildedrose/items/ConjuredItemTest.java +++ b/src/test/java/com/gildedrose/items/ConjuredItemTest.java @@ -8,29 +8,29 @@ import org.junit.jupiter.api.TestMethodOrder; import static com.gildedrose.helper.TestHelper.testItem; import static com.gildedrose.helper.TestHelper.testItemException; -import static com.gildedrose.item_helpers.ItemName.CONJURED; +import static com.gildedrose.items.ConjuredItem.CONJURED; @TestMethodOrder(OrderAnnotation.class) class ConjuredItemTest { - private final Item item = new Item(CONJURED.toString(), 5, 20); - private final Item itemError = new Item(CONJURED.toString(), 10, -5); + private final Item item = new Item(CONJURED, 5, 20); + private final Item itemError = new Item(CONJURED, 10, -5); - @Test - @Order(1) - void decrementQualityByTwoSuccess() { - testItem(item, 2, 3, 16); - } + @Test + @Order(1) + void decrementQualityByTwoSuccess() { + testItem(item, 2, 3, 16); + } - @Test - @Order(2) - void decrementQualityByFourSuccess() { - testItem(item, 10, -5, 0); - } + @Test + @Order(2) + void decrementQualityByFourSuccess() { + testItem(item, 10, -5, 0); + } - @Test - @Order(3) - void negativeQualityFail() { - testItemException(itemError); - } + @Test + @Order(3) + void negativeQualityFail() { + testItemException(itemError); + } } diff --git a/src/test/java/com/gildedrose/items/LegendaryItemTest.java b/src/test/java/com/gildedrose/items/LegendaryItemTest.java index 3c688ad9..4168cfb2 100644 --- a/src/test/java/com/gildedrose/items/LegendaryItemTest.java +++ b/src/test/java/com/gildedrose/items/LegendaryItemTest.java @@ -9,7 +9,7 @@ import org.junit.jupiter.api.TestMethodOrder; import static com.gildedrose.helper.TestHelper.testItem; import static com.gildedrose.item_helpers.QualityValidator.NOT_LEGENDARY_ITEM_ERROR_MESSAGE; -import static com.gildedrose.item_helpers.ItemName.LEGENDARY; +import static com.gildedrose.items.LegendaryItem.LEGENDARY; import static com.gildedrose.items.LegendaryItem.LEGENDARY_ITEM_QUALITY; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -17,29 +17,28 @@ import static org.junit.jupiter.api.Assertions.assertTrue; @TestMethodOrder(OrderAnnotation.class) class LegendaryItemTest { - private final Item item = new Item(LEGENDARY.toString(), 5, 80); - private final Item fakeLegendaryItem = new Item(LEGENDARY.toString(), 5, 75); - private final Item itemError = new Item(LEGENDARY.toString(), 10, -5); + private final Item item = new Item(LEGENDARY, 5, 80); + private final Item fakeLegendaryItem = new Item(LEGENDARY, 5, 75); - @Test - @Order(1) - void getLegendaryQualityBeforeSellInDateSuccess() { - testItem(item, 2, 3, LEGENDARY_ITEM_QUALITY); - } + @Test + @Order(1) + void getLegendaryQualityBeforeSellInDateSuccess() { + testItem(item, 2, 3, LEGENDARY_ITEM_QUALITY); + } - @Test - @Order(2) - void getLegendaryQualityPassSellInDateSuccess() { - testItem(item, 10, -5, LEGENDARY_ITEM_QUALITY); - } + @Test + @Order(2) + void getLegendaryQualityPassSellInDateSuccess() { + testItem(item, 10, -5, LEGENDARY_ITEM_QUALITY); + } - @Test - @Order(3) - void testFakeLegendaryItemExceptionFail() { - GildedRose gildedRose = new GildedRose(fakeLegendaryItem); - Exception exception = assertThrows(IllegalArgumentException.class, gildedRose::updateQuality); - String actualMessage = exception.getMessage(); - assertTrue(actualMessage.contains(NOT_LEGENDARY_ITEM_ERROR_MESSAGE)); - } + @Test + @Order(3) + void testFakeLegendaryItemExceptionFail() { + GildedRose gildedRose = new GildedRose(fakeLegendaryItem); + Exception exception = assertThrows(IllegalArgumentException.class, gildedRose::updateQuality); + String actualMessage = exception.getMessage(); + assertTrue(actualMessage.contains(NOT_LEGENDARY_ITEM_ERROR_MESSAGE)); + } } diff --git a/src/test/java/com/gildedrose/items/NormalItemTest.java b/src/test/java/com/gildedrose/items/NormalItemTest.java index 72be601b..d9230f51 100644 --- a/src/test/java/com/gildedrose/items/NormalItemTest.java +++ b/src/test/java/com/gildedrose/items/NormalItemTest.java @@ -7,36 +7,36 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; import static com.gildedrose.helper.TestHelper.*; -import static com.gildedrose.item_helpers.ItemName.NORMAL; +import static com.gildedrose.items.NormalItem.NORMAL; @TestMethodOrder(OrderAnnotation.class) class NormalItemTest { - private final Item item = new Item(NORMAL.toString(), 5, 20); - private final Item itemNegativeQuality = new Item(NORMAL.toString(), 10, -5); - private final Item itemAboveLimitQuality = new Item(NORMAL.toString(), 10, 60); + private final Item item = new Item(NORMAL, 5, 20); + private final Item itemNegativeQuality = new Item(NORMAL, 10, -5); + private final Item itemAboveLimitQuality = new Item(NORMAL, 10, 60); - @Test - @Order(1) - void decrementQualityByOneSuccess() { - testItem(item, 2, 3, 18); - } + @Test + @Order(1) + void decrementQualityByOneSuccess() { + testItem(item, 2, 3, 18); + } - @Test - @Order(2) - void decrementQualityByTwoSuccess() { - testItem(item, 10, -5, 5); - } + @Test + @Order(2) + void decrementQualityByTwoSuccess() { + testItem(item, 10, -5, 5); + } - @Test - @Order(3) - void negativeQualityFail() { - testItemException(itemNegativeQuality); - } + @Test + @Order(3) + void negativeQualityFail() { + testItemException(itemNegativeQuality); + } - @Test - @Order(4) - void QualityAboveLimitFail() { - testItemQualityAboveLimitException(itemAboveLimitQuality); - } + @Test + @Order(4) + void QualityAboveLimitFail() { + testItemQualityAboveLimitException(itemAboveLimitQuality); + } } diff --git a/src/test/java/com/gildedrose/main/ItemClassTest.java b/src/test/java/com/gildedrose/main/ItemClassTest.java index 0722fc0c..6ae310f2 100644 --- a/src/test/java/com/gildedrose/main/ItemClassTest.java +++ b/src/test/java/com/gildedrose/main/ItemClassTest.java @@ -5,21 +5,21 @@ import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; -import static com.gildedrose.item_helpers.ItemName.AGED_BRIE; +import static com.gildedrose.items.AgedBrieItem.AGED_BRIE; import static org.junit.jupiter.api.Assertions.assertEquals; @TestMethodOrder(OrderAnnotation.class) class ItemClassTest { - private final Item item = new Item(AGED_BRIE.toString(), 5, 20); + private final Item item = new Item(AGED_BRIE, 5, 20); - @Test - @Order(1) - void testItemSuccess() { - assertEquals(AGED_BRIE.toString(), item.name); - assertEquals(5, item.sellIn); - assertEquals(20, item.quality); - assertEquals("Aged Brie, 5, 20", item.toString()); - } + @Test + @Order(1) + void testItemSuccess() { + assertEquals(AGED_BRIE, item.name); + assertEquals(5, item.sellIn); + assertEquals(20, item.quality); + assertEquals("Aged Brie, 5, 20", item.toString()); + } }