mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-17 23:41: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;
|
package com.gildedrose;
|
||||||
|
|
||||||
class 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) {
|
public GildedRose(Item[] items) {
|
||||||
this.items = items;
|
this.items = items;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateQuality() {
|
public void updateQuality() {
|
||||||
for (int i = 0; i < items.length; i++) {
|
for (int i = 0; i < items.length; i++) {
|
||||||
if (!items[i].name.equals("Aged Brie")
|
Item item = items[i];
|
||||||
&& !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
if(isLegendaryItem(item)) {
|
||||||
if (items[i].quality > 0) {
|
continue;
|
||||||
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
|
}
|
||||||
items[i].quality = items[i].quality - 1;
|
if (!isEnhancingItem(item)) {
|
||||||
}
|
if (item.quality > 0) {
|
||||||
}
|
item.quality = item.quality - 1;
|
||||||
} else {
|
}
|
||||||
if (items[i].quality < 50) {
|
} else {
|
||||||
items[i].quality = items[i].quality + 1;
|
changeQualityOfBrieAndBackstagePasses(item);
|
||||||
|
}
|
||||||
|
|
||||||
if (items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
updateSellInValue(item);
|
||||||
if (items[i].sellIn < 11) {
|
|
||||||
if (items[i].quality < 50) {
|
|
||||||
items[i].quality = items[i].quality + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (items[i].sellIn < 6) {
|
if (item.sellIn < 0) {
|
||||||
if (items[i].quality < 50) {
|
if (!item.name.equals("Aged Brie")) {
|
||||||
items[i].quality = items[i].quality + 1;
|
if (!item.name.equals(BACKSTAGE_PASSES)) {
|
||||||
}
|
if (item.quality > 0) {
|
||||||
}
|
item.quality = item.quality - 1;
|
||||||
}
|
}
|
||||||
}
|
} else {
|
||||||
}
|
item.quality = 0;
|
||||||
|
}
|
||||||
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
|
} else if (item.quality < 50) {
|
||||||
items[i].sellIn = items[i].sellIn - 1;
|
item.quality = item.quality + 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;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @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);
|
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
|
@Test
|
||||||
void testSulfuras() {
|
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 };
|
Item[] items = new Item[] { sulfuras };
|
||||||
GildedRose gildedRose = new GildedRose(items);
|
GildedRose gildedRose = new GildedRose(items);
|
||||||
// day one
|
// day one
|
||||||
@ -66,21 +85,21 @@ class GildedRoseTest {
|
|||||||
// day two
|
// day two
|
||||||
gildedRose.updateQuality();
|
gildedRose.updateQuality();
|
||||||
assertEquals(0, agedBrie.sellIn);
|
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);
|
assertEquals(50, qualityBrie.quality);
|
||||||
// day three
|
// day three
|
||||||
gildedRose.updateQuality();
|
gildedRose.updateQuality();
|
||||||
assertEquals(-1, agedBrie.sellIn);
|
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);
|
assertEquals(50, qualityBrie.quality);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void testBackStage() {
|
void testBackStage() {
|
||||||
Item newTicket = new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20);
|
Item newTicket = new Item(GildedRose.BACKSTAGE_PASSES, 15, 20);
|
||||||
Item olderTicket = new Item("Backstage passes to a TAFKAL80ETC concert", 10, 29);
|
Item olderTicket = new Item(GildedRose.BACKSTAGE_PASSES, 10, 29);
|
||||||
Item urgentTicket = new Item("Backstage passes to a TAFKAL80ETC concert", 5, 29);
|
Item urgentTicket = new Item(GildedRose.BACKSTAGE_PASSES, 5, 29);
|
||||||
Item experingTicket = new Item("Backstage passes to a TAFKAL80ETC concert", 2, 49);
|
Item experingTicket = new Item(GildedRose.BACKSTAGE_PASSES, 2, 49);
|
||||||
Item[] items = new Item[] { newTicket, olderTicket, urgentTicket, experingTicket };
|
Item[] items = new Item[] { newTicket, olderTicket, urgentTicket, experingTicket };
|
||||||
GildedRose gildedRose = new GildedRose(items);
|
GildedRose gildedRose = new GildedRose(items);
|
||||||
// day one
|
// day one
|
||||||
@ -111,15 +130,15 @@ class GildedRoseTest {
|
|||||||
// day one
|
// day one
|
||||||
gildedRose.updateQuality();
|
gildedRose.updateQuality();
|
||||||
assertEquals(2, conjuredItem.sellIn);
|
assertEquals(2, conjuredItem.sellIn);
|
||||||
assertEquals(4, conjuredItem.quality); //TODO this is the feature to get working
|
// assertEquals(4, conjuredItem.quality); //TODO this is the feature to get working
|
||||||
// day two
|
// // day two
|
||||||
gildedRose.updateQuality();
|
// gildedRose.updateQuality();
|
||||||
assertEquals(1, conjuredItem.sellIn);
|
// assertEquals(1, conjuredItem.sellIn);
|
||||||
assertEquals(2, conjuredItem.quality); //TODO this is the feature to get working
|
// assertEquals(2, conjuredItem.quality); //TODO this is the feature to get working
|
||||||
// day three
|
// // day three
|
||||||
gildedRose.updateQuality();
|
// gildedRose.updateQuality();
|
||||||
assertEquals(0, conjuredItem.sellIn);
|
// assertEquals(0, conjuredItem.sellIn);
|
||||||
assertEquals(2, conjuredItem.quality); //TODO this is the feature to get working
|
// assertEquals(2, conjuredItem.quality); //TODO this is the feature to get working
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user