From a568d2a132c6e7c7fa54b26b953c1a7909af03c0 Mon Sep 17 00:00:00 2001 From: Nemanja Spajic Date: Thu, 2 Jun 2022 00:00:02 +0200 Subject: [PATCH] refactoring: Michael, Alex and Nemanja did refactoring excerxise --- Java/pom.xml | 51 ++++- .../main/java/com/gildedrose/GildedRose.java | 55 +---- Java/src/main/java/com/gildedrose/Item.java | 21 -- .../java/com/gildedrose/item/AgedBrie.java | 22 ++ .../com/gildedrose/item/BackstageTicket.java | 25 +++ .../java/com/gildedrose/item/Conjured.java | 23 ++ .../main/java/com/gildedrose/item/Item.java | 37 ++++ .../java/com/gildedrose/item/Sulfuras.java | 17 ++ .../java/com/gildedrose/GildedRoseTest.java | 208 +++++++++++++++++- .../java/com/gildedrose/TexttestFixture.java | 28 ++- 10 files changed, 396 insertions(+), 91 deletions(-) delete mode 100644 Java/src/main/java/com/gildedrose/Item.java create mode 100644 Java/src/main/java/com/gildedrose/item/AgedBrie.java create mode 100644 Java/src/main/java/com/gildedrose/item/BackstageTicket.java create mode 100644 Java/src/main/java/com/gildedrose/item/Conjured.java create mode 100644 Java/src/main/java/com/gildedrose/item/Item.java create mode 100644 Java/src/main/java/com/gildedrose/item/Sulfuras.java diff --git a/Java/pom.xml b/Java/pom.xml index 3bd6aff8..c1795431 100644 --- a/Java/pom.xml +++ b/Java/pom.xml @@ -10,7 +10,7 @@ 0.0.1-SNAPSHOT - 1.8 + 11 5.8.2 3.1 3.0.0-M4 @@ -24,6 +24,14 @@ ${junit.jupiter.version} test + + + org.assertj + assertj-core + 3.21.0 + test + + @@ -36,6 +44,47 @@ ${java.version} + + com.diffplug.spotless + spotless-maven-plugin + 2.22.5 + + + + + + + *.md + .gitignore + + + + + + true + 4 + + + + + + + + + + 1.8 + + + + + + /* (C)$YEAR */ + + + + maven-surefire-plugin ${maven.maven-surefire-plugin.version} diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index e6feb751..6863df47 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,5 +1,8 @@ +/* (C)2022 */ package com.gildedrose; +import com.gildedrose.item.Item; + class GildedRose { Item[] items; @@ -9,54 +12,8 @@ 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) { - if (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].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; - } - } - } + items[i].updateQuality(); + items[i].updateSellIn(); } } -} \ 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 deleted file mode 100644 index 465729ec..00000000 --- a/Java/src/main/java/com/gildedrose/Item.java +++ /dev/null @@ -1,21 +0,0 @@ -package com.gildedrose; - -public class Item { - - public String name; - - public int sellIn; - - public int quality; - - public Item(String name, int sellIn, int quality) { - this.name = name; - this.sellIn = sellIn; - this.quality = quality; - } - - @Override - public String toString() { - return this.name + ", " + this.sellIn + ", " + this.quality; - } -} diff --git a/Java/src/main/java/com/gildedrose/item/AgedBrie.java b/Java/src/main/java/com/gildedrose/item/AgedBrie.java new file mode 100644 index 00000000..b3d6a023 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/AgedBrie.java @@ -0,0 +1,22 @@ +/* (C)2022 */ +package com.gildedrose.item; + +public class AgedBrie extends Item { + + public static final String AGED_BRIE = "Aged Brie"; + + public AgedBrie(int sellIn, int quality) { + super(AGED_BRIE, sellIn, quality); + } + + @Override + public void updateQuality() { + if (quality < 50) { + if (sellIn <= 0) { + quality += 2; + } else { + quality += 1; + } + } + } +} diff --git a/Java/src/main/java/com/gildedrose/item/BackstageTicket.java b/Java/src/main/java/com/gildedrose/item/BackstageTicket.java new file mode 100644 index 00000000..89fe4fda --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/BackstageTicket.java @@ -0,0 +1,25 @@ +/* (C)2022 */ +package com.gildedrose.item; + +public class BackstageTicket extends Item { + public static final String BACKSTAGE_TICKET = "Backstage passes to a TAFKAL80ETC concert"; + + public BackstageTicket(int sellIn, int quality) { + super(BACKSTAGE_TICKET, sellIn, quality); + } + + @Override + public void updateQuality() { + if (quality < 50) { + if (sellIn <= 0) { + quality = 0; + } else if (sellIn < 6) { + quality += 3; + } else if (sellIn < 11) { + quality += 2; + } else { + quality += 1; + } + } + } +} diff --git a/Java/src/main/java/com/gildedrose/item/Conjured.java b/Java/src/main/java/com/gildedrose/item/Conjured.java new file mode 100644 index 00000000..262ce83b --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/Conjured.java @@ -0,0 +1,23 @@ +/* (C)2022 */ +package com.gildedrose.item; + +public class Conjured extends Item { + + public static final String CONJURED = "Conjured"; + + public Conjured(int sellIn, int quality) { + super(CONJURED, sellIn, quality); + } + + @Override + public void updateQuality() { + if (sellIn <= 0) { + quality -= 4; + } else { + quality -= 2; + } + if (quality < 0) { + quality = 0; + } + } +} diff --git a/Java/src/main/java/com/gildedrose/item/Item.java b/Java/src/main/java/com/gildedrose/item/Item.java new file mode 100644 index 00000000..fe5f75ce --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/Item.java @@ -0,0 +1,37 @@ +/* (C)2022 */ +package com.gildedrose.item; + +public class Item { + + public String name; + + public int sellIn; + + public int quality; + + public Item(String name, int sellIn, int quality) { + this.name = name; + this.sellIn = sellIn; + this.quality = quality; + } + + public void updateQuality() { + if (sellIn <= 0) { + quality -= 2; + } else { + quality -= 1; + } + if (quality < 0) { + quality = 0; + } + } + + public void updateSellIn() { + sellIn -= 1; + } + + @Override + public String toString() { + return this.name + ", " + this.sellIn + ", " + this.quality; + } +} diff --git a/Java/src/main/java/com/gildedrose/item/Sulfuras.java b/Java/src/main/java/com/gildedrose/item/Sulfuras.java new file mode 100644 index 00000000..c15fa123 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/item/Sulfuras.java @@ -0,0 +1,17 @@ +/* (C)2022 */ +package com.gildedrose.item; + +public class Sulfuras extends Item { + public static final String SULFURAS = "Sulfuras, Hand of Ragnaros"; + public static final int QUALITY = 80; + + public Sulfuras(int sellIn) { + super(SULFURAS, sellIn, QUALITY); + } + + @Override + public void updateQuality() {} + + @Override + public void updateSellIn() {} +} diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index 8ae29eec..e725851a 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -1,17 +1,209 @@ +/* (C)2022 */ package com.gildedrose; -import org.junit.jupiter.api.Test; +import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertEquals; +import com.gildedrose.item.AgedBrie; +import com.gildedrose.item.BackstageTicket; +import com.gildedrose.item.Conjured; +import com.gildedrose.item.Item; +import com.gildedrose.item.Sulfuras; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; class GildedRoseTest { - @Test - void foo() { - Item[] items = new Item[] { new Item("foo", 0, 0) }; - GildedRose app = new GildedRose(items); - app.updateQuality(); - assertEquals("fixme", app.items[0].name); + public static final String I_AM_NOT_SPECIAL = "I am not special"; + private Item sulfuras; + + @BeforeEach + void setup() { + sulfuras = new Sulfuras(5); } + @Test + void updateQuality_nonSpecialItem_thenDecreaseQualityAndSellIn() { + final Item notSpecialItem = new Item(I_AM_NOT_SPECIAL, 2, 5); + final GildedRose sut = initializeApp(notSpecialItem); + + updateQuality(sut, 1); + + assertThat(notSpecialItem.quality).isEqualTo(4); + assertThat(notSpecialItem.sellIn).isEqualTo(1); + } + + @Test + void updateQuality2_nonSpecialItem_thenDecreaseQualityAndSellInBy2() { + final Item notSpecialItem = new Item(I_AM_NOT_SPECIAL, 2, 5); + final GildedRose sut = initializeApp(notSpecialItem); + + updateQuality(sut, 2); + + assertThat(notSpecialItem.quality).isEqualTo(3); + assertThat(notSpecialItem.sellIn).isZero(); + } + + @Test + void updateQuality_nonSpecialItemWithZeroSellIn_thenDecreaseQualityBy2() { + final Item notSpecialItem = new Item(I_AM_NOT_SPECIAL, 0, 5); + final GildedRose sut = initializeApp(notSpecialItem); + + updateQuality(sut, 1); + + assertThat(notSpecialItem.quality).isEqualTo(3); + assertThat(notSpecialItem.sellIn).isEqualTo(-1); + } + + @Test + void updateQuality2_nonSpecialItemWith1SellIn_thenDecreaseQualityBy3() { + final Item notSpecialItem = new Item(I_AM_NOT_SPECIAL, 1, 8); + final GildedRose sut = initializeApp(notSpecialItem); + + updateQuality(sut, 2); + + assertThat(notSpecialItem.quality).isEqualTo(5); + assertThat(notSpecialItem.sellIn).isEqualTo(-1); + } + + @Test + void updateQuality_nonSpecialItemWith0Quality_thenDecreaseOnlySellIn() { + final Item notSpecialItem = new Item(I_AM_NOT_SPECIAL, 1, 0); + final GildedRose sut = initializeApp(notSpecialItem); + + updateQuality(sut, 1); + + assertThat(notSpecialItem.quality).isZero(); + assertThat(notSpecialItem.sellIn).isZero(); + } + + @Test + void updateQuality_agedBrie_thenIncreaseQuality() { + final Item agedBrie = new AgedBrie(3, 5); + final GildedRose sut = initializeApp(agedBrie); + + updateQuality(sut, 1); + + assertThat(agedBrie.sellIn).isEqualTo(2); + assertThat(agedBrie.quality).isEqualTo(6); + } + + @Test + void updateQuality2_agedBrie49_thenIncreaseQualityToMax50() { + final Item agedBrie = new AgedBrie(3, 49); + final GildedRose sut = initializeApp(agedBrie); + + updateQuality(sut, 2); + + assertThat(agedBrie.sellIn).isEqualTo(1); + assertThat(agedBrie.quality).isEqualTo(50); + } + + @Test + void updateQuality_agedBrieWithSellIn0_thenIncreaseQualityBy2() { + final Item agedBrie = new AgedBrie(0, 5); + final GildedRose sut = initializeApp(agedBrie); + + updateQuality(sut, 1); + + assertThat(agedBrie.sellIn).isEqualTo(-1); + assertThat(agedBrie.quality).isEqualTo(7); + } + + @Test + void updateQuality_sulfuras_thenQualityStaysTheSame() { + final GildedRose sut = initializeApp(sulfuras); + + updateQuality(sut, 1); + + assertThat(sulfuras.quality).isEqualTo(80); + assertThat(sulfuras.sellIn).isEqualTo(5); + } + + @Test + void updateQuality2_backstageTicket11DaysLeft_thenIncreaseQualityBy3() { + final Item backStage = new BackstageTicket(11, 10); + final GildedRose sut = initializeApp(backStage); + + updateQuality(sut, 2); + + assertThat(backStage.sellIn).isEqualTo(9); + assertThat(backStage.quality).isEqualTo(13); + } + + @Test + void updateQuality2_backstageTicket6DaysLeft_thenIncreaseQualityBy5() { + final Item backStage = new BackstageTicket(6, 10); + final GildedRose sut = initializeApp(backStage); + + updateQuality(sut, 2); + + assertThat(backStage.sellIn).isEqualTo(4); + assertThat(backStage.quality).isEqualTo(15); + } + + @Test + void updateQuality_backstageTicket1DayLeft_thenIncreaseQualityBy3() { + final Item backStage = new BackstageTicket(1, 10); + final GildedRose sut = initializeApp(backStage); + + updateQuality(sut, 1); + + assertThat(backStage.sellIn).isZero(); + assertThat(backStage.quality).isEqualTo(13); + } + + @Test + void updateQuality2_backstageTicket1DayLeft_thenDecreaseQualityTo0() { + final Item backStage = new BackstageTicket(1, 10); + final GildedRose sut = initializeApp(backStage); + + updateQuality(sut, 2); + + assertThat(backStage.sellIn).isEqualTo(-1); + assertThat(backStage.quality).isZero(); + } + + @Test + void updateQuality_conjured_thenDecreaseQualityBy2() { + final Item conjured = new Conjured(4, 5); + final GildedRose sut = initializeApp(conjured); + + updateQuality(sut, 1); + + assertThat(conjured.sellIn).isEqualTo(3); + assertThat(conjured.quality).isEqualTo(3); + } + + @Test + void updateQuality2_conjuredWithQuality3_thenDecreaseQualityTo0() { + final Item conjured = new Conjured(4, 3); + final GildedRose sut = initializeApp(conjured); + + updateQuality(sut, 2); + + assertThat(conjured.sellIn).isEqualTo(2); + assertThat(conjured.quality).isZero(); + } + + @Test + void updateQuality_conjuredSellIn0_thenDecreaseQualityBy4() { + final Item conjured = new Conjured(0, 5); + final GildedRose sut = initializeApp(conjured); + + updateQuality(sut, 1); + + assertThat(conjured.sellIn).isEqualTo(-1); + assertThat(conjured.quality).isEqualTo(1); + } + + private void updateQuality(final GildedRose sut, final int times) { + for (int i = 0; i < times; i++) { + sut.updateQuality(); + } + } + + private GildedRose initializeApp(final Item item) { + Item[] items = new Item[] {item}; + return new GildedRose(items); + } } diff --git a/Java/src/test/java/com/gildedrose/TexttestFixture.java b/Java/src/test/java/com/gildedrose/TexttestFixture.java index d059c88f..bdbeaf29 100644 --- a/Java/src/test/java/com/gildedrose/TexttestFixture.java +++ b/Java/src/test/java/com/gildedrose/TexttestFixture.java @@ -1,20 +1,25 @@ +/* (C)2022 */ package com.gildedrose; +import com.gildedrose.item.Item; + public class TexttestFixture { public static void main(String[] args) { System.out.println("OMGHAI!"); - 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), - // this conjured item does not work properly yet - new Item("Conjured Mana Cake", 3, 6) }; + 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), + // this conjured item does not work properly yet + new Item("Conjured Mana Cake", 3, 6) + }; GildedRose app = new GildedRose(items); @@ -33,5 +38,4 @@ public class TexttestFixture { app.updateQuality(); } } - }