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); + } + + }