From 724ab70dd69a6e18108c15b80df1e3632311551c Mon Sep 17 00:00:00 2001 From: Santiago Garcia Date: Tue, 29 Sep 2020 17:47:03 -0500 Subject: [PATCH] Add new use case conjured items Refactor Method updateQuality --- .../main/java/com/gildedrose/GildedRose.java | 117 +++++++++++------- .../java/com/gildedrose/GildedRoseTest.java | 13 +- 2 files changed, 85 insertions(+), 45 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index e6feb751..5c954202 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -2,6 +2,8 @@ package com.gildedrose; class GildedRose { Item[] items; + private final int MAX_DEFAULT_QUALITY = 50; + public GildedRose(Item[] items) { this.items = items; @@ -9,54 +11,81 @@ 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; - } - } + reduceSellInItem(i); + + if (isEspecialItem(items[i])) { + valueItems(i); } 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) { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } - - if (items[i].sellIn < 6) { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } - } - } + devalueItems(i); } - - 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; - } - } - } else { - items[i].quality = items[i].quality - items[i].quality; - } - } else { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } + qualityWhenDaysAreOver(i); } } } + + private void valueItems(int i) { + if (canIncreaseQuality(items[i].quality)) { + if (items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { + increaseValueBackstage(i); + } else { + increaseQuality(i); + } + } + } + + private void devalueItems(int i) { + if (items[i].name.equals("Conjured Mana Cake")) { + reduceQuality(i, 2); + } else { + reduceQuality(i, 1); + } + } + + private void qualityWhenDaysAreOver(int i) { + if (items[i].name.equals("Aged Brie") && canIncreaseQuality(items[i].quality)) { + increaseQuality(i); + } else if (items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { + items[i].quality = 0; + } else { + if (items[i].quality > 0 && !items[i].name.equals("Sulfuras, Hand of Ragnaros")) { + reduceQuality(i, 1); + } + } + } + + private void reduceSellInItem(int i) { + if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) { + items[i].sellIn = items[i].sellIn - 1; + } + } + + private void increaseValueBackstage(int i) { + increaseQuality(i); + if (items[i].sellIn < 11 && canIncreaseQuality(items[i].quality)) { + increaseQuality(i); + } + if (items[i].sellIn < 6 && canIncreaseQuality(items[i].quality)) { + increaseQuality(i); + } + } + + private void increaseQuality(int i) { + items[i].quality = ++items[i].quality; + } + + private boolean canIncreaseQuality(int quality) { + return quality < MAX_DEFAULT_QUALITY; + } + + private boolean isEspecialItem(Item item) { + return item.name.equals("Aged Brie") + || item.name.equals("Backstage passes to a TAFKAL80ETC concert") || item.name.equals("Sulfuras, Hand of Ragnaros"); + } + + private void reduceQuality(int i, int value) { + if (items[i].quality > 0) { + items[i].quality = items[i].quality - value; + } + } } \ No newline at end of file diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 484e6448..4d8effd9 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -16,9 +16,13 @@ class GildedRoseTest { new Item("Sulfuras, Hand of Ragnaros", -1, 80), new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20), new Item("Backstage passes to a TAFKAL80ETC concert", 10, 49), - new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49)}; + new Item("Backstage passes to a TAFKAL80ETC concert", 5, 47), + new Item("Backstage passes to a TAFKAL80ETC concert", 0, 47), + new Item("Conjured Mana Cake", 3, 6) }; + GildedRose app = new GildedRose(items); app.updateQuality(); + assertEquals("+5 Dexterity Vest", app.items[0].name); assertEquals(9, app.items[0].sellIn); assertEquals(19, app.items[0].quality); @@ -43,6 +47,13 @@ class GildedRoseTest { assertEquals("Backstage passes to a TAFKAL80ETC concert", app.items[7].name); assertEquals(4, app.items[7].sellIn); assertEquals(50, app.items[7].quality); + assertEquals("Backstage passes to a TAFKAL80ETC concert", app.items[8].name); + assertEquals(-1, app.items[8].sellIn); + assertEquals(0, app.items[8].quality); + + assertEquals("Conjured Mana Cake", app.items[9].name); + assertEquals(2, app.items[9].sellIn); + assertEquals(4, app.items[9].quality); } }