refactor: making the UpdateQuality method more readable by removing the tree of if/else statements while adding more specific tests cases to avoid regression

This commit is contained in:
pierre 2023-02-19 10:33:27 +01:00
parent ef58e2bf7a
commit 33f38a7ec9
2 changed files with 60 additions and 46 deletions

View File

@ -9,48 +9,40 @@ class GildedRose {
public void updateQuality() {
for (int i = 0; i < items.length; i++) {
if (!items[i].name.equals("Aged Brie")
&& !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
if (items[i].quality > 0) {
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
items[i].quality = items[i].quality - 1;
}
}
} else {
if (items[i].quality < 50) {
items[i].quality = items[i].quality + 1;
if (items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
if (items[i].sellIn < 11 && items[i].quality < 50) {
items[i].quality = items[i].quality + 1;
}
if (items[i].sellIn < 6 && items[i].quality < 50) {
items[i].quality = items[i].quality + 1;
}
}
}
}
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
items[i].sellIn = items[i].sellIn - 1;
}
if (items[i].sellIn < 0) {
if (!items[i].name.equals("Aged Brie")) {
if (!items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
if (items[i].quality > 0) {
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
items[i].quality = items[i].quality - 1;
}
}
if ("Sulfuras, Hand of Ragnaros".equals(items[i].name)) {
continue;
} else if ("Conjured Mana Cake".equals(items[i].name)) {
while (items[i].quality > 0) {
if (items[i].sellIn >= 0) {
items[i].quality = items[i].quality - 2;
} else {
items[i].quality = items[i].quality - items[i].quality;
items[i].quality = items[i].quality - 4;
}
} else {
if (items[i].quality < 50) {
}
items[i].sellIn = items[i].sellIn - 1;
continue;
} else if ("Backstage passes to a TAFKAL80ETC concert".equals(items[i].name) | "Aged Brie".equals(items[i].name)) {
while (items[i].quality < 50) {
if ("Backstage passes to a TAFKAL80ETC concert".equals(items[i].name) & items[i].sellIn <= 5) {
items[i].quality = items[i].quality + 3;
} else if ("Backstage passes to a TAFKAL80ETC concert".equals(items[i].name) & items[i].sellIn < 10) {
items[i].quality = items[i].quality + 2;
} else {
items[i].quality = items[i].quality + 1;
}
}
items[i].sellIn = items[i].sellIn - 1;
continue;
} else {
// last case
while (items[i].quality > 0) {
if (items[i].sellIn >= 0) {
items[i].quality = items[i].quality - 2;
} else {
items[i].quality = items[i].quality - 4;
}
}
items[i].sellIn = items[i].sellIn - 1;
}
}
}

View File

@ -188,15 +188,37 @@ class UpdateQualityTest {
*/
// @Test
// void itemConjuredQualityTwiceAsFastAsNormalItems() {
// System.out.println("\"Conjured\" items degrade in Quality twice as fast as normal items");
// Item[] items = new Item[]{
// new Item("Conjured Mana Cake", 3, 6)};
// GildedRose app = new GildedRose(items);
// app.updateQuality();
// assertEquals(4, app.items[0].quality);
// }
@Test
void itemConjuredQualityTwiceAsFastAsNormalItemsWithPositiveSellIn() {
System.out.println("\"Conjured\" items degrade in Quality twice as fast as normal items when sellin is positive");
Item[] items = new Item[]{
new Item("Conjured Mana Cake", 3, 6)};
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(4, app.items[0].quality);
}
@Test
void itemConjuredQualityTwiceAsFastAsNormalItemsWhenSellInIsZero() {
System.out.println("\"Conjured\" items degrade in Quality twice as fast as normal items when sellin is wero");
Item[] items = new Item[]{
new Item("Conjured Mana Cake", 0, 10)
};
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(8, app.items[0].quality);
}
@Test
void itemConjuredQualityTwiceAsFastAsNormalItemsWithNegativeSellIn() {
System.out.println("\"Conjured\" items degrade in Quality twice as fast as normal items when sellin is negtive");
Item[] items = new Item[]{
new Item("Conjured Mana Cake", -1, 8)
};
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(4, app.items[0].quality);
}
}