From d9d0bb2060d31bd6b7bdb08d4289e523d123bc9a Mon Sep 17 00:00:00 2001 From: villanibe Date: Sun, 29 Jun 2025 21:35:48 +0200 Subject: [PATCH] refactor conditional to polymorphism - AgedBrie --- .../main/java/com/gildedrose/GildedRose.java | 47 +++++------- .../application/agedbrie/AgedBrieRule.java | 27 +++++++ .../gildedrose/core/InventoryRuleEngine.java | 22 ++++++ .../rules/UpdateInventoryTemplateRule.java | 52 +++++++++++++ .../gildedrose/{ => domain}/item/Item.java | 2 +- .../gildedrose/domain/item/ItemAdapter.java | 26 +++++++ .../domain/item/ItemAdapterSimpleFactory.java | 32 ++++++++ .../com/gildedrose/domain/item/ItemType.java | 29 +++++++ .../java/com/gildedrose/AgedBrieTest.java | 25 ------ .../java/com/gildedrose/BackStageTest.java | 2 +- .../java/com/gildedrose/GildedRoseTest.java | 2 +- .../java/com/gildedrose/SulfurasTest.java | 4 +- .../aggedbrie/AgedBrieRuleTest.java | 42 ++++++++++ .../core/InventoryRuleEngineTest.java | 23 ++++++ .../UpdateInventoryTemplateRuleTest.java | 76 +++++++++++++++++++ .../item/ItemAdapterSimpleFactoryTest.java | 59 ++++++++++++++ .../gildedrose/domain/item/ItemTypeTest.java | 47 ++++++++++++ 17 files changed, 460 insertions(+), 57 deletions(-) create mode 100644 Java/src/main/java/com/gildedrose/application/agedbrie/AgedBrieRule.java create mode 100644 Java/src/main/java/com/gildedrose/core/InventoryRuleEngine.java create mode 100644 Java/src/main/java/com/gildedrose/core/rules/UpdateInventoryTemplateRule.java rename Java/src/main/java/com/gildedrose/{ => domain}/item/Item.java (91%) create mode 100644 Java/src/main/java/com/gildedrose/domain/item/ItemAdapter.java create mode 100644 Java/src/main/java/com/gildedrose/domain/item/ItemAdapterSimpleFactory.java create mode 100644 Java/src/main/java/com/gildedrose/domain/item/ItemType.java delete mode 100644 Java/src/test/java/com/gildedrose/AgedBrieTest.java create mode 100644 Java/src/test/java/com/gildedrose/application/aggedbrie/AgedBrieRuleTest.java create mode 100644 Java/src/test/java/com/gildedrose/core/InventoryRuleEngineTest.java create mode 100644 Java/src/test/java/com/gildedrose/core/rules/UpdateInventoryTemplateRuleTest.java create mode 100644 Java/src/test/java/com/gildedrose/domain/item/ItemAdapterSimpleFactoryTest.java create mode 100644 Java/src/test/java/com/gildedrose/domain/item/ItemTypeTest.java diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index bf0e1e92..41e61815 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,6 +1,9 @@ package com.gildedrose; -import com.gildedrose.item.Item; +import com.gildedrose.core.InventoryRuleEngine; +import com.gildedrose.domain.item.Item; +import com.gildedrose.domain.item.ItemAdapter; +import com.gildedrose.domain.item.ItemAdapterSimpleFactory; class GildedRose { @@ -28,48 +31,33 @@ class GildedRose { } private void doUpdateQuality(Item item) { + boolean isAgedBrie = item.name.equals(AGED_BRIE); boolean isBackstagePasses = item.name.equals(BACKSTAGE_PASSES); boolean isSulfuras = item.name.equals(SULFURAS); + ItemAdapter itemAdapter = ItemAdapterSimpleFactory.createItemAdapter(item); if (isAgedBrie) { - // processing quality - if (item.quality < MAXIMUM_QUALITY) { - increaseQuality(item); - } - - // processing sell date - decreaseDay(item); - - // processing sell date - if (isExpired(item)) { - if (item.quality < MAXIMUM_QUALITY) { - increaseQuality(item); - } - } + InventoryRuleEngine.processUpdateInventoryRule(itemAdapter); } else if (isBackstagePasses) { - // processing quality - if (item.quality < MAXIMUM_QUALITY) { + if (shouldIncreaseQuality(item)) { increaseQuality(item); - // processing sell date if (item.sellIn < SELL_IN_DAY11) { - if (item.quality < MAXIMUM_QUALITY) { + if (shouldIncreaseQuality(item)) { increaseQuality(item); } } if (item.sellIn < SELL_IN_DAY6) { - if (item.quality < MAXIMUM_QUALITY) { + if (shouldIncreaseQuality(item)) { increaseQuality(item); } } } - // processing sell date decreaseDay(item); - // processing sell date if (isExpired(item)) { item.quality = MINIMUM_QUALITY; } @@ -78,23 +66,28 @@ class GildedRose { } else { //standard item - if (item.quality > MINIMUM_QUALITY) { + if (shouldDecreaseQuality(item)) { decreaseQuality(item); } - // processing sell date decreaseDay(item); - // processing sell date if (isExpired(item)) { - // processing quality - if (item.quality > MINIMUM_QUALITY) { + if (shouldDecreaseQuality(item)) { decreaseQuality(item); } } } } + private boolean shouldDecreaseQuality(Item item) { + return item.quality > MINIMUM_QUALITY; + } + + private boolean shouldIncreaseQuality(Item item) { + return item.quality < MAXIMUM_QUALITY; + } + private void decreaseDay(Item item) { item.sellIn = item.sellIn - 1; } diff --git a/Java/src/main/java/com/gildedrose/application/agedbrie/AgedBrieRule.java b/Java/src/main/java/com/gildedrose/application/agedbrie/AgedBrieRule.java new file mode 100644 index 00000000..a1299f40 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/application/agedbrie/AgedBrieRule.java @@ -0,0 +1,27 @@ +package com.gildedrose.application.agedbrie; + +import com.gildedrose.core.rules.UpdateInventoryTemplateRule; +import com.gildedrose.domain.item.ItemAdapter; + +public class AgedBrieRule extends UpdateInventoryTemplateRule { + + @Override + protected boolean canSubtractSellIn(final ItemAdapter itemAdapter) { + return true; + } + + @Override + protected int getQualityFactor(final boolean isExpired, final ItemAdapter itemAdapter) { + return isExpired ? 2 : 1; + } + + @Override + protected boolean canIncreaseQuality(final ItemAdapter itemAdapter) { + return true; + } + + @Override + protected boolean canDecreaseQuality(final ItemAdapter itemAdapter) { + return false; + } +} diff --git a/Java/src/main/java/com/gildedrose/core/InventoryRuleEngine.java b/Java/src/main/java/com/gildedrose/core/InventoryRuleEngine.java new file mode 100644 index 00000000..925b4e96 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/core/InventoryRuleEngine.java @@ -0,0 +1,22 @@ +package com.gildedrose.core; + +import com.gildedrose.application.agedbrie.AgedBrieRule; +import com.gildedrose.core.rules.UpdateInventoryTemplateRule; +import com.gildedrose.domain.item.ItemAdapter; +import com.gildedrose.domain.item.ItemType; + +import java.util.HashMap; +import java.util.Map; + +public class InventoryRuleEngine { + + private static final Map updateInventoryRules = new HashMap<>(){{ + put(ItemType.AGEG_BRIE, new AgedBrieRule()); + }}; + + public static void processUpdateInventoryRule(ItemAdapter itemAdapter) { + if (null != updateInventoryRules.get(itemAdapter.getItemType())) { + updateInventoryRules.get(itemAdapter.getItemType()).processItem(itemAdapter); + } + } +} diff --git a/Java/src/main/java/com/gildedrose/core/rules/UpdateInventoryTemplateRule.java b/Java/src/main/java/com/gildedrose/core/rules/UpdateInventoryTemplateRule.java new file mode 100644 index 00000000..d22257a1 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/core/rules/UpdateInventoryTemplateRule.java @@ -0,0 +1,52 @@ +package com.gildedrose.core.rules; + +import com.gildedrose.domain.item.ItemAdapter; + +public abstract class UpdateInventoryTemplateRule { + + final int MINIMUM_QUALITY = 0; + final int MAXIMUM_QUALITY = 50; + final int SELL_IN_EXPIRED = 0; + final int SELL_IN_UNIT = 1; + + public final void processItem(final ItemAdapter itemAdapter) { + + if (canSubtractSellIn(itemAdapter)) { + subtractSellIn(itemAdapter); + } + + boolean isExpired = isExpired(itemAdapter); + int qualityFactor = getQualityFactor(isExpired, itemAdapter); + + if (canIncreaseQuality(itemAdapter)) { + increaseQuality(itemAdapter, qualityFactor); + } + + if (canDecreaseQuality(itemAdapter)) { + decreaseQuality(itemAdapter, qualityFactor); + } + } + + protected abstract boolean canSubtractSellIn(final ItemAdapter itemAdapter); + protected abstract int getQualityFactor(final boolean isExpired, final ItemAdapter itemAdapter); + protected abstract boolean canIncreaseQuality(final ItemAdapter itemAdapter); + protected abstract boolean canDecreaseQuality(final ItemAdapter itemAdapter); + + private void subtractSellIn(final ItemAdapter itemAdapter) { + itemAdapter.getItem().sellIn -= SELL_IN_UNIT; + } + + private boolean isExpired(final ItemAdapter itemAdapter) { + return itemAdapter.getItem().sellIn < SELL_IN_EXPIRED; + } + + private void increaseQuality(final ItemAdapter itemAdapter, final int qualityFactor) { + int increasedQuality = itemAdapter.getItem().quality + qualityFactor; + itemAdapter.getItem().quality = Math.min(increasedQuality, MAXIMUM_QUALITY); + } + + private void decreaseQuality(final ItemAdapter itemAdapter, final int qualityFactor) { + int decreasedQuality = itemAdapter.getItem().quality - qualityFactor; + itemAdapter.getItem().quality = Math.min(decreasedQuality, MINIMUM_QUALITY); + } +} diff --git a/Java/src/main/java/com/gildedrose/item/Item.java b/Java/src/main/java/com/gildedrose/domain/item/Item.java similarity index 91% rename from Java/src/main/java/com/gildedrose/item/Item.java rename to Java/src/main/java/com/gildedrose/domain/item/Item.java index 3f219306..fa575408 100644 --- a/Java/src/main/java/com/gildedrose/item/Item.java +++ b/Java/src/main/java/com/gildedrose/domain/item/Item.java @@ -1,4 +1,4 @@ -package com.gildedrose.item; +package com.gildedrose.domain.item; public class Item { diff --git a/Java/src/main/java/com/gildedrose/domain/item/ItemAdapter.java b/Java/src/main/java/com/gildedrose/domain/item/ItemAdapter.java new file mode 100644 index 00000000..6241b6b1 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/domain/item/ItemAdapter.java @@ -0,0 +1,26 @@ +package com.gildedrose.domain.item; + +public class ItemAdapter { + private final Item item; + private final ItemType itemType; + + public ItemAdapter(ItemType itemType, Item item) { + this.itemType = itemType; + this.item = item; + } + + public Item getItem() { + return item; + } + + public ItemType getItemType() { + return itemType; + } + + @Override + public String toString() { + return item.toString(); + } + + public String toStringFull() { return this.toString() + ", " + itemType.getName(); } +} diff --git a/Java/src/main/java/com/gildedrose/domain/item/ItemAdapterSimpleFactory.java b/Java/src/main/java/com/gildedrose/domain/item/ItemAdapterSimpleFactory.java new file mode 100644 index 00000000..5bbb1d48 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/domain/item/ItemAdapterSimpleFactory.java @@ -0,0 +1,32 @@ +package com.gildedrose.domain.item; + +public final class ItemAdapterSimpleFactory { + + static final int SULFURAS_DEFAULT_QUALITY = 80; + + public static ItemAdapter createItemAdapter(Item item) { + ItemType itemType = ItemType.findByValue(item.name); + return switch (itemType) { + case AGEG_BRIE -> createAgedBrie(item); + case BACKSTAGE_PASSES -> createBackStagePasses(item); + case SULFURAS -> createSulfuras(item); + default -> createStandardItem(item); + }; + } + + private static ItemAdapter createAgedBrie(Item item) { + return new ItemAdapter(ItemType.AGEG_BRIE, item); + } + + private static ItemAdapter createBackStagePasses(Item item) { + return new ItemAdapter(ItemType.BACKSTAGE_PASSES, item); + } + + private static ItemAdapter createSulfuras(Item item) { + return new ItemAdapter(ItemType.SULFURAS, new Item(item.name, item.sellIn, SULFURAS_DEFAULT_QUALITY)); + } + + private static ItemAdapter createStandardItem(Item item) { + return new ItemAdapter(ItemType.STANDARD, item); + } +} diff --git a/Java/src/main/java/com/gildedrose/domain/item/ItemType.java b/Java/src/main/java/com/gildedrose/domain/item/ItemType.java new file mode 100644 index 00000000..727bd303 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/domain/item/ItemType.java @@ -0,0 +1,29 @@ +package com.gildedrose.domain.item; + +import java.util.Arrays; + +public enum ItemType { + + STANDARD("Standard item"), + AGEG_BRIE("Aged Brie"), + BACKSTAGE_PASSES("Backstage passes to a TAFKAL80ETC concert"), + SULFURAS ("Sulfuras, Hand of Ragnaros") + ; + + private final String name; + + ItemType(String name) { + this.name = name; + } + + public static ItemType findByValue(String itemName) { + return Arrays.stream(values()) + .filter(itemType -> itemType.getName().equalsIgnoreCase(itemName)) + .findFirst() + .orElse(STANDARD); + } + + public String getName(){ + return this.name; + } +} diff --git a/Java/src/test/java/com/gildedrose/AgedBrieTest.java b/Java/src/test/java/com/gildedrose/AgedBrieTest.java deleted file mode 100644 index 69e5e680..00000000 --- a/Java/src/test/java/com/gildedrose/AgedBrieTest.java +++ /dev/null @@ -1,25 +0,0 @@ -package com.gildedrose; - -import com.gildedrose.item.Item; -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - -class AgedBrieTest { - - @Test - void agedBrieQualityIncreasesByOne() { - //given - Item agedBrie = new Item("Aged Brie", 5, 2); - Item[] items = new Item[] {agedBrie}; - - //when - GildedRose app = new GildedRose(items); - app.updateQuality(); - - //then - assertEquals(4, app.items[0].sellIn); - assertEquals(3, app.items[0].quality); - } - -} diff --git a/Java/src/test/java/com/gildedrose/BackStageTest.java b/Java/src/test/java/com/gildedrose/BackStageTest.java index 4fd07cad..5354bdb3 100644 --- a/Java/src/test/java/com/gildedrose/BackStageTest.java +++ b/Java/src/test/java/com/gildedrose/BackStageTest.java @@ -1,6 +1,6 @@ package com.gildedrose; -import com.gildedrose.item.Item; +import com.gildedrose.domain.item.Item; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index cf8ef9f8..b8527e05 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -1,6 +1,6 @@ package com.gildedrose; -import com.gildedrose.item.Item; +import com.gildedrose.domain.item.Item; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; diff --git a/Java/src/test/java/com/gildedrose/SulfurasTest.java b/Java/src/test/java/com/gildedrose/SulfurasTest.java index 60fc5b13..98a5472f 100644 --- a/Java/src/test/java/com/gildedrose/SulfurasTest.java +++ b/Java/src/test/java/com/gildedrose/SulfurasTest.java @@ -1,6 +1,6 @@ package com.gildedrose; -import com.gildedrose.item.Item; +import com.gildedrose.domain.item.Item; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -10,7 +10,7 @@ class SulfurasTest { @Test void sulfurasNeverChanges() { //given - Item sulfuras = new Item("Sulfuras, Hand of Ragnaros", 0, 80); + Item sulfuras = new Item("Sulfuras, Hand of Ragnaros", -1, 80); Item[] items = new Item[] {sulfuras}; //when diff --git a/Java/src/test/java/com/gildedrose/application/aggedbrie/AgedBrieRuleTest.java b/Java/src/test/java/com/gildedrose/application/aggedbrie/AgedBrieRuleTest.java new file mode 100644 index 00000000..e8ee68ef --- /dev/null +++ b/Java/src/test/java/com/gildedrose/application/aggedbrie/AgedBrieRuleTest.java @@ -0,0 +1,42 @@ +package com.gildedrose.application.aggedbrie; + +import com.gildedrose.application.agedbrie.AgedBrieRule; +import com.gildedrose.domain.item.Item; +import com.gildedrose.domain.item.ItemAdapter; +import com.gildedrose.domain.item.ItemType; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class AgedBrieRuleTest { + + @Test + void agedBrieQualityIncreasesByOne() { + //given + Item agedBrie = new Item("Aged Brie", 5, 2); + ItemAdapter agedBrieAdapter = new ItemAdapter(ItemType.AGEG_BRIE, agedBrie); + AgedBrieRule agedBrieRule = new AgedBrieRule(); + + //when + agedBrieRule.processItem(agedBrieAdapter); + + //then + assertEquals(4, agedBrieAdapter.getItem().sellIn); + assertEquals(3, agedBrieAdapter.getItem().quality); + } + + @Test + void agedBrieQualityIncreasesByTwoWhenExpired() { + //given + Item agedBrie = new Item("Aged Brie", 0, 2); + ItemAdapter agedBrieAdapter = new ItemAdapter(ItemType.AGEG_BRIE, agedBrie); + AgedBrieRule agedBrieRule = new AgedBrieRule(); + + //when + agedBrieRule.processItem(agedBrieAdapter); + + //then + assertEquals(-1, agedBrieAdapter.getItem().sellIn); + assertEquals(4, agedBrieAdapter.getItem().quality); + } +} diff --git a/Java/src/test/java/com/gildedrose/core/InventoryRuleEngineTest.java b/Java/src/test/java/com/gildedrose/core/InventoryRuleEngineTest.java new file mode 100644 index 00000000..77281000 --- /dev/null +++ b/Java/src/test/java/com/gildedrose/core/InventoryRuleEngineTest.java @@ -0,0 +1,23 @@ +package com.gildedrose.core; + +import com.gildedrose.domain.item.Item; +import com.gildedrose.domain.item.ItemAdapter; +import com.gildedrose.domain.item.ItemType; +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class InventoryRuleEngineTest { + + @Test + void shouldProcessAgedBrieRule() { + //given + ItemAdapter itemAdapter = new ItemAdapter(ItemType.AGEG_BRIE, new Item("Aged Brie", 3, 0)); + + //when + InventoryRuleEngine.processUpdateInventoryRule(itemAdapter); + + //then + assertEquals(2, itemAdapter.getItem().sellIn); + assertEquals(1, itemAdapter.getItem().quality); + } +} diff --git a/Java/src/test/java/com/gildedrose/core/rules/UpdateInventoryTemplateRuleTest.java b/Java/src/test/java/com/gildedrose/core/rules/UpdateInventoryTemplateRuleTest.java new file mode 100644 index 00000000..56d00dab --- /dev/null +++ b/Java/src/test/java/com/gildedrose/core/rules/UpdateInventoryTemplateRuleTest.java @@ -0,0 +1,76 @@ +package com.gildedrose.core.rules; + +import com.gildedrose.domain.item.Item; +import com.gildedrose.domain.item.ItemAdapter; +import com.gildedrose.domain.item.ItemType; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class UpdateInventoryTemplateRuleTest { + + @Test + void processItemCorrectly() { + //given + UpdateInventoryTemplateRule testRule = createTestRule(true, true, true); + ItemAdapter itemAdapter = new ItemAdapter(ItemType.AGEG_BRIE, new Item("Just a test item", 3, 0)); + //when + testRule.processItem(itemAdapter); + + //then + assertEquals(2, itemAdapter.getItem().sellIn); + assertEquals(0, itemAdapter.getItem().quality); + } + + @Test + void processItemCorrectlyWhenIsExpired() { + //given + UpdateInventoryTemplateRule testRule = createTestRule(true, true, true); + ItemAdapter itemAdapter = new ItemAdapter(ItemType.AGEG_BRIE, new Item("Just a test item", 0, 2)); + //when + testRule.processItem(itemAdapter); + + //then + assertEquals(-1, itemAdapter.getItem().sellIn); + assertEquals(0, itemAdapter.getItem().quality); + } + + @Test + void processItemCorrectlyWhenNoChangesAreAllowed() { + //given + UpdateInventoryTemplateRule testRule = createTestRule(false, false, false); + ItemAdapter itemAdapter = new ItemAdapter(ItemType.AGEG_BRIE, new Item("Just a test item", 10, 2)); + //when + testRule.processItem(itemAdapter); + + //then + assertEquals(10, itemAdapter.getItem().sellIn); + assertEquals(2, itemAdapter.getItem().quality); + } + + private static UpdateInventoryTemplateRule createTestRule(boolean canSubtractSellIn, + boolean canIncreaseQuality, + boolean canDecreaseQuality) { + return new UpdateInventoryTemplateRule() { + @Override + protected boolean canSubtractSellIn(ItemAdapter itemAdapter) { + return canSubtractSellIn; + } + + @Override + protected int getQualityFactor(boolean isExpired, ItemAdapter itemAdapter) { + return 3; + } + + @Override + protected boolean canIncreaseQuality(ItemAdapter itemAdapter) { + return canIncreaseQuality; + } + + @Override + protected boolean canDecreaseQuality(ItemAdapter itemAdapter) { + return canDecreaseQuality; + } + }; + } +} diff --git a/Java/src/test/java/com/gildedrose/domain/item/ItemAdapterSimpleFactoryTest.java b/Java/src/test/java/com/gildedrose/domain/item/ItemAdapterSimpleFactoryTest.java new file mode 100644 index 00000000..c4107731 --- /dev/null +++ b/Java/src/test/java/com/gildedrose/domain/item/ItemAdapterSimpleFactoryTest.java @@ -0,0 +1,59 @@ +package com.gildedrose.domain.item; + +import org.junit.jupiter.api.Test; +import static org.junit.jupiter.api.Assertions.assertEquals; + +public class ItemAdapterSimpleFactoryTest { + + @Test + void shouldCreateAgedBrieItemAdapter(){ + //given + Item agedBrie = new Item("Aged Brie", 2, 0); + //when + ItemAdapter result = ItemAdapterSimpleFactory.createItemAdapter(agedBrie); + //then + assertEquals(agedBrie.name, result.getItem().name); + assertEquals(agedBrie.sellIn, result.getItem().sellIn); + assertEquals(agedBrie.quality, result.getItem().quality); + + } + + @Test + void shouldCreateBackstagePassesItemAdapter(){ + //given + Item backstagePasses = new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20); + //when + ItemAdapter result = ItemAdapterSimpleFactory.createItemAdapter(backstagePasses); + //then + assertEquals(backstagePasses.name, result.getItem().name); + assertEquals(backstagePasses.sellIn, result.getItem().sellIn); + assertEquals(backstagePasses.quality, result.getItem().quality); + + } + + @Test + void shouldCreateSulfurasItemAdapter(){ + //given + Item sulfuras = new Item("Sulfuras, Hand of Ragnaros", 0, 80); + //when + ItemAdapter result = ItemAdapterSimpleFactory.createItemAdapter(sulfuras); + //then + assertEquals(sulfuras.name, result.getItem().name); + assertEquals(sulfuras.sellIn, result.getItem().sellIn); + assertEquals(sulfuras.quality, result.getItem().quality); + + } + + @Test + void shouldCreateStandardItemAdapter(){ + //given + Item standardItem = new Item("Elixir of the Mongoose", 5, 7); + //when + ItemAdapter result = ItemAdapterSimpleFactory.createItemAdapter(standardItem); + //then + assertEquals(standardItem.name, result.getItem().name); + assertEquals(standardItem.sellIn, result.getItem().sellIn); + assertEquals(standardItem.quality, result.getItem().quality); + + } +} diff --git a/Java/src/test/java/com/gildedrose/domain/item/ItemTypeTest.java b/Java/src/test/java/com/gildedrose/domain/item/ItemTypeTest.java new file mode 100644 index 00000000..7b5c926f --- /dev/null +++ b/Java/src/test/java/com/gildedrose/domain/item/ItemTypeTest.java @@ -0,0 +1,47 @@ +package com.gildedrose.domain.item; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import org.junit.jupiter.api.Test; + +public class ItemTypeTest { + + @Test + void findByValue_AgedBrie() { + // given + String agedBrie = "Aged Brie"; + //when + ItemType result = ItemType.findByValue(agedBrie); + //then + assertEquals(ItemType.AGEG_BRIE, result); + } + + @Test + void findByValue_BackStagePasses() { + // given + String agedBrie = "Backstage passes to a TAFKAL80ETC concert"; + //when + ItemType result = ItemType.findByValue(agedBrie); + //then + assertEquals(ItemType.BACKSTAGE_PASSES, result); + } + + @Test + void findByValue_Sulfuras() { + // given + String agedBrie = "Sulfuras, Hand of Ragnaros"; + //when + ItemType result = ItemType.findByValue(agedBrie); + //then + assertEquals(ItemType.SULFURAS, result); + } + + @Test + void findByValue_StandardItem() { + // given + String agedBrie = "Elixir of the Mongoose"; + //when + ItemType result = ItemType.findByValue(agedBrie); + //then + assertEquals(ItemType.STANDARD, result); + } +}