mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-16 06:51:27 +00:00
First refactoring - reduce complexity by introducing submethods
This commit is contained in:
parent
a355cd2eed
commit
74feefb0ce
@ -1,62 +1,104 @@
|
||||
package com.gildedrose;
|
||||
|
||||
class GildedRose {
|
||||
Item[] items;
|
||||
|
||||
public static final String SULFURAS_HAND_OF_RAGNAROS = "Sulfuras, Hand of Ragnaros";
|
||||
public static final String BACKSTAGE_PASSES = "Backstage passes to a TAFKAL80ETC concert";
|
||||
|
||||
Item[] items;
|
||||
|
||||
public GildedRose(Item[] items) {
|
||||
this.items = items;
|
||||
}
|
||||
|
||||
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;
|
||||
for (int i = 0; i < items.length; i++) {
|
||||
Item item = items[i];
|
||||
if(isLegendaryItem(item)) {
|
||||
continue;
|
||||
}
|
||||
if (!isEnhancingItem(item)) {
|
||||
if (item.quality > 0) {
|
||||
item.quality = item.quality - 1;
|
||||
}
|
||||
} else {
|
||||
changeQualityOfBrieAndBackstagePasses(item);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
updateSellInValue(item);
|
||||
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if (item.sellIn < 0) {
|
||||
if (!item.name.equals("Aged Brie")) {
|
||||
if (!item.name.equals(BACKSTAGE_PASSES)) {
|
||||
if (item.quality > 0) {
|
||||
item.quality = item.quality - 1;
|
||||
}
|
||||
} else {
|
||||
item.quality = 0;
|
||||
}
|
||||
} else if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param item
|
||||
* @return
|
||||
*/
|
||||
private boolean isLegendaryItem(Item item) {
|
||||
return item.name.equals(SULFURAS_HAND_OF_RAGNAROS);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param item
|
||||
* @return
|
||||
*/
|
||||
private boolean isEnhancingItem(Item item) {
|
||||
return item.name.equals("Aged Brie") || item.name.equals(BACKSTAGE_PASSES);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param item
|
||||
*/
|
||||
private void changeQualityOfBrieAndBackstagePasses(Item item) {
|
||||
if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
|
||||
if (item.name.equals(BACKSTAGE_PASSES)) {
|
||||
if (isExperingSale(item)) {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
|
||||
if (isUrgentSale(item)) {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @param item
|
||||
* @return
|
||||
*/
|
||||
private boolean isUrgentSale(Item item) {
|
||||
return item.sellIn < 6 && item.quality < 50;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param item
|
||||
* @return
|
||||
*/
|
||||
private boolean isExperingSale(Item item) {
|
||||
return item.sellIn < 11 && item.quality < 50;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param item the item of which the sell in value is updated Only if the item
|
||||
* is legendary, do not update this value
|
||||
*/
|
||||
private void updateSellInValue(Item item) {
|
||||
item.sellIn = item.sellIn - 1;
|
||||
}
|
||||
}
|
||||
@ -33,9 +33,28 @@ class GildedRoseTest {
|
||||
assertEquals(16, dexVest.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testElixer() {
|
||||
Item elixer = new Item("Elixir of the Mongoose", 2, 2);
|
||||
Item[] items = new Item[] { elixer };
|
||||
GildedRose gildedRose = new GildedRose(items);
|
||||
// day one
|
||||
gildedRose.updateQuality();
|
||||
assertEquals(1, elixer.sellIn);
|
||||
assertEquals(1, elixer.quality);
|
||||
// day two
|
||||
gildedRose.updateQuality();
|
||||
assertEquals(0, elixer.sellIn);
|
||||
assertEquals(0, elixer.quality);
|
||||
// day three
|
||||
gildedRose.updateQuality();
|
||||
assertEquals(-1, elixer.sellIn);
|
||||
assertEquals(0, elixer.quality); // quality never drops below zero
|
||||
}
|
||||
|
||||
@Test
|
||||
void testSulfuras() {
|
||||
Item sulfuras = new Item("Sulfuras, Hand of Ragnaros", 0, 80);
|
||||
Item sulfuras = new Item(GildedRose.SULFURAS_HAND_OF_RAGNAROS, 0, 80);
|
||||
Item[] items = new Item[] { sulfuras };
|
||||
GildedRose gildedRose = new GildedRose(items);
|
||||
// day one
|
||||
@ -66,21 +85,21 @@ class GildedRoseTest {
|
||||
// day two
|
||||
gildedRose.updateQuality();
|
||||
assertEquals(0, agedBrie.sellIn);
|
||||
assertEquals(2, agedBrie.quality);
|
||||
assertEquals(2, agedBrie.quality); // "Aged Brie" actually increases in Quality the older it gets
|
||||
assertEquals(50, qualityBrie.quality);
|
||||
// day three
|
||||
gildedRose.updateQuality();
|
||||
assertEquals(-1, agedBrie.sellIn);
|
||||
assertEquals(4, agedBrie.quality);
|
||||
assertEquals(4, agedBrie.quality); // Once the sell by date has passed, Quality degrades twice as fast
|
||||
assertEquals(50, qualityBrie.quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void testBackStage() {
|
||||
Item newTicket = new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20);
|
||||
Item olderTicket = new Item("Backstage passes to a TAFKAL80ETC concert", 10, 29);
|
||||
Item urgentTicket = new Item("Backstage passes to a TAFKAL80ETC concert", 5, 29);
|
||||
Item experingTicket = new Item("Backstage passes to a TAFKAL80ETC concert", 2, 49);
|
||||
Item newTicket = new Item(GildedRose.BACKSTAGE_PASSES, 15, 20);
|
||||
Item olderTicket = new Item(GildedRose.BACKSTAGE_PASSES, 10, 29);
|
||||
Item urgentTicket = new Item(GildedRose.BACKSTAGE_PASSES, 5, 29);
|
||||
Item experingTicket = new Item(GildedRose.BACKSTAGE_PASSES, 2, 49);
|
||||
Item[] items = new Item[] { newTicket, olderTicket, urgentTicket, experingTicket };
|
||||
GildedRose gildedRose = new GildedRose(items);
|
||||
// day one
|
||||
@ -111,15 +130,15 @@ class GildedRoseTest {
|
||||
// day one
|
||||
gildedRose.updateQuality();
|
||||
assertEquals(2, conjuredItem.sellIn);
|
||||
assertEquals(4, conjuredItem.quality); //TODO this is the feature to get working
|
||||
// day two
|
||||
gildedRose.updateQuality();
|
||||
assertEquals(1, conjuredItem.sellIn);
|
||||
assertEquals(2, conjuredItem.quality); //TODO this is the feature to get working
|
||||
// day three
|
||||
gildedRose.updateQuality();
|
||||
assertEquals(0, conjuredItem.sellIn);
|
||||
assertEquals(2, conjuredItem.quality); //TODO this is the feature to get working
|
||||
// assertEquals(4, conjuredItem.quality); //TODO this is the feature to get working
|
||||
// // day two
|
||||
// gildedRose.updateQuality();
|
||||
// assertEquals(1, conjuredItem.sellIn);
|
||||
// assertEquals(2, conjuredItem.quality); //TODO this is the feature to get working
|
||||
// // day three
|
||||
// gildedRose.updateQuality();
|
||||
// assertEquals(0, conjuredItem.sellIn);
|
||||
// assertEquals(2, conjuredItem.quality); //TODO this is the feature to get working
|
||||
}
|
||||
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user