From 8d00059cc2175d2464e795a45b574ef0bf044b16 Mon Sep 17 00:00:00 2001 From: Konstantin Pavlov Date: Sun, 30 Jun 2019 08:53:10 +0200 Subject: [PATCH] parametrize default quality rule --- .../gildedrose/rules/ConjuredQualityRule.java | 11 +++----- .../gildedrose/rules/DefaultQualityRule.java | 26 ++++++++++++++++--- .../gildedrose/GildedRoseConjuredTest.java | 17 ++++++++++++ 3 files changed, 43 insertions(+), 11 deletions(-) diff --git a/Java/src/main/java/com/gildedrose/rules/ConjuredQualityRule.java b/Java/src/main/java/com/gildedrose/rules/ConjuredQualityRule.java index 74093fb2..fda66e3b 100644 --- a/Java/src/main/java/com/gildedrose/rules/ConjuredQualityRule.java +++ b/Java/src/main/java/com/gildedrose/rules/ConjuredQualityRule.java @@ -1,16 +1,13 @@ package com.gildedrose.rules; -import static java.lang.Integer.max; +public class ConjuredQualityRule extends DefaultQualityRule { -public class ConjuredQualityRule implements QualityRule { + public ConjuredQualityRule() { + super(2, null, true); + } @Override public boolean shouldApply(String itemName) { return itemName != null && itemName.startsWith("Conjured "); } - - @Override - public Result calculateQuality(int oldQuality, int newSellIn) { - return new Result(max(oldQuality - 2, 0), true); - } } diff --git a/Java/src/main/java/com/gildedrose/rules/DefaultQualityRule.java b/Java/src/main/java/com/gildedrose/rules/DefaultQualityRule.java index 1a2eb403..b99692b0 100644 --- a/Java/src/main/java/com/gildedrose/rules/DefaultQualityRule.java +++ b/Java/src/main/java/com/gildedrose/rules/DefaultQualityRule.java @@ -4,20 +4,38 @@ import static java.lang.Integer.max; public class DefaultQualityRule implements QualityRule { + private final int multiplier; + private final String expectedItemName; + private final boolean isFinalRule; + + public DefaultQualityRule() { + this(1, null, false); + } + + public DefaultQualityRule(int multiplier, String itemName, boolean isFinalRule) { + this.multiplier = multiplier; + this.expectedItemName = itemName; + this.isFinalRule = isFinalRule; + } + @Override public boolean shouldApply(String itemName) { - return true; + if (expectedItemName != null) { + return expectedItemName.equals(itemName); + } else { + return true; + } } @Override public Result calculateQuality(int oldQuality, int newSellIn) { final int newQuality; if (newSellIn < 0) { - newQuality = oldQuality - 2; + newQuality = oldQuality - 2 * multiplier; } else { - newQuality = oldQuality - 1; + newQuality = oldQuality - multiplier; } - return new Result(max(newQuality, 0), false); + return new Result(max(newQuality, 0), isFinalRule); } } diff --git a/Java/src/test/java/com/gildedrose/GildedRoseConjuredTest.java b/Java/src/test/java/com/gildedrose/GildedRoseConjuredTest.java index 7ccf9dd2..8db09c4b 100644 --- a/Java/src/test/java/com/gildedrose/GildedRoseConjuredTest.java +++ b/Java/src/test/java/com/gildedrose/GildedRoseConjuredTest.java @@ -29,4 +29,21 @@ class GildedRoseConjuredTest { final int expectedQuality = max(initialQuality - 2, 0); assertItem(item, ITEM_NAME, 0, expectedQuality); } + + @Feature("\"Conjured\" items degrade in Quality twice as fast as normal items") + @Feature("The Quality of an item is never negative") + @ParameterizedTest(name = "Initial quality: {arguments}") + @ValueSource(ints = {0, 1, 2, 3, 49, 50}) + void shouldDegradeInQualityTwiceFastForOverdueItems(int initialQuality) { + // given + GildedRose app = prepareApp(new Item(ITEM_NAME, 0, initialQuality)); + + // when + app.updateQuality(); + + // then + final Item item = app.items[0]; + final int expectedQuality = max(initialQuality - 4, 0); + assertItem(item, ITEM_NAME, -1, expectedQuality); + } }