mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 06:21:29 +00:00
parametrize default quality rule
This commit is contained in:
parent
bffe40a2c8
commit
8d00059cc2
@ -1,16 +1,13 @@
|
|||||||
package com.gildedrose.rules;
|
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
|
@Override
|
||||||
public boolean shouldApply(String itemName) {
|
public boolean shouldApply(String itemName) {
|
||||||
return itemName != null && itemName.startsWith("Conjured ");
|
return itemName != null && itemName.startsWith("Conjured ");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
|
||||||
public Result calculateQuality(int oldQuality, int newSellIn) {
|
|
||||||
return new Result(max(oldQuality - 2, 0), true);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -4,20 +4,38 @@ import static java.lang.Integer.max;
|
|||||||
|
|
||||||
public class DefaultQualityRule implements QualityRule {
|
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
|
@Override
|
||||||
public boolean shouldApply(String itemName) {
|
public boolean shouldApply(String itemName) {
|
||||||
return true;
|
if (expectedItemName != null) {
|
||||||
|
return expectedItemName.equals(itemName);
|
||||||
|
} else {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Result calculateQuality(int oldQuality, int newSellIn) {
|
public Result calculateQuality(int oldQuality, int newSellIn) {
|
||||||
final int newQuality;
|
final int newQuality;
|
||||||
if (newSellIn < 0) {
|
if (newSellIn < 0) {
|
||||||
newQuality = oldQuality - 2;
|
newQuality = oldQuality - 2 * multiplier;
|
||||||
} else {
|
} else {
|
||||||
newQuality = oldQuality - 1;
|
newQuality = oldQuality - multiplier;
|
||||||
}
|
}
|
||||||
return new Result(max(newQuality, 0), false);
|
return new Result(max(newQuality, 0), isFinalRule);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -29,4 +29,21 @@ class GildedRoseConjuredTest {
|
|||||||
final int expectedQuality = max(initialQuality - 2, 0);
|
final int expectedQuality = max(initialQuality - 2, 0);
|
||||||
assertItem(item, ITEM_NAME, 0, expectedQuality);
|
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);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user