diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index 88a3cb82..627e753a 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -5,11 +5,13 @@ class GildedRose { public static final String AGED_BRIE = "Aged Brie"; public static final String BACKSTAGE_PASSES = "Backstage passes to a TAFKAL80ETC concert"; public static final String SULFURAS = "Sulfuras, Hand of Ragnaros"; - public static final int QUALITY_LEVEL_0 = 0; - public static final int QUALITY_LEVEL_50 = 50; + + public static final int MINIMUM_QUALITY = 0; + public static final int MAXIMUM_QUALITY = 50; + public static final int SELL_IN_DAY11 = 11; public static final int SELL_IN_DAY6 = 6; - public static final int SELL_IN_DAY0 = 0; + public static final int SELL_IN_EXPIRED = 0; Item[] items; @@ -31,65 +33,81 @@ class GildedRose { if (isAgedBrie) { // processing quality - if (item.quality < QUALITY_LEVEL_50) { - item.quality = item.quality + 1; + if (item.quality < MAXIMUM_QUALITY) { + increaseQuality(item); } // processing sell date - item.sellIn = item.sellIn - 1; + decreaseDay(item); // processing sell date - if (item.sellIn < SELL_IN_DAY0) { - if (item.quality < QUALITY_LEVEL_50) { - item.quality = item.quality + 1; + if (isExpired(item)) { + if (item.quality < MAXIMUM_QUALITY) { + increaseQuality(item); } } } else if (isBackstagePasses) { // processing quality - if (item.quality < QUALITY_LEVEL_50) { - item.quality = item.quality + 1; + if (item.quality < MAXIMUM_QUALITY) { + increaseQuality(item); // processing sell date if (item.sellIn < SELL_IN_DAY11) { - if (item.quality < QUALITY_LEVEL_50) { - item.quality = item.quality + 1; + if (item.quality < MAXIMUM_QUALITY) { + increaseQuality(item); } } if (item.sellIn < SELL_IN_DAY6) { - if (item.quality < QUALITY_LEVEL_50) { - item.quality = item.quality + 1; + if (item.quality < MAXIMUM_QUALITY) { + increaseQuality(item); } } } // processing sell date - item.sellIn = item.sellIn - 1; + decreaseDay(item); // processing sell date - if (item.sellIn < SELL_IN_DAY0) { - item.quality = QUALITY_LEVEL_0; + if (isExpired(item)) { + item.quality = MINIMUM_QUALITY; } } else if (isSulfuras) { //sulfuras is doing nothing } else { //standard item - if (item.quality > QUALITY_LEVEL_0) { - item.quality = item.quality - 1; + if (item.quality > MINIMUM_QUALITY) { + decreaseQuality(item); } // processing sell date - item.sellIn = item.sellIn - 1; + decreaseDay(item); // processing sell date - if (item.sellIn < SELL_IN_DAY0) { + if (isExpired(item)) { // processing quality - if (item.quality > QUALITY_LEVEL_0) { - item.quality = item.quality - 1; + if (item.quality > MINIMUM_QUALITY) { + decreaseQuality(item); } } } } + private static void decreaseDay(Item item) { + item.sellIn = item.sellIn - 1; + } + + private static boolean isExpired(Item item) { + return item.sellIn < SELL_IN_EXPIRED; + } + + private static void decreaseQuality(Item item) { + item.quality = item.quality - 1; + } + + private static void increaseQuality(Item item) { + item.quality = item.quality + 1; + } + } diff --git a/Java/src/test/java/com/gildedrose/AgedBrieTest.java b/Java/src/test/java/com/gildedrose/AgedBrieTest.java new file mode 100644 index 00000000..8f7e61a7 --- /dev/null +++ b/Java/src/test/java/com/gildedrose/AgedBrieTest.java @@ -0,0 +1,24 @@ +package com.gildedrose; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class AgedBrieTest { + + @Test + void agedBrieQualityIncreasesByOne() { + //given + Item agedBrie = new Item("Aged Brie", 5, 2); + Item[] items = new Item[] {agedBrie}; + + //when + GildedRose app = new GildedRose(items); + app.updateQuality(); + + //then + assertEquals(4, app.items[0].sellIn); + assertEquals(3, app.items[0].quality); + } + +} diff --git a/Java/src/test/java/com/gildedrose/BackStageTest.java b/Java/src/test/java/com/gildedrose/BackStageTest.java new file mode 100644 index 00000000..09e12dc2 --- /dev/null +++ b/Java/src/test/java/com/gildedrose/BackStageTest.java @@ -0,0 +1,61 @@ +package com.gildedrose; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class BackStageTest { + + @Test + void backStageQualityIncreasesByTwoWhenThereAre10DaysOrLess() { + //given + Item backStage10 = new Item("Backstage passes to a TAFKAL80ETC concert", 10, 2); + Item backStage6 = new Item("Backstage passes to a TAFKAL80ETC concert", 6, 2); + Item[] items = new Item[] {backStage10, backStage6}; + + //when + GildedRose app = new GildedRose(items); + app.updateQuality(); + + //then + assertEquals(9, app.items[0].sellIn); + assertEquals(4, app.items[0].quality); + + assertEquals(5, app.items[1].sellIn); + assertEquals(4, app.items[1].quality); + } + + @Test + void backStageQualityIncreasesByThreeWhenThereAre5DaysOrLess() { + //given + Item backStage5 = new Item("Backstage passes to a TAFKAL80ETC concert", 5, 3); + Item backStage4 = new Item("Backstage passes to a TAFKAL80ETC concert", 4, 3); + Item[] items = new Item[] {backStage5, backStage4}; + + //when + GildedRose app = new GildedRose(items); + app.updateQuality(); + + //then + assertEquals(4, app.items[0].sellIn); + assertEquals(6, app.items[0].quality); + + assertEquals(3, app.items[1].sellIn); + assertEquals(6, app.items[1].quality); + } + + @Test + void backStageQualityDecreasesToZeroWhenIsExpired() { + //given + Item backStage = new Item("Backstage passes to a TAFKAL80ETC concert", 0, 3); + Item[] items = new Item[] {backStage}; + + //when + GildedRose app = new GildedRose(items); + app.updateQuality(); + + //then + assertEquals(-1, app.items[0].sellIn); + assertEquals(0, app.items[0].quality); + } +} diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 7c5fc0a2..291f717c 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -6,12 +6,65 @@ import static org.junit.jupiter.api.Assertions.assertEquals; class GildedRoseTest { + //GENERAL RULES @Test - void foo() { - Item[] items = new Item[] { new Item("foo", 0, 0) }; + void whenSellInDateIsPassed_qualityDegradesTwiceAsFast() { + //given + Item testItem = new Item("standard item", 0, 3); + Item[] items = new Item[] {testItem}; + + //when GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals("foo", app.items[0].name); + + //then + assertEquals(-1, app.items[0].sellIn); + assertEquals(1, app.items[0].quality); + } + + @Test + void qualityOfAnItemIsNeverNegative() { + //given + Item testItem = new Item("standard item", 0, 0); + Item[] items = new Item[] {testItem}; + + //when + GildedRose app = new GildedRose(items); + app.updateQuality(); + + //then + assertEquals(-1, app.items[0].sellIn); + assertEquals(0, app.items[0].quality); + } + + @Test + void qualityOfAnItemIsNeverMoreThan50() { + //given + Item testItem = new Item("standard item", 5, 50); + Item[] items = new Item[] {testItem}; + + //when + GildedRose app = new GildedRose(items); + app.updateQuality(); + + //then + assertEquals(4, app.items[0].sellIn); + assertEquals(50, app.items[0].quality); + } + + @Test + void standardItemQualityDecreasesByOne() { + //given + Item testItem = new Item("standard item", 5, 2); + Item[] items = new Item[] {testItem}; + + //when + GildedRose app = new GildedRose(items); + app.updateQuality(); + + //then + assertEquals(4, app.items[0].sellIn); + assertEquals(1, app.items[0].quality); } } diff --git a/Java/src/test/java/com/gildedrose/SulfurasTest.java b/Java/src/test/java/com/gildedrose/SulfurasTest.java new file mode 100644 index 00000000..4aa242bf --- /dev/null +++ b/Java/src/test/java/com/gildedrose/SulfurasTest.java @@ -0,0 +1,38 @@ +package com.gildedrose; + +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +class SulfurasTest { + + @Test + void sulfurasNeverChanges() { + //given + Item sulfuras = new Item("Sulfuras, Hand of Ragnaros", 0, 80); + Item[] items = new Item[] {sulfuras}; + + //when + GildedRose app = new GildedRose(items); + app.updateQuality(); + + //then + assertEquals(0, app.items[0].sellIn); + assertEquals(80, app.items[0].quality); + } + + @Test + void sulfurasQualityLevelIsAlways80() { + //given + Item sulfuras = new Item("Sulfuras, Hand of Ragnaros", 0, 80); + Item[] items = new Item[] {sulfuras}; + + //when + GildedRose app = new GildedRose(items); + app.updateQuality(); + + //then + assertEquals(80, app.items[0].quality); + } + +}