mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-19 16:31:30 +00:00
Add ItemType enum
This commit is contained in:
parent
6a2c95d1a8
commit
79a430019f
@ -6,17 +6,15 @@ import java.util.List;
|
|||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
class GildedRose {
|
class GildedRose {
|
||||||
public static final String AGED_BRIE = "Aged Brie";
|
private static final Map<ItemType, Class<? extends ItemHandler>> ITEM_HANDLER_MAP = Map.of(
|
||||||
public static final String SULFURAS = "Sulfuras, Hand of Ragnaros";
|
ItemType.AGED_BRIE,
|
||||||
public static final String BACKSTAGE_PASSES =
|
|
||||||
"Backstage passes to a TAFKAL80ETC concert";
|
|
||||||
private static Map<String, Class<? extends ItemHandler>> itemHandlerMap = Map.of(
|
|
||||||
AGED_BRIE,
|
|
||||||
AgedBrieItemHandler.class,
|
AgedBrieItemHandler.class,
|
||||||
SULFURAS,
|
ItemType.SULFURAS,
|
||||||
SulfurasItemHandler.class,
|
SulfurasItemHandler.class,
|
||||||
BACKSTAGE_PASSES,
|
ItemType.BACKSTAGE_PASSES,
|
||||||
BackstagePassesItemHandler.class
|
BackstagePassesItemHandler.class,
|
||||||
|
ItemType.GENERIC,
|
||||||
|
GenericItemHandler.class
|
||||||
);
|
);
|
||||||
// make package-private
|
// make package-private
|
||||||
public final List<Item> items;
|
public final List<Item> items;
|
||||||
@ -27,14 +25,18 @@ class GildedRose {
|
|||||||
|
|
||||||
// todo: refactor this to use Guice
|
// todo: refactor this to use Guice
|
||||||
private static void handleDay(Item item) {
|
private static void handleDay(Item item) {
|
||||||
// todo: refactor to use enum
|
|
||||||
try {
|
try {
|
||||||
ItemHandler itemHandler = itemHandlerMap
|
ItemHandler itemHandler = ITEM_HANDLER_MAP
|
||||||
.getOrDefault(item.name, GenericItemHandler.class)
|
.get(ItemType.forDisplayName(item.name))
|
||||||
.getDeclaredConstructor()
|
.getDeclaredConstructor()
|
||||||
.newInstance();
|
.newInstance();
|
||||||
itemHandler.handleDay(item);
|
itemHandler.handleDay(item);
|
||||||
} catch (InstantiationException | IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
|
} catch (
|
||||||
|
InstantiationException
|
||||||
|
| IllegalAccessException
|
||||||
|
| InvocationTargetException
|
||||||
|
| NoSuchMethodException e
|
||||||
|
) {
|
||||||
throw new RuntimeException(e);
|
throw new RuntimeException(e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,3 +1,26 @@
|
|||||||
package com.gildedrose;
|
package com.gildedrose;
|
||||||
|
|
||||||
public enum ItemType {}
|
import java.util.Arrays;
|
||||||
|
|
||||||
|
public enum ItemType {
|
||||||
|
AGED_BRIE("Aged Brie"),
|
||||||
|
SULFURAS("Sulfuras, Hand of Ragnaros"),
|
||||||
|
BACKSTAGE_PASSES("Backstage passes to a TAFKAL80ETC concert"),
|
||||||
|
GENERIC("Generic item");
|
||||||
|
|
||||||
|
private final String displayName;
|
||||||
|
|
||||||
|
ItemType(String displayName) {
|
||||||
|
this.displayName = displayName;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static ItemType forDisplayName(String displayName) {
|
||||||
|
return Arrays
|
||||||
|
.stream(ItemType.values())
|
||||||
|
.filter(itemType -> itemType.getDisplayName().equals(displayName)).findFirst().orElse(GENERIC);
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getDisplayName() {
|
||||||
|
return displayName;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@ -1,15 +1,15 @@
|
|||||||
package com.gildedrose;
|
package com.gildedrose;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
|
||||||
|
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
|
||||||
class GildedRoseTest {
|
class GildedRoseTest {
|
||||||
private static final int SULFURAS_QUALITY = 80;
|
private static final int SULFURAS_QUALITY = 80;
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void agedBrieIncreasesInQualityByOneEachDay() {
|
public void agedBrieIncreasesInQualityByOneEachDay() {
|
||||||
Item[] items = new Item[] { new Item(GildedRose.AGED_BRIE, 2, 0) };
|
Item[] items = new Item[]{new Item(ItemType.AGED_BRIE.getDisplayName(), 2, 0)};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
assertEquals(app.items.get(0).quality, 1);
|
assertEquals(app.items.get(0).quality, 1);
|
||||||
@ -21,7 +21,7 @@ class GildedRoseTest {
|
|||||||
public void sulfurasSellInDateNeverChanges() {
|
public void sulfurasSellInDateNeverChanges() {
|
||||||
int sellIn = 10;
|
int sellIn = 10;
|
||||||
Item[] items = new Item[]{
|
Item[] items = new Item[]{
|
||||||
new Item(GildedRose.SULFURAS, sellIn, SULFURAS_QUALITY)
|
new Item(ItemType.SULFURAS.getDisplayName(), sellIn, SULFURAS_QUALITY)
|
||||||
};
|
};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
@ -33,7 +33,7 @@ class GildedRoseTest {
|
|||||||
@Test
|
@Test
|
||||||
public void sulfurasValueNeverChanges() {
|
public void sulfurasValueNeverChanges() {
|
||||||
Item[] items = new Item[]{
|
Item[] items = new Item[]{
|
||||||
new Item(GildedRose.SULFURAS, 10, SULFURAS_QUALITY)
|
new Item(ItemType.SULFURAS.getDisplayName(), 10, SULFURAS_QUALITY)
|
||||||
};
|
};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
@ -45,7 +45,7 @@ class GildedRoseTest {
|
|||||||
@Test
|
@Test
|
||||||
public void sulfurasValueIsAlways80() {
|
public void sulfurasValueIsAlways80() {
|
||||||
Item[] items = new Item[]{
|
Item[] items = new Item[]{
|
||||||
new Item(GildedRose.SULFURAS, 10, SULFURAS_QUALITY)
|
new Item(ItemType.SULFURAS.getDisplayName(), 10, SULFURAS_QUALITY)
|
||||||
};
|
};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
@ -56,7 +56,7 @@ class GildedRoseTest {
|
|||||||
public void backstagePassesQualityIncreasesByTwoWhenThereAreTenDaysOrLessBeforeTheConcert() {
|
public void backstagePassesQualityIncreasesByTwoWhenThereAreTenDaysOrLessBeforeTheConcert() {
|
||||||
int quality = 0;
|
int quality = 0;
|
||||||
Item[] items = new Item[]{
|
Item[] items = new Item[]{
|
||||||
new Item(GildedRose.BACKSTAGE_PASSES, 10, quality)
|
new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 10, quality)
|
||||||
};
|
};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
@ -69,7 +69,7 @@ class GildedRoseTest {
|
|||||||
public void backstagePassesQualityIncreasesByThreeWhenThereAreFiveDaysOrLessBeforeTheConcert() {
|
public void backstagePassesQualityIncreasesByThreeWhenThereAreFiveDaysOrLessBeforeTheConcert() {
|
||||||
int quality = 0;
|
int quality = 0;
|
||||||
Item[] items = new Item[]{
|
Item[] items = new Item[]{
|
||||||
new Item(GildedRose.BACKSTAGE_PASSES, 5, quality)
|
new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 5, quality)
|
||||||
};
|
};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
@ -84,7 +84,7 @@ class GildedRoseTest {
|
|||||||
public void backstagePassesQualityDropsToZeroAfterTheConcert() {
|
public void backstagePassesQualityDropsToZeroAfterTheConcert() {
|
||||||
int quality = 10;
|
int quality = 10;
|
||||||
Item[] items = new Item[]{
|
Item[] items = new Item[]{
|
||||||
new Item(GildedRose.BACKSTAGE_PASSES, 1, quality)
|
new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 1, quality)
|
||||||
};
|
};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
@ -109,7 +109,7 @@ class GildedRoseTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void qualityIsNeverOverFiftyForAgedBrie() {
|
public void qualityIsNeverOverFiftyForAgedBrie() {
|
||||||
Item[] items = new Item[] { new Item(GildedRose.AGED_BRIE, 5, 50) };
|
Item[] items = new Item[]{new Item(ItemType.AGED_BRIE.getDisplayName(), 5, 50)};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
assertEquals(app.items.get(0).quality, 50);
|
assertEquals(app.items.get(0).quality, 50);
|
||||||
@ -121,7 +121,7 @@ class GildedRoseTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void qualityIsNeverOverFiftyForBackstagePasses() {
|
public void qualityIsNeverOverFiftyForBackstagePasses() {
|
||||||
Item[] items = new Item[] { new Item(GildedRose.BACKSTAGE_PASSES, 5, 50) };
|
Item[] items = new Item[]{new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 5, 50)};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
assertEquals(app.items.get(0).quality, 50);
|
assertEquals(app.items.get(0).quality, 50);
|
||||||
@ -157,7 +157,7 @@ class GildedRoseTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void sellInDateDecreasesByOneEachDayForAgedBrie() {
|
public void sellInDateDecreasesByOneEachDayForAgedBrie() {
|
||||||
Item[] items = new Item[] { new Item(GildedRose.AGED_BRIE, 5, 1) };
|
Item[] items = new Item[]{new Item(ItemType.AGED_BRIE.getDisplayName(), 5, 1)};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
assertEquals(app.items.get(0).sellIn, 4);
|
assertEquals(app.items.get(0).sellIn, 4);
|
||||||
@ -169,7 +169,7 @@ class GildedRoseTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void sellInDateDecreasesByOneEachDayForBackstagePasses() {
|
public void sellInDateDecreasesByOneEachDayForBackstagePasses() {
|
||||||
Item[] items = new Item[] { new Item(GildedRose.BACKSTAGE_PASSES, 5, 1) };
|
Item[] items = new Item[]{new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 5, 1)};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
assertEquals(app.items.get(0).sellIn, 4);
|
assertEquals(app.items.get(0).sellIn, 4);
|
||||||
@ -205,7 +205,7 @@ class GildedRoseTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void sellInDateCanBeNegativeForAgedBrie() {
|
public void sellInDateCanBeNegativeForAgedBrie() {
|
||||||
Item[] items = new Item[] { new Item(GildedRose.AGED_BRIE, 1, 1) };
|
Item[] items = new Item[]{new Item(ItemType.AGED_BRIE.getDisplayName(), 1, 1)};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
assertEquals(app.items.get(0).sellIn, 0);
|
assertEquals(app.items.get(0).sellIn, 0);
|
||||||
@ -217,7 +217,7 @@ class GildedRoseTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void sellInDateCanBeNegativeForBackStagePasses() {
|
public void sellInDateCanBeNegativeForBackStagePasses() {
|
||||||
Item[] items = new Item[] { new Item(GildedRose.BACKSTAGE_PASSES, 1, 1) };
|
Item[] items = new Item[]{new Item(ItemType.BACKSTAGE_PASSES.getDisplayName(), 1, 1)};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
assertEquals(app.items.get(0).sellIn, 0);
|
assertEquals(app.items.get(0).sellIn, 0);
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user