From 40a260bb0350f610d5a7784c3124ac5455626b7c Mon Sep 17 00:00:00 2001 From: Velizar Todorov Date: Fri, 26 Nov 2021 19:19:30 +0100 Subject: [PATCH] :bug: check for quality above 50 --- .../gildedrose/item_helpers/ItemFactory.java | 13 +------ .../gildedrose/item_helpers/ItemHandler.java | 7 ++-- .../item_helpers/QualityValidator.java | 37 +++++++++++++++++++ .../com/gildedrose/items/LegendaryItem.java | 13 +++---- .../com/gildedrose/helper/TestHelper.java | 10 ++++- .../gildedrose/items/LegendaryItemTest.java | 9 +---- .../com/gildedrose/items/NormalItemTest.java | 14 +++++-- .../multiple_items/MultipleItemsTest.java | 3 ++ 8 files changed, 70 insertions(+), 36 deletions(-) create mode 100644 src/main/java/com/gildedrose/item_helpers/QualityValidator.java diff --git a/src/main/java/com/gildedrose/item_helpers/ItemFactory.java b/src/main/java/com/gildedrose/item_helpers/ItemFactory.java index 81af33d1..ab629857 100644 --- a/src/main/java/com/gildedrose/item_helpers/ItemFactory.java +++ b/src/main/java/com/gildedrose/item_helpers/ItemFactory.java @@ -15,7 +15,7 @@ public class ItemFactory { } public static ItemType getItemType(Item item) { - validateQuality(item); + QualityValidator.validateQuality(item); ItemName itemName = getItemName(item.name); switch (itemName) { case AGED_BRIE: @@ -31,15 +31,4 @@ public class ItemFactory { } } - public static final String QUALITY_ERROR_MESSAGE = "Quality cannot be negative! Current value: "; - - private static void validateQuality(Item item) { - if (qualityIsNegative(item)) { - throw new IllegalArgumentException(QUALITY_ERROR_MESSAGE + item.quality); - } - } - - private static boolean qualityIsNegative(Item item) { - return item.quality < 0; - } } diff --git a/src/main/java/com/gildedrose/item_helpers/ItemHandler.java b/src/main/java/com/gildedrose/item_helpers/ItemHandler.java index d1b8efb0..ed78875c 100644 --- a/src/main/java/com/gildedrose/item_helpers/ItemHandler.java +++ b/src/main/java/com/gildedrose/item_helpers/ItemHandler.java @@ -3,6 +3,7 @@ package com.gildedrose.item_helpers; import com.gildedrose.main.Item; import static java.lang.Math.max; +import static java.lang.Math.min; public class ItemHandler { @@ -37,15 +38,15 @@ public class ItemHandler { } public void incrementQuality() { - item.quality = max(item.quality + 1, 0); + item.quality = min(item.quality + 1, 50); } public void incrementQualityBy2() { - item.quality = max(item.quality + 2, 0); + item.quality = min(item.quality + 2, 50); } public void incrementQualityBy3() { - item.quality = max(item.quality + 3, 0); + item.quality = min(item.quality + 3, 50); } public void decrementQuality() { diff --git a/src/main/java/com/gildedrose/item_helpers/QualityValidator.java b/src/main/java/com/gildedrose/item_helpers/QualityValidator.java new file mode 100644 index 00000000..fca4dafe --- /dev/null +++ b/src/main/java/com/gildedrose/item_helpers/QualityValidator.java @@ -0,0 +1,37 @@ +package com.gildedrose.item_helpers; + +import com.gildedrose.main.Item; + +import static com.gildedrose.items.LegendaryItem.*; + +public class QualityValidator { + + private QualityValidator() { + } + + public static final String QUALITY_ERROR_MESSAGE = "Quality cannot be negative! Current value: "; + public static final String OUT_OF_BOUND_QUALITY_MESSAGE = "Quality cannot be above 50! Current value: "; + public static final String NOT_LEGENDARY_ITEM_ERROR_MESSAGE = "Item is legendary, quality must be always 80! Current value: "; + + public static void validateQuality(Item item) { + if (isLegendaryWrongQuality(item)) { + throw new IllegalArgumentException(NOT_LEGENDARY_ITEM_ERROR_MESSAGE + item.quality); + } else if (qualityIsNegative(item)) { + throw new IllegalArgumentException(QUALITY_ERROR_MESSAGE + item.quality); + } else if (qualityIsAbove50(item)) { + throw new IllegalArgumentException(OUT_OF_BOUND_QUALITY_MESSAGE + item.quality); + } + } + + public static boolean isLegendaryWrongQuality(Item item) { + return isLegendary(item) && item.quality != LEGENDARY_ITEM_QUALITY; + } + + private static boolean qualityIsNegative(Item item) { + return item.quality < 0; + } + + private static boolean qualityIsAbove50(Item item) { + return item.quality > 50 && isNotLegendary(item); + } +} diff --git a/src/main/java/com/gildedrose/items/LegendaryItem.java b/src/main/java/com/gildedrose/items/LegendaryItem.java index 78ac5e2f..db7550b4 100644 --- a/src/main/java/com/gildedrose/items/LegendaryItem.java +++ b/src/main/java/com/gildedrose/items/LegendaryItem.java @@ -9,11 +9,10 @@ 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) { - validate(item); this.item = new ItemHandler(item); } @@ -22,14 +21,12 @@ public class LegendaryItem implements ItemType { item.decrementSellInDate(); } - private void validate(Item item) { - if (notLegendary(item)) { - throw new IllegalArgumentException(NOT_LEGENDARY_ITEM_ERROR_MESSAGE + item.quality); - } + public static boolean isLegendary(Item item) { + return item.name.equals(LEGENDARY.toString()); } - public boolean notLegendary(Item item) { - return item.name.equals(LEGENDARY.toString()) && item.quality != LEGENDARY_ITEM_QUALITY; + public static boolean isNotLegendary(Item item) { + return !item.name.equals(LEGENDARY.toString()); } } diff --git a/src/test/java/com/gildedrose/helper/TestHelper.java b/src/test/java/com/gildedrose/helper/TestHelper.java index c460a520..047a6557 100644 --- a/src/test/java/com/gildedrose/helper/TestHelper.java +++ b/src/test/java/com/gildedrose/helper/TestHelper.java @@ -3,7 +3,8 @@ package com.gildedrose.helper; import com.gildedrose.main.GildedRose; import com.gildedrose.main.Item; -import static com.gildedrose.item_helpers.ItemFactory.QUALITY_ERROR_MESSAGE; +import static com.gildedrose.item_helpers.QualityValidator.OUT_OF_BOUND_QUALITY_MESSAGE; +import static com.gildedrose.item_helpers.QualityValidator.QUALITY_ERROR_MESSAGE; import static org.junit.jupiter.api.Assertions.*; public class TestHelper { @@ -27,4 +28,11 @@ public class TestHelper { assertTrue(actualMessage.contains(QUALITY_ERROR_MESSAGE)); } + public static void testItemQualityAboveLimitException(Item item) { + GildedRose gildedRose = new GildedRose(item); + Exception exception = assertThrows(IllegalArgumentException.class, gildedRose::updateQuality); + String actualMessage = exception.getMessage(); + assertTrue(actualMessage.contains(OUT_OF_BOUND_QUALITY_MESSAGE)); + } + } diff --git a/src/test/java/com/gildedrose/items/LegendaryItemTest.java b/src/test/java/com/gildedrose/items/LegendaryItemTest.java index 70e21dc2..3c688ad9 100644 --- a/src/test/java/com/gildedrose/items/LegendaryItemTest.java +++ b/src/test/java/com/gildedrose/items/LegendaryItemTest.java @@ -8,10 +8,9 @@ import org.junit.jupiter.api.Test; 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.QualityValidator.NOT_LEGENDARY_ITEM_ERROR_MESSAGE; import static com.gildedrose.item_helpers.ItemName.LEGENDARY; import static com.gildedrose.items.LegendaryItem.LEGENDARY_ITEM_QUALITY; -import static com.gildedrose.items.LegendaryItem.NOT_LEGENDARY_ITEM_ERROR_MESSAGE; import static org.junit.jupiter.api.Assertions.assertThrows; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -43,10 +42,4 @@ class LegendaryItemTest { assertTrue(actualMessage.contains(NOT_LEGENDARY_ITEM_ERROR_MESSAGE)); } - - @Test - @Order(4) - void negativeQualityFail() { - testItemException(itemError); - } } diff --git a/src/test/java/com/gildedrose/items/NormalItemTest.java b/src/test/java/com/gildedrose/items/NormalItemTest.java index 04b10aaa..72be601b 100644 --- a/src/test/java/com/gildedrose/items/NormalItemTest.java +++ b/src/test/java/com/gildedrose/items/NormalItemTest.java @@ -6,15 +6,15 @@ import org.junit.jupiter.api.Order; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; -import static com.gildedrose.helper.TestHelper.testItem; -import static com.gildedrose.helper.TestHelper.testItemException; +import static com.gildedrose.helper.TestHelper.*; import static com.gildedrose.item_helpers.ItemName.NORMAL; @TestMethodOrder(OrderAnnotation.class) class NormalItemTest { private final Item item = new Item(NORMAL.toString(), 5, 20); - private final Item itemError = new Item(NORMAL.toString(), 10, -5); + private final Item itemNegativeQuality = new Item(NORMAL.toString(), 10, -5); + private final Item itemAboveLimitQuality = new Item(NORMAL.toString(), 10, 60); @Test @Order(1) @@ -31,6 +31,12 @@ class NormalItemTest { @Test @Order(3) void negativeQualityFail() { - testItemException(itemError); + testItemException(itemNegativeQuality); + } + + @Test + @Order(4) + void QualityAboveLimitFail() { + testItemQualityAboveLimitException(itemAboveLimitQuality); } } diff --git a/src/test/java/com/gildedrose/multiple_items/MultipleItemsTest.java b/src/test/java/com/gildedrose/multiple_items/MultipleItemsTest.java index a8a5ac81..f94bdd33 100644 --- a/src/test/java/com/gildedrose/multiple_items/MultipleItemsTest.java +++ b/src/test/java/com/gildedrose/multiple_items/MultipleItemsTest.java @@ -43,6 +43,9 @@ class MultipleItemsTest { int days = 20; for (int i = 0; i < days; i++) { gildedRose.updateQuality(); + for (Item item : items) { + System.out.println(item); + } } }