From 701a3c9eb0c282ecb95731cf330df1db5fa21344 Mon Sep 17 00:00:00 2001 From: Velizar Todorov Date: Thu, 25 Nov 2021 16:25:22 +0100 Subject: [PATCH] :hammer: refactoring --- .../gildedrose/item_helpers/ItemFactory.java | 2 +- .../gildedrose/item_helpers/ItemHandler.java | 67 ++++++++----------- .../com/gildedrose/item_helpers/ItemType.java | 2 - .../com/gildedrose/items/AgedBrieItem.java | 4 +- .../gildedrose/items/BackstagePassItem.java | 6 +- .../com/gildedrose/items/ConjuredItem.java | 2 +- .../com/gildedrose/items/LegendaryItem.java | 11 ++- .../java/com/gildedrose/items/NormalItem.java | 2 +- .../com/gildedrose/{ => main}/GildedRose.java | 6 +- .../java/com/gildedrose/{ => main}/Item.java | 6 +- .../java/com/gildedrose/GildedRoseTest.java | 16 ++--- .../java/com/gildedrose/TexttestFixture.java | 3 + .../com/gildedrose/TexttestFixtureTemp.java | 3 + 13 files changed, 61 insertions(+), 69 deletions(-) rename Java/src/main/java/com/gildedrose/{ => main}/GildedRose.java (81%) rename Java/src/main/java/com/gildedrose/{ => main}/Item.java (81%) diff --git a/Java/src/main/java/com/gildedrose/item_helpers/ItemFactory.java b/Java/src/main/java/com/gildedrose/item_helpers/ItemFactory.java index 842c92c3..a5bd0438 100644 --- a/Java/src/main/java/com/gildedrose/item_helpers/ItemFactory.java +++ b/Java/src/main/java/com/gildedrose/item_helpers/ItemFactory.java @@ -1,6 +1,6 @@ package com.gildedrose.item_helpers; -import com.gildedrose.Item; +import com.gildedrose.main.Item; import com.gildedrose.items.AgedBrieItem; import com.gildedrose.items.BackstagePassItem; import com.gildedrose.items.ConjuredItem; diff --git a/Java/src/main/java/com/gildedrose/item_helpers/ItemHandler.java b/Java/src/main/java/com/gildedrose/item_helpers/ItemHandler.java index 3e234d4f..6dc4c0ab 100644 --- a/Java/src/main/java/com/gildedrose/item_helpers/ItemHandler.java +++ b/Java/src/main/java/com/gildedrose/item_helpers/ItemHandler.java @@ -1,15 +1,14 @@ package com.gildedrose.item_helpers; -import com.gildedrose.Item; +import com.gildedrose.main.Item; -import static com.gildedrose.item_helpers.ItemName.LEGENDARY; +import static com.gildedrose.items.LegendaryItem.NOT_LEGENDARY_ITEM_ERROR_MESSAGE; +import static com.gildedrose.items.LegendaryItem.isNotLegendary; import static java.lang.Math.max; public class ItemHandler { - private static final int LEGENDARY_ITEM_QUALITY = 80; - protected static final String NEGATIVE_QUALITY_ERROR_MESSAGE = "Quality cannot be negative! Current value: "; - protected static final String NOT_LEGENDARY_ITEM_ERROR_MESSAGE = "Item is legendary, quality must be always 80! Current value: "; + protected static final String QUALITY_ERROR_MESSAGE = "Quality cannot be negative! Current value: "; private final Item item; @@ -19,7 +18,7 @@ public class ItemHandler { static void validate(Item item) { if (qualityIsNegative(item)) { - throw new IllegalArgumentException(NEGATIVE_QUALITY_ERROR_MESSAGE + item.quality); + throw new IllegalArgumentException(QUALITY_ERROR_MESSAGE + item.quality); } if (isNotLegendary(item)) { throw new IllegalArgumentException(NOT_LEGENDARY_ITEM_ERROR_MESSAGE + item.quality); @@ -30,8 +29,12 @@ public class ItemHandler { return item.quality < 0; } - private static boolean isNotLegendary(Item item) { - return item.name.equals(LEGENDARY.toString()) && item.quality != 80; + public boolean qualityIsHigherThanZero() { + return item.quality > 0; + } + + public void makeQualityZero() { + item.quality = 0; } public void decrementSellInDate() { @@ -42,32 +45,6 @@ public class ItemHandler { return item.sellIn >= 0; } - public void incrementQualityByTwo() { - item.quality = max(item.quality + 2, 0); - } - - public void incrementQuality() { - item.quality++; - } - - public void decrementQuality() { - item.quality--; - } - - public void decrementQualityBy4() { - item.quality = max(item.quality - 4, 0); - } - - public void decrementQualityBy2() { - item.quality = max(item.quality - 2, 0); - } - - public void setLegendaryQuality() { - if (item.quality != LEGENDARY_ITEM_QUALITY) { - item.quality = LEGENDARY_ITEM_QUALITY; - } - } - public boolean sellInLessThan5Days() { return item.sellIn >= 0 && item.sellIn <= 5; } @@ -76,20 +53,32 @@ public class ItemHandler { return item.sellIn >= 5 && item.sellIn <= 10; } - public boolean sellInDaysMoreThan10Days() { + public boolean sellInMoreThan10Days() { return item.sellIn >= 10; } - public boolean qualityIsHigherThanZero() { - return item.quality > 0; + public void incrementQuality() { + item.quality++; } - public void makeQualityZero() { - item.quality = 0; + public void incrementQualityBy2() { + item.quality = max(item.quality + 2, 0); } public void incrementQualityBy3() { item.quality = max(item.quality + 3, 0); } + public void decrementQuality() { + item.quality--; + } + + public void decrementQualityBy2() { + item.quality = max(item.quality - 2, 0); + } + + public void decrementQualityBy4() { + item.quality = max(item.quality - 4, 0); + } + } diff --git a/Java/src/main/java/com/gildedrose/item_helpers/ItemType.java b/Java/src/main/java/com/gildedrose/item_helpers/ItemType.java index 1d98d95a..fd889cb4 100644 --- a/Java/src/main/java/com/gildedrose/item_helpers/ItemType.java +++ b/Java/src/main/java/com/gildedrose/item_helpers/ItemType.java @@ -1,7 +1,5 @@ package com.gildedrose.item_helpers; public interface ItemType { - void updateQuality(); - } diff --git a/Java/src/main/java/com/gildedrose/items/AgedBrieItem.java b/Java/src/main/java/com/gildedrose/items/AgedBrieItem.java index 6c82fc24..dda5725c 100644 --- a/Java/src/main/java/com/gildedrose/items/AgedBrieItem.java +++ b/Java/src/main/java/com/gildedrose/items/AgedBrieItem.java @@ -1,6 +1,6 @@ package com.gildedrose.items; -import com.gildedrose.Item; +import com.gildedrose.main.Item; import com.gildedrose.item_helpers.ItemHandler; import com.gildedrose.item_helpers.ItemType; @@ -18,7 +18,7 @@ public class AgedBrieItem implements ItemType { if (item.beforeSellInDate()) { item.incrementQuality(); } else { - item.incrementQualityByTwo(); + item.incrementQualityBy2(); } } diff --git a/Java/src/main/java/com/gildedrose/items/BackstagePassItem.java b/Java/src/main/java/com/gildedrose/items/BackstagePassItem.java index ea7be052..b3617199 100644 --- a/Java/src/main/java/com/gildedrose/items/BackstagePassItem.java +++ b/Java/src/main/java/com/gildedrose/items/BackstagePassItem.java @@ -1,6 +1,6 @@ package com.gildedrose.items; -import com.gildedrose.Item; +import com.gildedrose.main.Item; import com.gildedrose.item_helpers.ItemHandler; import com.gildedrose.item_helpers.ItemType; @@ -15,10 +15,10 @@ public class BackstagePassItem implements ItemType { @Override public void updateQuality() { item.decrementSellInDate(); - if (item.sellInDaysMoreThan10Days()) { + if (item.sellInMoreThan10Days()) { item.incrementQuality(); } else if (item.sellInLessThan10Days()) { - item.incrementQualityByTwo(); + item.incrementQualityBy2(); } else if (item.sellInLessThan5Days()) { item.incrementQualityBy3(); } else { diff --git a/Java/src/main/java/com/gildedrose/items/ConjuredItem.java b/Java/src/main/java/com/gildedrose/items/ConjuredItem.java index 63edbe5d..41ec0fb9 100644 --- a/Java/src/main/java/com/gildedrose/items/ConjuredItem.java +++ b/Java/src/main/java/com/gildedrose/items/ConjuredItem.java @@ -1,6 +1,6 @@ package com.gildedrose.items; -import com.gildedrose.Item; +import com.gildedrose.main.Item; import com.gildedrose.item_helpers.ItemHandler; import com.gildedrose.item_helpers.ItemType; diff --git a/Java/src/main/java/com/gildedrose/items/LegendaryItem.java b/Java/src/main/java/com/gildedrose/items/LegendaryItem.java index 4d9f1f81..14fdb63d 100644 --- a/Java/src/main/java/com/gildedrose/items/LegendaryItem.java +++ b/Java/src/main/java/com/gildedrose/items/LegendaryItem.java @@ -1,11 +1,15 @@ package com.gildedrose.items; -import com.gildedrose.Item; +import com.gildedrose.main.Item; import com.gildedrose.item_helpers.ItemHandler; import com.gildedrose.item_helpers.ItemType; +import static com.gildedrose.item_helpers.ItemName.LEGENDARY; + public class LegendaryItem implements ItemType { + public static final int LEGENDARY_ITEM_QUALITY = 80; + public static final String NOT_LEGENDARY_ITEM_ERROR_MESSAGE = "Item is legendary, quality must be always 80! Current value: "; private final ItemHandler item; public LegendaryItem(Item item) { @@ -15,7 +19,10 @@ public class LegendaryItem implements ItemType { @Override public void updateQuality() { item.decrementSellInDate(); - item.setLegendaryQuality(); + } + + public static boolean isNotLegendary(Item item) { + return item.name.equals(LEGENDARY.toString()) && item.quality != LEGENDARY_ITEM_QUALITY; } } diff --git a/Java/src/main/java/com/gildedrose/items/NormalItem.java b/Java/src/main/java/com/gildedrose/items/NormalItem.java index 52ed646f..4adf6aaf 100644 --- a/Java/src/main/java/com/gildedrose/items/NormalItem.java +++ b/Java/src/main/java/com/gildedrose/items/NormalItem.java @@ -1,6 +1,6 @@ package com.gildedrose.items; -import com.gildedrose.Item; +import com.gildedrose.main.Item; import com.gildedrose.item_helpers.ItemHandler; import com.gildedrose.item_helpers.ItemType; diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/main/GildedRose.java similarity index 81% rename from Java/src/main/java/com/gildedrose/GildedRose.java rename to Java/src/main/java/com/gildedrose/main/GildedRose.java index 4291d496..5a5b8a69 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/main/GildedRose.java @@ -1,12 +1,12 @@ -package com.gildedrose; +package com.gildedrose.main; import java.util.List; import static com.gildedrose.item_helpers.ItemFactory.getItem; import static java.util.Collections.singletonList; -class GildedRose { - List items; +public class GildedRose { + private final List items; public GildedRose(List items) { this.items = items; diff --git a/Java/src/main/java/com/gildedrose/Item.java b/Java/src/main/java/com/gildedrose/main/Item.java similarity index 81% rename from Java/src/main/java/com/gildedrose/Item.java rename to Java/src/main/java/com/gildedrose/main/Item.java index 465729ec..0a43c891 100644 --- a/Java/src/main/java/com/gildedrose/Item.java +++ b/Java/src/main/java/com/gildedrose/main/Item.java @@ -1,4 +1,4 @@ -package com.gildedrose; +package com.gildedrose.main; public class Item { @@ -14,8 +14,8 @@ public class Item { this.quality = quality; } - @Override - public String toString() { + @Override + public String toString() { return this.name + ", " + this.sellIn + ", " + this.quality; } } diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 2d431081..dc0203d0 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -1,24 +1,16 @@ package com.gildedrose; +import com.gildedrose.main.GildedRose; +import com.gildedrose.main.Item; import org.junit.jupiter.api.Test; import java.util.Arrays; import java.util.List; import static com.gildedrose.item_helpers.ItemName.*; -import static java.util.Collections.singletonList; -import static org.junit.jupiter.api.Assertions.assertEquals; class GildedRoseTest { - @Test - void foo() { - List items = singletonList(new Item("foo", 0, 0)); - GildedRose app = new GildedRose(items); - app.updateQuality(); - assertEquals("foo", app.items.get(0).name); - } - @Test void testNormalItem() { int days = 20; @@ -46,9 +38,9 @@ class GildedRoseTest { @Test - void testSulfuraItem() { + void testLegendaryItem() { int days = 20; - Item legendaryItem = new Item(LEGENDARY.toString(), 10, 40); + Item legendaryItem = new Item(LEGENDARY.toString(), 10, 80); GildedRose app = new GildedRose(legendaryItem); for (int i = 0; i < days; i++) { app.updateQuality(); diff --git a/Java/src/test/java/com/gildedrose/TexttestFixture.java b/Java/src/test/java/com/gildedrose/TexttestFixture.java index 2ccfa77b..b9060581 100644 --- a/Java/src/test/java/com/gildedrose/TexttestFixture.java +++ b/Java/src/test/java/com/gildedrose/TexttestFixture.java @@ -1,5 +1,8 @@ package com.gildedrose; +import com.gildedrose.main.GildedRose; +import com.gildedrose.main.Item; + import static java.util.Arrays.asList; public class TexttestFixture { diff --git a/Java/src/test/java/com/gildedrose/TexttestFixtureTemp.java b/Java/src/test/java/com/gildedrose/TexttestFixtureTemp.java index 14fa055d..5670738f 100644 --- a/Java/src/test/java/com/gildedrose/TexttestFixtureTemp.java +++ b/Java/src/test/java/com/gildedrose/TexttestFixtureTemp.java @@ -1,5 +1,8 @@ package com.gildedrose; +import com.gildedrose.main.GildedRose; +import com.gildedrose.main.Item; + import static java.util.Arrays.asList; public class TexttestFixtureTemp {