mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-18 07:51:29 +00:00
Adapted logic to handle new product- Conjured
This commit is contained in:
parent
7e180efd78
commit
0b064047da
25
Java/src/main/java/com/gildedrose/Conjured.java
Normal file
25
Java/src/main/java/com/gildedrose/Conjured.java
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
package com.gildedrose;
|
||||||
|
|
||||||
|
import static com.gildedrose.rule.ValidationRule.*;
|
||||||
|
|
||||||
|
public class Conjured implements Goods {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateQuality(Item item) {
|
||||||
|
reduceQualityTwice(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateQualityForExpiredItem(Item item) {
|
||||||
|
if (isExpired(item)) {
|
||||||
|
reduceQualityTwice(item);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void reduceQualityTwice(Item item) {
|
||||||
|
if (hasMinimumRequiredQuality(item)) {
|
||||||
|
item.quality = Math.max(0, item.quality - 2);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -4,7 +4,9 @@ public enum GoodsType {
|
|||||||
|
|
||||||
AGED_BRIE("Aged Brie"),
|
AGED_BRIE("Aged Brie"),
|
||||||
BACK_STAGE_PASSES("Backstage passes to a TAFKAL80ETC concert"),
|
BACK_STAGE_PASSES("Backstage passes to a TAFKAL80ETC concert"),
|
||||||
SULFURAS("Sulfuras, Hand of Ragnaros");
|
SULFURAS("Sulfuras, Hand of Ragnaros"),
|
||||||
|
CONJURED("Conjured Mana Cake"),
|
||||||
|
;
|
||||||
|
|
||||||
private final String goodsName;
|
private final String goodsName;
|
||||||
|
|
||||||
|
|||||||
@ -7,6 +7,7 @@ import java.util.function.Supplier;
|
|||||||
|
|
||||||
import com.gildedrose.AgedBrie;
|
import com.gildedrose.AgedBrie;
|
||||||
import com.gildedrose.BackStagePasses;
|
import com.gildedrose.BackStagePasses;
|
||||||
|
import com.gildedrose.Conjured;
|
||||||
import com.gildedrose.Goods;
|
import com.gildedrose.Goods;
|
||||||
import com.gildedrose.GoodsType;
|
import com.gildedrose.GoodsType;
|
||||||
import com.gildedrose.Generic;
|
import com.gildedrose.Generic;
|
||||||
@ -20,6 +21,7 @@ public class GoodsFactory {
|
|||||||
goods.put(GoodsType.AGED_BRIE.getGoodsName(), AgedBrie::new);
|
goods.put(GoodsType.AGED_BRIE.getGoodsName(), AgedBrie::new);
|
||||||
goods.put(GoodsType.BACK_STAGE_PASSES.getGoodsName(), BackStagePasses::new);
|
goods.put(GoodsType.BACK_STAGE_PASSES.getGoodsName(), BackStagePasses::new);
|
||||||
goods.put(GoodsType.SULFURAS.getGoodsName(), Sulfuras::new);
|
goods.put(GoodsType.SULFURAS.getGoodsName(), Sulfuras::new);
|
||||||
|
goods.put(GoodsType.CONJURED.getGoodsName(), Conjured::new);
|
||||||
|
|
||||||
GOODS_SUPPLIER = Collections.unmodifiableMap(goods);
|
GOODS_SUPPLIER = Collections.unmodifiableMap(goods);
|
||||||
}
|
}
|
||||||
|
|||||||
42
Java/src/test/java/com/gildedrose/ConjuredTest.java
Normal file
42
Java/src/test/java/com/gildedrose/ConjuredTest.java
Normal file
@ -0,0 +1,42 @@
|
|||||||
|
package com.gildedrose;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
|
|
||||||
|
import java.util.stream.Stream;
|
||||||
|
|
||||||
|
import org.junit.jupiter.params.ParameterizedTest;
|
||||||
|
import org.junit.jupiter.params.provider.Arguments;
|
||||||
|
import org.junit.jupiter.params.provider.MethodSource;
|
||||||
|
|
||||||
|
class ConjuredTest {
|
||||||
|
|
||||||
|
private static Stream<Arguments> getTestItems() {
|
||||||
|
return Stream.of(Arguments.of(new Item(GoodsType.CONJURED.getGoodsName(), 2, 1), 0),
|
||||||
|
Arguments.of(new Item(GoodsType.CONJURED.getGoodsName(), 10, 5), 3)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static Stream<Arguments> getExpiredTestItems() {
|
||||||
|
return Stream.of(Arguments.of(new Item(GoodsType.CONJURED.getGoodsName(), -1, 1), 0),
|
||||||
|
Arguments.of(new Item(GoodsType.CONJURED.getGoodsName(), -1, 5), 3)
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
@ParameterizedTest(name = "Test updateQuality - {index}")
|
||||||
|
@MethodSource("getTestItems")
|
||||||
|
void testUpdateQuality(Item item, int expectedQuality) {
|
||||||
|
Conjured conjured = new Conjured();
|
||||||
|
conjured.updateQuality(item);
|
||||||
|
assertEquals(expectedQuality, item.quality);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
@ParameterizedTest(name = "Test updateQualityForExpiredItems - {index}")
|
||||||
|
@MethodSource("getExpiredTestItems")
|
||||||
|
void testUpdateQualityForExpiredItem(Item item, int expectedQuality) {
|
||||||
|
Conjured conjured = new Conjured();
|
||||||
|
conjured.updateQualityForExpiredItem(item);
|
||||||
|
assertEquals(expectedQuality, item.quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
@ -13,7 +13,8 @@ class GildedRoseTest {
|
|||||||
private static Stream<Arguments> getTestItemsForSellInDayCheck() {
|
private static Stream<Arguments> getTestItemsForSellInDayCheck() {
|
||||||
return Stream.of(
|
return Stream.of(
|
||||||
Arguments.of(new Item[] { new Item(GoodsType.AGED_BRIE.getGoodsName(), 1, 1) }, 0),
|
Arguments.of(new Item[] { new Item(GoodsType.AGED_BRIE.getGoodsName(), 1, 1) }, 0),
|
||||||
Arguments.of(new Item[] { new Item(GoodsType.SULFURAS.getGoodsName(), 1, 1) }, 1)
|
Arguments.of(new Item[] { new Item(GoodsType.SULFURAS.getGoodsName(), 1, 1) }, 1),
|
||||||
|
Arguments.of(new Item[] { new Item(GoodsType.CONJURED.getGoodsName(), 1, 1) }, 0)
|
||||||
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@ -48,7 +49,12 @@ class GildedRoseTest {
|
|||||||
Arguments.of(new Item[] { new Item("Coffee Day", -1, 2) }, 0),
|
Arguments.of(new Item[] { new Item("Coffee Day", -1, 2) }, 0),
|
||||||
|
|
||||||
Arguments.of(new Item[] { new Item(GoodsType.SULFURAS.getGoodsName(), -1, 10) }, 10),
|
Arguments.of(new Item[] { new Item(GoodsType.SULFURAS.getGoodsName(), -1, 10) }, 10),
|
||||||
Arguments.of(new Item[] { new Item(GoodsType.SULFURAS.getGoodsName(), 1, 10) }, 10)
|
Arguments.of(new Item[] { new Item(GoodsType.SULFURAS.getGoodsName(), 1, 10) }, 10),
|
||||||
|
|
||||||
|
Arguments.of(new Item[] { new Item(GoodsType.CONJURED.getGoodsName(), -1, 10) }, 6),
|
||||||
|
Arguments.of(new Item[] { new Item(GoodsType.CONJURED.getGoodsName(), 1, 10) }, 8),
|
||||||
|
Arguments.of(new Item[] { new Item(GoodsType.CONJURED.getGoodsName(), -1, 2) }, 0),
|
||||||
|
Arguments.of(new Item[] { new Item(GoodsType.CONJURED.getGoodsName(), 1, 2) }, 0)
|
||||||
|
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user