mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-16 06:51:27 +00:00
Adding unit tests and refactoring - looks good ;-)
This commit is contained in:
parent
bdcea60169
commit
30ed72f8de
@ -1,62 +1,89 @@
|
|||||||
package com.gildedrose;
|
package com.gildedrose;
|
||||||
|
|
||||||
class GildedRose {
|
class GildedRose {
|
||||||
|
|
||||||
|
public static final String SULFURAS = "Sulfuras, Hand of Ragnaros";
|
||||||
|
public static final String CHEESE = "Aged Brie";
|
||||||
|
//TODO: brainstorm the naming a bit here.
|
||||||
|
public static final String BACKSTAGE_PASSES_TO_A_TAFKAL_80_ETC_CONCERT
|
||||||
|
= "Backstage passes to a TAFKAL80ETC concert";
|
||||||
|
|
||||||
Item[] items;
|
Item[] items;
|
||||||
|
|
||||||
public GildedRose(Item[] items) {
|
public GildedRose(Item[] items) {
|
||||||
this.items = items;
|
this.items = items;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the staet of the items.
|
||||||
|
*/
|
||||||
public void updateQuality() {
|
public void updateQuality() {
|
||||||
for (int i = 0; i < items.length; i++) {
|
for (Item item : items) {
|
||||||
if (!items[i].name.equals("Aged Brie")
|
if (!item.name.equals(CHEESE)
|
||||||
&& !items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
&& !item.name.equals(BACKSTAGE_PASSES_TO_A_TAFKAL_80_ETC_CONCERT)) {
|
||||||
if (items[i].quality > 0) {
|
if (item.quality > 0) {
|
||||||
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
|
if (!item.name.equals(SULFURAS)) {
|
||||||
items[i].quality = items[i].quality - 1;
|
item.quality = item.quality - 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if (items[i].quality < 50) {
|
dealWithPasses(item);
|
||||||
items[i].quality = items[i].quality + 1;
|
|
||||||
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (items[i].sellIn < 6) {
|
if (!item.name.equals("Sulfuras, Hand of Ragnaros")) {
|
||||||
if (items[i].quality < 50) {
|
decrementSellIn(item);
|
||||||
items[i].quality = items[i].quality + 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (item.sellIn < 0) {
|
||||||
|
if (!item.name.equals(CHEESE) &&
|
||||||
|
!item.name.equals(BACKSTAGE_PASSES_TO_A_TAFKAL_80_ETC_CONCERT)) {
|
||||||
|
dealWithExpiredItem(item);
|
||||||
|
} else {
|
||||||
|
dealWithExpiredCheeseOrPasses(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
|
private void decrementSellIn(Item item) {
|
||||||
items[i].sellIn = items[i].sellIn - 1;
|
item.sellIn = item.sellIn - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (items[i].sellIn < 0) {
|
private void dealWithPasses(Item item) {
|
||||||
if (!items[i].name.equals("Aged Brie")) {
|
if (item.quality < 50) {
|
||||||
if (!items[i].name.equals("Backstage passes to a TAFKAL80ETC concert")) {
|
item.quality = item.quality + 1;
|
||||||
if (items[i].quality > 0) {
|
|
||||||
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
|
if (item.name.equals(BACKSTAGE_PASSES_TO_A_TAFKAL_80_ETC_CONCERT)) {
|
||||||
items[i].quality = items[i].quality - 1;
|
if (item.sellIn < 11) {
|
||||||
|
if (item.quality < 50) {
|
||||||
|
item.quality = item.quality + 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If the sellIn is 5 days or fewer add to the quality again
|
||||||
|
if (item.sellIn < 6) {
|
||||||
|
item.quality = item.quality + 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dealWithExpiredItem(Item item) {
|
||||||
|
if (item.quality > 0) {
|
||||||
|
if (!item.name.equals(SULFURAS)) {
|
||||||
|
item.quality = item.quality - 1;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
items[i].quality = items[i].quality - items[i].quality;
|
item.quality = 0;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void dealWithExpiredCheeseOrPasses(Item item) {
|
||||||
|
if (item.quality < 50 && !item.name.equals(BACKSTAGE_PASSES_TO_A_TAFKAL_80_ETC_CONCERT)) {
|
||||||
|
item.quality = item.quality + 1;
|
||||||
} else {
|
} else {
|
||||||
if (items[i].quality < 50) {
|
item.quality = 0;
|
||||||
items[i].quality = items[i].quality + 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -18,4 +18,32 @@ public class Item {
|
|||||||
public String toString() {
|
public String toString() {
|
||||||
return this.name + ", " + this.sellIn + ", " + this.quality;
|
return this.name + ", " + this.sellIn + ", " + this.quality;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean equals(Object o) {
|
||||||
|
if (this == o) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
if (o == null || getClass() != o.getClass()) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
Item item = (Item) o;
|
||||||
|
|
||||||
|
if (sellIn != item.sellIn) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
if (quality != item.quality) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return name != null ? name.equals(item.name) : item.name == null;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int hashCode() {
|
||||||
|
int result = name != null ? name.hashCode() : 0;
|
||||||
|
result = 31 * result + sellIn;
|
||||||
|
result = 31 * result + quality;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -7,11 +7,82 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
|
|||||||
class GildedRoseTest {
|
class GildedRoseTest {
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void foo() {
|
void testNormalDegrade() {
|
||||||
Item[] items = new Item[] { new Item("foo", 0, 0) };
|
Item testItem = new Item("test_item", 3, 10);
|
||||||
|
Item[] items = new Item[] {testItem};
|
||||||
GildedRose app = new GildedRose(items);
|
GildedRose app = new GildedRose(items);
|
||||||
app.updateQuality();
|
app.updateQuality();
|
||||||
assertEquals("fixme", app.items[0].name);
|
Item updatedItem = app.items[0];
|
||||||
|
assertEquals(new Item("test_item", 2, 9), updatedItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testPastSellInDegrade() {
|
||||||
|
Item testItem = new Item("test_item", 0, 10);
|
||||||
|
Item[] items = new Item[] {testItem};
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
app.updateQuality();
|
||||||
|
Item updatedItem = app.items[0];
|
||||||
|
assertEquals(new Item("test_item", -1, 8), updatedItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testQualityMustNotEverGoUnderZero() {
|
||||||
|
Item testItem = new Item("test_item", 5, 0);
|
||||||
|
Item[] items = new Item[] {testItem};
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
app.updateQuality();
|
||||||
|
Item updatedItem = app.items[0];
|
||||||
|
assertEquals(0, testItem.quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testAgedBrieGetsBetterWithAge() {
|
||||||
|
Item testItem = new Item("Aged Brie", 5, 10);
|
||||||
|
Item[] items = new Item[] {testItem};
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
app.updateQuality();
|
||||||
|
Item updatedItem = app.items[0];
|
||||||
|
assertEquals(new Item("Aged Brie", 4, 11), updatedItem);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testQualityIsCappedAt50() {
|
||||||
|
Item testItem = new Item("Aged Brie", 5, 50);
|
||||||
|
Item[] items = new Item[] {testItem};
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
app.updateQuality();
|
||||||
|
Item updatedItem = app.items[0];
|
||||||
|
assertEquals(50, updatedItem.quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testBackstagePass() {
|
||||||
|
Item testItem = new Item("Backstage passes to a TAFKAL80ETC concert", 6, 10);
|
||||||
|
Item[] items = new Item[] {testItem};
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
app.updateQuality();
|
||||||
|
Item updatedItem = app.items[0];
|
||||||
|
assertEquals(12, updatedItem.quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testBackstagePassWhenLessThan3DaysRemaining() {
|
||||||
|
Item testItem = new Item("Backstage passes to a TAFKAL80ETC concert", 3, 10);
|
||||||
|
Item[] items = new Item[] {testItem};
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
app.updateQuality();
|
||||||
|
Item updatedItem = app.items[0];
|
||||||
|
assertEquals(13, updatedItem.quality);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void testExpiredBackstagePass() {
|
||||||
|
Item testItem = new Item("Backstage passes to a TAFKAL80ETC concert", 0, 10);
|
||||||
|
Item[] items = new Item[] {testItem};
|
||||||
|
GildedRose app = new GildedRose(items);
|
||||||
|
app.updateQuality();
|
||||||
|
Item updatedItem = app.items[0];
|
||||||
|
assertEquals(0, updatedItem.quality);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user