diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 2c0f88db..cfd0cdac 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -9,62 +9,56 @@ 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; - if (items[i].name.equals("Conjured Mana Cake") && items[i].quality > 0) { - items[i].quality = items[i].quality - 1; - } - } - } - } else { + // to avoid to have to check it later on + if (items[i].name.equals("Sulfuras, Hand of Ragnaros")) { + continue; + } + + // first we define what should increase and what should decrease + if (items[i].name.equals("Backstage passes to a TAFKAL80ETC concert") | + items[i].name.equals("Aged Brie")) { 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 < 11 && 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; - } + if (items[i].sellIn < 6 && items[i].quality < 50) { + items[i].quality = items[i].quality + 1; } } } + } else { + updateNormalAndConjuredItems(items[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].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 (items[i].name.equals("Conjured Mana Cake") && items[i].quality > 0) { - 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; - } + if (items[i].name.equals("Aged Brie") && items[i].quality < 50) { + items[i].quality = items[i].quality + 1; } + + if (items[i].name.equals("+5 Dexterity Vest") || items[i].name.equals("Elixir of the Mongoose") || + items[i].name.equals("Conjured Mana Cake")) { + updateNormalAndConjuredItems(items[i]); + } + if (items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) { + items[i].quality = items[i].quality - items[i].quality; + } + } + items[i].sellIn = items[i].sellIn - 1; + } + } + + private void updateNormalAndConjuredItems(Item item) { + if (item.quality > 0) { + item.quality = item.quality - 1; + if (item.name.equals("Conjured Mana Cake") && item.quality > 0) { + item.quality = item.quality - 1; } } } + } diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 4dacf34e..92586e0c 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -54,7 +54,7 @@ class UpdateQualityTest { } @Test - void qualityItemNeverNegatif() { + void qualityItemNeverNegative() { System.out.println("The Quality of an item is never negative"); Item[] items = new Item[]{ new Item("+5 Dexterity Vest", 10, 1), @@ -63,13 +63,33 @@ class UpdateQualityTest { GildedRose app = new GildedRose(items); app.updateQuality(); app.updateQuality(); + System.out.println(app.items[0].quality); assertEquals(0, app.items[0].quality); assertEquals(0, app.items[1].quality); } @Test - void sellInValueCanBeNegative() { - System.out.println("SellIn value of an Item can be negative until quality reach zero"); + void sellInValueIsOneForNormalItem() { + System.out.println("Normal item SellIn value is one to test if statement limit for negative value"); + Item[] items = new Item[]{new Item("+5 Dexterity Vest", 1, 30)}; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals(29, app.items[0].quality); + assertEquals(0, app.items[0].sellIn); + } + + @Test + void sellInValueIsOneForAgedBrie() { + System.out.println("Aged Brie item SellIn value is one to test if statement limit for negative value"); + Item[] items = new Item[]{new Item("Aged Brie", 1, 30)}; + GildedRose app = new GildedRose(items); + app.updateQuality(); + assertEquals(31, app.items[0].quality); //new Item("Aged Brie", 2, 0), + assertEquals(0, app.items[0].sellIn); + } + @Test + void sellInValueCanBeNegativeStartAtZero() { + System.out.println("SellIn value of an Item can be negative until quality reach zero: start with a zero sellin Value"); Item[] items = new Item[]{new Item("+5 Dexterity Vest", 0, 30)}; GildedRose app = new GildedRose(items); int timeFrame = 10; @@ -81,15 +101,26 @@ class UpdateQualityTest { } @Test - void sellInValueCanNotBeNegatifForSulfuras() { - System.out.println("SellIn value of Sulfuras Item can not be negative bcse quality never decreases"); - Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", -1, 80)}; + void sellInValueCanBeNegativeStartNegativeSellInValue() { + System.out.println("SellIn value of an Item can be until quality reach zero: start with a negative sellinValue"); + Item[] items = new Item[]{new Item("+5 Dexterity Vest", -5, 30)}; GildedRose app = new GildedRose(items); int timeFrame = 10; for (int i = 0; i < timeFrame; i++) { app.updateQuality(); } - assertEquals(80, app.items[0].quality); // if time is > 1 + assertEquals(10, app.items[0].quality); + assertEquals(-5 -timeFrame, app.items[0].sellIn); + } + + @Test + void sellInValueCanNotChangeForSulfuras() { + System.out.println("SellIn value of Sulfuras Item can not change"); + Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", -1, 80)}; + GildedRose app = new GildedRose(items); + for (int i = 0; i < 10; i++) { + app.updateQuality(); + } assertEquals(-1, app.items[0].sellIn); } @@ -119,43 +150,37 @@ class UpdateQualityTest { @Test - void qualityItemNoMore50() { - System.out.println("The Quality of an item is never more than 50"); + void qualityItemNoMore50ForAgedBrie() { + System.out.println("The Quality of Aged Brie item is never more than 50"); Item[] items = new Item[]{new Item("Aged Brie", 10, 49)}; GildedRose app = new GildedRose(items); - assertEquals("Aged Brie", app.items[0].name); app.updateQuality(); - System.out.println("Quality: " + app.items[0].quality); assertEquals(50, app.items[0].quality); app.updateQuality(); assertEquals(50, app.items[0].quality); - } @Test - void qualitySulfurasItemNoMore80() { - System.out.println("The \"Sulfuras\"'s Quality is never more than 80"); - Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", 5, 80)}; + void qualityItemNoMore50ForBackstage() { + System.out.println("The Quality of Backstage passes to a TAFKAL80ETC concert item is never more than 50"); + Item[] items = new Item[]{new Item("Backstage passes to a TAFKAL80ETC concert", 10, 49)}; GildedRose app = new GildedRose(items); - assertEquals("Sulfuras, Hand of Ragnaros", app.items[0].name); app.updateQuality(); - System.out.println("Quality: " + app.items[0].quality); - assertEquals(80, app.items[0].quality); + assertEquals(50, app.items[0].quality); app.updateQuality(); - assertEquals(80, app.items[0].quality); + assertEquals(50, app.items[0].quality); } - @Test void itemSulfurasNotChangeQuality() { System.out.println("\"Sulfuras\", being a legendary item, never decreases in Quality and stays the same"); - Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", 5, 44)}; + Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", 5, 55)}; GildedRose app = new GildedRose(items); assertEquals("Sulfuras, Hand of Ragnaros", app.items[0].name); for (int i = 0; i < 10; i++) { app.updateQuality(); } - assertEquals(44, app.items[0].quality); + assertEquals(55, app.items[0].quality); } @Test @@ -164,13 +189,14 @@ class UpdateQualityTest { Item[] items = new Item[]{ new Item("Backstage passes to a TAFKAL80ETC concert", 10, 0), new Item("Backstage passes to a TAFKAL80ETC concert", 9, 0), - new Item("Backstage passes to a TAFKAL80ETC concert", 8, 0) + new Item("Backstage passes to a TAFKAL80ETC concert", 8, 48) }; GildedRose app = new GildedRose(items); app.updateQuality(); - for (int i = 0; i < 2; i++) { - assertEquals(2, app.items[i].quality); - } + assertEquals(2, app.items[0].quality); + assertEquals(2, app.items[1].quality); + assertEquals(50, app.items[2].quality); + } @Test @@ -179,13 +205,13 @@ class UpdateQualityTest { Item[] items = new Item[]{ new Item("Backstage passes to a TAFKAL80ETC concert", 5, 3), new Item("Backstage passes to a TAFKAL80ETC concert", 4, 3), - new Item("Backstage passes to a TAFKAL80ETC concert", 2, 3) + new Item("Backstage passes to a TAFKAL80ETC concert", 3, 48) }; GildedRose app = new GildedRose(items); app.updateQuality(); - for (int i = 0; i < 2; i++) { - assertEquals(6, app.items[i].quality); - } + assertEquals(6, app.items[0].quality); + assertEquals(6, app.items[1].quality); + assertEquals(50, app.items[2].quality); } @@ -194,14 +220,15 @@ class UpdateQualityTest { System.out.println("Quality drops to 0 after the concert"); Item[] items = new Item[]{ new Item("Backstage passes to a TAFKAL80ETC concert", 0, 2), - new Item("Backstage passes to a TAFKAL80ETC concert", 0, 3), - new Item("Backstage passes to a TAFKAL80ETC concert", 0, 7) + new Item("Backstage passes to a TAFKAL80ETC concert", 0, 11), + new Item("Backstage passes to a TAFKAL80ETC concert", 0, 48) }; GildedRose app = new GildedRose(items); app.updateQuality(); - for (Item el : items) { - assertEquals(0, el.quality); - } + assertEquals(0, app.items[0].quality); + assertEquals(0, app.items[1].quality); + assertEquals(0, app.items[2].quality); + } @Test @@ -212,9 +239,7 @@ class UpdateQualityTest { }; GildedRose app = new GildedRose(items); app.updateQuality(); - for (Item el : items) { - assertEquals(0, el.quality); - } + assertEquals(0, app.items[0].quality); } /**