From 816efb008ef848e9a3bee1757602d40fb6a405b9 Mon Sep 17 00:00:00 2001 From: lekshmysasidhar Date: Fri, 31 Mar 2023 10:15:15 +0200 Subject: [PATCH] Code Refactoring :Separated expired item quality check and common logic into its own method for clearer code flow --- .../main/java/com/gildedrose/GildedRose.java | 50 +++++++++-------- .../java/com/gildedrose/GildedRoseTest.java | 53 +++++++++++++++---- 2 files changed, 70 insertions(+), 33 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index af6962b6..8eedfa63 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -22,15 +22,11 @@ class GildedRose { if (item.name.equals("Backstage passes to a TAFKAL80ETC concert")) { if (item.sellIn < 11) { - if (item.quality < 50) { - item.quality = item.quality + 1; - } + addQualityWhenWithInLimit(item); } if (item.sellIn < 6) { - if (item.quality < 50) { - item.quality = item.quality + 1; - } + addQualityWhenWithInLimit(item); } } } @@ -40,25 +36,33 @@ class GildedRose { updateSellInDays(item); } - if (item.sellIn < 0) { - if (!item.name.equals("Aged Brie")) { - if (!item.name.equals("Backstage passes to a TAFKAL80ETC concert")) { - if (item.quality > 0) { - if (!item.name.equals("Sulfuras, Hand of Ragnaros")) { - item.quality = item.quality - 1; - } - } - } else { - item.quality = item.quality - item.quality; - } - } else { - if (item.quality < 50) { - item.quality = item.quality + 1; - } - } - } + updateQualityForExpiredItem(item); } } + + private void addQualityWhenWithInLimit(Item item) { + if (item.quality < 50) { + item.quality = item.quality + 1; + } + } + + private void updateQualityForExpiredItem(Item item) { + if (item.sellIn < 0) { + if (!item.name.equals("Aged Brie")) { + if (!item.name.equals("Backstage passes to a TAFKAL80ETC concert")) { + if (item.quality > 0) { + if (!item.name.equals("Sulfuras, Hand of Ragnaros")) { + item.quality = item.quality - 1; + } + } + } else { + item.quality = item.quality - item.quality; + } + } else { + addQualityWhenWithInLimit(item); + } + } + } private void updateSellInDays(Item item) { diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 82dc8723..f2d884d0 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -1,24 +1,57 @@ package com.gildedrose; import org.junit.jupiter.api.Test; +import org.junit.jupiter.params.ParameterizedTest; +import org.junit.jupiter.params.provider.Arguments; +import org.junit.jupiter.params.provider.MethodSource; import static org.junit.jupiter.api.Assertions.assertEquals; +import java.util.stream.Stream; + class GildedRoseTest { - @Test - void testUpdateSellInDaysForAgedBrie() { - Item[] items = new Item[] { new Item("Aged Brie", 1, 1) }; - GildedRose app = new GildedRose(items); - app.updateQuality(); - assertEquals(0, items[0].sellIn); + + private static Stream getTestItemsForSellInDayCheck() { + return Stream.of( + Arguments.of(new Item[] { new Item("Aged Brie", 1, 1) }, 0), + Arguments.of(new Item[] { new Item("Sulfuras, Hand of Ragnaros", 1, 1) }, 1) + + ); } - @Test - void testUpdateSellInDaysForSulfuras() { - Item[] items = new Item[] { new Item("Sulfuras, Hand of Ragnaros", 1, 1) }; + @ParameterizedTest(name = "Test sellin days for items - {index}") + @MethodSource("getTestItemsForSellInDayCheck") + void testUpdateSellInDays(Item[] items, int expectedSellinDays) { GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(1, items[0].sellIn); + assertEquals(expectedSellinDays, items[0].sellIn); + } + + private static Stream getTestItemsForQualityCheck() { + return Stream.of(Arguments.of(new Item[] { new Item("Aged Brie", 1, 1) }, 2), + Arguments.of(new Item[] { new Item("Aged Brie", 1, 50) }, 50), + + Arguments.of(new Item[] { new Item("Aged Brie", -1, 1) }, 3), + Arguments.of(new Item[] { new Item("Aged Brie", -1, 50) }, 50), + + Arguments.of(new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 5, 10) }, 13), + Arguments.of(new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 5, 50) }, 50), + Arguments.of(new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 10, 10) }, 12), + Arguments.of(new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 10, 50) }, 50), + Arguments.of(new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 12, 10) }, 11), + Arguments.of(new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", 12, 50) }, 50), + + Arguments.of(new Item[] { new Item("Backstage passes to a TAFKAL80ETC concert", -1, 10) }, 0) + + ); + } + + @ParameterizedTest(name = "Test quality for non expired and expired items - {index}") + @MethodSource("getTestItemsForQualityCheck") + void testUpdateQuality(Item[] items, int expectedQuality) { + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals(expectedQuality, items[0].quality); } }