Code Refactoring :Separated expired item quality check and common logic into its own method for clearer code flow

This commit is contained in:
lekshmysasidhar 2023-03-31 10:15:15 +02:00
parent 8fb53ac4d3
commit 816efb008e
2 changed files with 70 additions and 33 deletions

View File

@ -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) {

View File

@ -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<Arguments> 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<Arguments> 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);
}
}