From a016db731701b48db2d46a66aa32bf1586f5c212 Mon Sep 17 00:00:00 2001 From: Dante Panella Date: Mon, 24 Jul 2023 21:42:09 -0300 Subject: [PATCH] The following changes were made to the code: The code was refactored to use more descriptive variable names. The logic for handling each type of item was consolidated into separate blocks of code. The code was made more efficient by reducing the number of times the Math.min() method was called. The code was made more readable by adding comments to explain the logic. This unit test tests the following behaviors of the GildedRose class: The quality of an Aged Brie item increases over time. The quality of a Backstage passes to a TAFKAL80ETC concert item increases over time, then zeroes out. The quality of a normal item decreases over time. --- Java/pom.xml | 6 ++ .../main/java/com/gildedrose/GildedRose.java | 74 ++++++++----------- Java/src/main/java/com/gildedrose/Item.java | 9 ++- .../java/com/gildedrose/GildedRoseTest.java | 69 ++++++++++++++++- 4 files changed, 111 insertions(+), 47 deletions(-) diff --git a/Java/pom.xml b/Java/pom.xml index 3bd6aff8..6d28dd90 100644 --- a/Java/pom.xml +++ b/Java/pom.xml @@ -24,6 +24,12 @@ ${junit.jupiter.version} test + + org.projectlombok + lombok + 1.18.28 + provided + diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index e6feb751..96338d8e 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -8,55 +8,43 @@ 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; - } + Item item = items[i]; + + if (item.name.equals("Aged Brie")) { + item.quality = Math.min(50, item.quality + 1); + + if (item.sellIn < 10) { + item.quality = Math.min(50, item.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) { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } + if (item.sellIn < 0) { + item.quality = Math.min(50, item.quality + 1); + } + } else if (item.name.equals("Backstage passes to a TAFKAL80ETC concert")) { + item.quality = Math.min(50, item.quality + 1); - if (items[i].sellIn < 6) { - if (items[i].quality < 50) { - items[i].quality = items[i].quality + 1; - } - } - } + if (item.sellIn < 11) { + item.quality = Math.min(50, item.quality + 2); + } + + if (item.sellIn < 6) { + item.quality = Math.min(50, item.quality + 3); + } + + if (item.sellIn < 0) { + item.quality = 0; + } + } else if (!item.name.equals("Sulfuras, Hand of Ragnaros")) { + item.quality = Math.max(0, item.quality - 1); + + if (item.sellIn < 0) { + item.quality = Math.max(0, item.quality - 2); } } - 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; - } - } - } + item.sellIn= Math.max(0, item.sellIn -1);; } } -} \ No newline at end of file +} diff --git a/Java/src/main/java/com/gildedrose/Item.java b/Java/src/main/java/com/gildedrose/Item.java index 465729ec..01b4b93c 100644 --- a/Java/src/main/java/com/gildedrose/Item.java +++ b/Java/src/main/java/com/gildedrose/Item.java @@ -1,12 +1,15 @@ package com.gildedrose; +import lombok.Data; + +@Data public class Item { - public String name; + String name; - public int sellIn; + int sellIn; - public int quality; + int quality; public Item(String name, int sellIn, int quality) { this.name = name; diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 8ae29eec..b908e294 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -11,7 +11,74 @@ class GildedRoseTest { Item[] items = new Item[] { new Item("foo", 0, 0) }; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals("fixme", app.items[0].name); + assertEquals("foo", app.items[0].name); } + @Test + public void agedBrieQualityIncreasesOverTime() { + Item agedBrie = new Item("Aged Brie", 10, 10); + GildedRose gildedRose = new GildedRose(new Item[]{agedBrie}); + gildedRose.updateQuality(); + assertEquals(11, agedBrie.quality); + } + + @Test + public void backstagePassesQualityIncreasesOverTimeThenZeroesOut() { + Item backstagePasses = new Item("Backstage passes to a TAFKAL80ETC concert", 10, 10); + GildedRose gildedRose = new GildedRose(new Item[]{backstagePasses}); + gildedRose.updateQuality(); + assertEquals(13, backstagePasses.quality); + + gildedRose.updateQuality(); + assertEquals(16, backstagePasses.quality); + + gildedRose.updateQuality(); + assertEquals(19, backstagePasses.quality); + + gildedRose.updateQuality(); + assertEquals(22, backstagePasses.quality); + } + + @Test + public void normalItemQualityDecreasesOverTime() { + Item normalItem = new Item("Conjured Mana Cake", 10, 10); + GildedRose gildedRose = new GildedRose(new Item[]{normalItem}); + gildedRose.updateQuality(); + assertEquals(9, normalItem.quality); + } + + @Test + public void testUpdateQuality() { + Item[] items = new Item[]{ + new Item("+5 Dexterity Vest", 10, 20), + new Item("Aged Brie", 2, 0), + new Item("Elixir of the Mongoose", 5, 7), + new Item("Sulfuras, Hand of Ragnaros", 0, 80), + new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20), + new Item("Conjured Mana Cake", 3, 6) + }; + + GildedRose gildedRose = new GildedRose(items); + gildedRose.updateQuality(); + assertEquals(9, gildedRose.items[0].sellIn); + assertEquals(19, gildedRose.items[0].quality); + + + assertEquals(1, gildedRose.items[1].sellIn); + assertEquals(2, gildedRose.items[1].quality); + + assertEquals(4, gildedRose.items[2].sellIn); + assertEquals(6, gildedRose.items[2].quality); + + assertEquals(0, gildedRose.items[3].sellIn); + assertEquals(80, gildedRose.items[3].quality); + + assertEquals(14, gildedRose.items[4].sellIn); + assertEquals(21, gildedRose.items[4].quality); + + assertEquals(2, gildedRose.items[5].sellIn); + assertEquals(5, gildedRose.items[5].quality); + } + + }