From a81faa5f29c7287639d92f3ab54e8c51ae1f96ed Mon Sep 17 00:00:00 2001 From: pierre Date: Sat, 18 Feb 2023 17:34:19 +0100 Subject: [PATCH 1/4] refactor: moving up guard clause for TAFKAL80ETC Concert if quality is inferior to 50 --- Java/src/main/java/com/gildedrose/GildedRose.java | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 22c0e4a5..05dba93a 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -21,16 +21,14 @@ class GildedRose { 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) { + 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) { + if (items[i].sellIn < 6 && items[i].quality < 50) { items[i].quality = items[i].quality + 1; - } } } } From f691744b2bd16dea8ff2a09f07d3fbe3faec3d11 Mon Sep 17 00:00:00 2001 From: pierre Date: Sat, 18 Feb 2023 18:12:01 +0100 Subject: [PATCH 2/4] refactor: adding more test cases to increase testing coverage --- .../main/java/com/gildedrose/GildedRose.java | 7 -- .../com/gildedrose/UpdateQualityTest.java | 64 ++++++++++++++++--- .../com/gildedrose/updateQuantitiesTest.java | 64 ------------------- 3 files changed, 54 insertions(+), 81 deletions(-) delete mode 100644 Java/src/test/java/com/gildedrose/updateQuantitiesTest.java diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 05dba93a..9b3a5c7d 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -22,11 +22,8 @@ class GildedRose { 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; } @@ -57,8 +54,4 @@ class GildedRose { } } } - - public void updateQuantities(){ - - } } diff --git a/Java/src/test/java/com/gildedrose/UpdateQualityTest.java b/Java/src/test/java/com/gildedrose/UpdateQualityTest.java index 8f95ed52..fa1ab1d5 100644 --- a/Java/src/test/java/com/gildedrose/UpdateQualityTest.java +++ b/Java/src/test/java/com/gildedrose/UpdateQualityTest.java @@ -45,7 +45,7 @@ class UpdateQualityTest { } @Test - void qualityIteNeverNegatif() { + void qualityItemNeverNegatif() { System.out.println("The Quality of an item is never negative"); Item[] items = new Item[]{new Item("+5 Dexterity Vest", 10, 1)}; GildedRose app = new GildedRose(items); @@ -56,6 +56,33 @@ class UpdateQualityTest { assertEquals("+5 Dexterity Vest", app.items[0].name); } + @Test + void sellInValueCanBeNegative() { + System.out.println("SellIn value of an Item can be negative until quality reach zero"); + Item[] items = new Item[]{new Item("+5 Dexterity Vest", 0, 30)}; + GildedRose app = new GildedRose(items); + int timeFrame = 10; + for (int i = 0; i < timeFrame; i++) { + app.updateQuality(); + } + assertEquals(10, app.items[0].quality); + assertEquals(-timeFrame, app.items[0].sellIn); + } + + @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)}; + 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(-1, app.items[0].sellIn); + } + + @Test void agedBrieQualityIncreaseWthIteration() { System.out.println("\"Aged Brie\" actually increases in Quality the older it gets"); @@ -136,6 +163,23 @@ class UpdateQualityTest { GildedRose app = new GildedRose(items); app.updateQuality(); for (int i = 0; i < 2; i++) { + assertEquals(6, app.items[i].quality); + } + + } + + @Test + void itemBackstageQualityDropsToZeroAfterTheConcert() { + 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) + }; + GildedRose app = new GildedRose(items); + app.updateQuality(); + for (Item el : items) { + assertEquals(0, el.quality); } } @@ -144,15 +188,15 @@ 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 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); +// } } diff --git a/Java/src/test/java/com/gildedrose/updateQuantitiesTest.java b/Java/src/test/java/com/gildedrose/updateQuantitiesTest.java deleted file mode 100644 index 83f682b9..00000000 --- a/Java/src/test/java/com/gildedrose/updateQuantitiesTest.java +++ /dev/null @@ -1,64 +0,0 @@ -package com.gildedrose; - -import org.junit.jupiter.api.Test; - -import static org.junit.jupiter.api.Assertions.assertEquals; - - -/** - * Testing for Selling items - */ - -class updateQuantitiesTest { - @Test - void itemsSoldAfterConcert() { - 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("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) - }; - GildedRose app = new GildedRose(items); - app.updateQuantities(); -// assertEquals(, app.items.length); - } - - @Test - void itemBackstageQualityDropsToZeroAfterTheConcert() { - System.out.println("Quality drops to 0 after the concert"); - Item[] items = new Item[]{ - new Item("Backstage passes to a TAFKAL80ETC concert", 10, 2), - new Item("Backstage passes to a TAFKAL80ETC concert", 9, 3), - new Item("Backstage passes to a TAFKAL80ETC concert", 8, 7) - }; - GildedRose app = new GildedRose(items); - app.updateQuantities(); - for ( Item el: items) { - assertEquals(0, el.quality); - } - } - - @Test - void itemSulfurasNotSold() { - System.out.println("\"Sulfuras\", being a legendary item, never has to be sold"); - 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("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) - }; - GildedRose app = new GildedRose(items); - app.updateQuantities(); - assertEquals(2, app.items.length); - } -} - - From ef58e2bf7a0fa1519c5493888fb55a507aab06c4 Mon Sep 17 00:00:00 2001 From: pierre Date: Sat, 18 Feb 2023 18:38:02 +0100 Subject: [PATCH 3/4] fix: fixing the itemSulfurasNotChangeQuality test case --- Java/src/test/java/com/gildedrose/UpdateQualityTest.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Java/src/test/java/com/gildedrose/UpdateQualityTest.java b/Java/src/test/java/com/gildedrose/UpdateQualityTest.java index fa1ab1d5..ab7f3e3b 100644 --- a/Java/src/test/java/com/gildedrose/UpdateQualityTest.java +++ b/Java/src/test/java/com/gildedrose/UpdateQualityTest.java @@ -126,15 +126,15 @@ class UpdateQualityTest { @Test - void itemSulfurasNotDecreasedQuality() { - System.out.println("\"Sulfuras\", being a legendary item, never decreases in Quality"); - Item[] items = new Item[]{new Item("Sulfuras, Hand of Ragnaros", 5, 79)}; + 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)}; GildedRose app = new GildedRose(items); assertEquals("Sulfuras, Hand of Ragnaros", app.items[0].name); for (int i = 0; i < 10; i++) { app.updateQuality(); } - assertEquals(79, app.items[0].quality); + assertEquals(44, app.items[0].quality); } @Test From 33f38a7ec93575707465d59feea9b3d3010ada27 Mon Sep 17 00:00:00 2001 From: pierre Date: Sun, 19 Feb 2023 10:33:27 +0100 Subject: [PATCH 4/4] refactor: making the UpdateQuality method more readable by removing the tree of if/else statements while adding more specific tests cases to avoid regression --- .../main/java/com/gildedrose/GildedRose.java | 66 ++++++++----------- .../com/gildedrose/UpdateQualityTest.java | 40 ++++++++--- 2 files changed, 60 insertions(+), 46 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 9b3a5c7d..722efa42 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -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; } } } diff --git a/Java/src/test/java/com/gildedrose/UpdateQualityTest.java b/Java/src/test/java/com/gildedrose/UpdateQualityTest.java index ab7f3e3b..9e5fa237 100644 --- a/Java/src/test/java/com/gildedrose/UpdateQualityTest.java +++ b/Java/src/test/java/com/gildedrose/UpdateQualityTest.java @@ -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); + } }