From 33f9bc4d5f4b917bbf26d6df3bd1e5379bc0c38f Mon Sep 17 00:00:00 2001 From: turndownfawad <55958845+turndownfawad@users.noreply.github.com> Date: Fri, 7 Jul 2023 17:33:46 +0200 Subject: [PATCH] intermediate refactor it's not what i was hoping for. my preferred solution would be valid/acceptable, but i would have had to change all the tests. ain't nobody got time for that rn. :D --- .../java/com/gildedrose/AgedBrieStrategy.java | 11 ++++ .../gildedrose/BackstagePassesStrategy.java | 19 ++++++ .../java/com/gildedrose/ConjuredStrategy.java | 15 +++++ .../java/com/gildedrose/DefaultStrategy.java | 11 ++++ .../main/java/com/gildedrose/GildedRose.java | 65 +++++-------------- .../com/gildedrose/QualityUpdateStrategy.java | 5 ++ .../java/com/gildedrose/GildedRoseTest.java | 20 +++--- 7 files changed, 87 insertions(+), 59 deletions(-) create mode 100644 Java/src/main/java/com/gildedrose/AgedBrieStrategy.java create mode 100644 Java/src/main/java/com/gildedrose/BackstagePassesStrategy.java create mode 100644 Java/src/main/java/com/gildedrose/ConjuredStrategy.java create mode 100644 Java/src/main/java/com/gildedrose/DefaultStrategy.java create mode 100644 Java/src/main/java/com/gildedrose/QualityUpdateStrategy.java diff --git a/Java/src/main/java/com/gildedrose/AgedBrieStrategy.java b/Java/src/main/java/com/gildedrose/AgedBrieStrategy.java new file mode 100644 index 00000000..1162e11e --- /dev/null +++ b/Java/src/main/java/com/gildedrose/AgedBrieStrategy.java @@ -0,0 +1,11 @@ +package com.gildedrose; + +public enum AgedBrieStrategy implements QualityUpdateStrategy { + INSTANCE; + + @Override + public void applyTo(Item item) { + item.quality = Math.min(50, item.sellIn < 0 ? item.quality+2 : item.quality+1); + --item.sellIn; + } +} diff --git a/Java/src/main/java/com/gildedrose/BackstagePassesStrategy.java b/Java/src/main/java/com/gildedrose/BackstagePassesStrategy.java new file mode 100644 index 00000000..37c5318f --- /dev/null +++ b/Java/src/main/java/com/gildedrose/BackstagePassesStrategy.java @@ -0,0 +1,19 @@ +package com.gildedrose; + +public enum BackstagePassesStrategy implements QualityUpdateStrategy { + INSTANCE; + + @Override + public void applyTo(Item item) { + if (item.sellIn <= 0) { + item.quality = 0; + } else if (item.sellIn >= 10) { + item.quality = Math.min(50, item.quality+1); + } else if (item.sellIn >= 5) { + item.quality = Math.min(50, item.quality+2); + } else { + item.quality = Math.min(50, item.quality+3); + } + --item.sellIn; + } +} diff --git a/Java/src/main/java/com/gildedrose/ConjuredStrategy.java b/Java/src/main/java/com/gildedrose/ConjuredStrategy.java new file mode 100644 index 00000000..7e34087f --- /dev/null +++ b/Java/src/main/java/com/gildedrose/ConjuredStrategy.java @@ -0,0 +1,15 @@ +package com.gildedrose; + +public enum ConjuredStrategy implements QualityUpdateStrategy { + INSTANCE; + + @Override + public void applyTo(Item item) { + if (item.sellIn > 0) { + item.quality = Math.max(0, item.quality-2); + } else { + item.quality = Math.max(0, item.quality-4); + } + --item.sellIn; + } +} diff --git a/Java/src/main/java/com/gildedrose/DefaultStrategy.java b/Java/src/main/java/com/gildedrose/DefaultStrategy.java new file mode 100644 index 00000000..f2c5a00a --- /dev/null +++ b/Java/src/main/java/com/gildedrose/DefaultStrategy.java @@ -0,0 +1,11 @@ +package com.gildedrose; + +public enum DefaultStrategy implements QualityUpdateStrategy { + INSTANCE; + + @Override + public void applyTo(Item item) { + item.quality = Math.max(0, item.sellIn > 0 ? (item.quality-1) : (item.quality-2)); + item.sellIn = item.sellIn - 1; + } +} diff --git a/Java/src/main/java/com/gildedrose/GildedRose.java b/Java/src/main/java/com/gildedrose/GildedRose.java index e6feb751..d0eb04a8 100644 --- a/Java/src/main/java/com/gildedrose/GildedRose.java +++ b/Java/src/main/java/com/gildedrose/GildedRose.java @@ -1,5 +1,9 @@ package com.gildedrose; +import java.util.Arrays; +import java.util.List; +import java.util.stream.Collectors; + class GildedRose { Item[] items; @@ -8,55 +12,18 @@ 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; + Arrays.stream(items).forEach(this::updateQuality); + } - 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; - } - } - } + public void updateQuality(Item item) { + if (item.name.equals("Aged Brie")) { + AgedBrieStrategy.INSTANCE.applyTo(item); + } else if (item.name.startsWith("Backstage passes")) { + BackstagePassesStrategy.INSTANCE.applyTo(item); + } else if (item.name.startsWith("Conjured")) { + ConjuredStrategy.INSTANCE.applyTo(item); + } else { + DefaultStrategy.INSTANCE.applyTo(item); } } -} \ No newline at end of file +} diff --git a/Java/src/main/java/com/gildedrose/QualityUpdateStrategy.java b/Java/src/main/java/com/gildedrose/QualityUpdateStrategy.java new file mode 100644 index 00000000..682b4f67 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/QualityUpdateStrategy.java @@ -0,0 +1,5 @@ +package com.gildedrose; + +public interface QualityUpdateStrategy { + void applyTo(Item item); +} diff --git a/Java/src/test/java/com/gildedrose/GildedRoseTest.java b/Java/src/test/java/com/gildedrose/GildedRoseTest.java index e487ec74..499c20df 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseTest.java @@ -10,25 +10,25 @@ class GildedRoseTest { @Test @DisplayName("Regular item") void updateQualityRegularItem() { - Item itemUnderTest = new Item("Sample Regular Item", 1, 5); - Item[] items = new Item[] { itemUnderTest }; + Item item = new Item("Sample Regular Item", 1, 5); + Item[] items = new Item[] { item }; GildedRose app = new GildedRose(items); app.updateQuality(); - assertEquals(0, itemUnderTest.sellIn); - assertEquals(4, itemUnderTest.quality); + assertEquals(0, item.sellIn); + assertEquals(4, item.quality); app.updateQuality(); - assertEquals(-1, itemUnderTest.sellIn); - assertEquals(2, itemUnderTest.quality); + assertEquals(-1, item.sellIn); + assertEquals(2, item.quality); app.updateQuality(); - assertEquals(-2, itemUnderTest.sellIn); - assertEquals(0, itemUnderTest.quality); + assertEquals(-2, item.sellIn); + assertEquals(0, item.quality); app.updateQuality(); - assertEquals(-3, itemUnderTest.sellIn); - assertEquals(0, itemUnderTest.quality); + assertEquals(-3, item.sellIn); + assertEquals(0, item.quality); } @Test