mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-15 22:41:30 +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;
|
||||
|
||||
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;
|
||||
|
||||
public GildedRose(Item[] items) {
|
||||
this.items = items;
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the staet of the 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;
|
||||
for (Item item : items) {
|
||||
if (!item.name.equals(CHEESE)
|
||||
&& !item.name.equals(BACKSTAGE_PASSES_TO_A_TAFKAL_80_ETC_CONCERT)) {
|
||||
if (item.quality > 0) {
|
||||
if (!item.name.equals(SULFURAS)) {
|
||||
item.quality = item.quality - 1;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if (items[i].quality < 50) {
|
||||
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 (items[i].quality < 50) {
|
||||
items[i].quality = items[i].quality + 1;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
dealWithPasses(item);
|
||||
}
|
||||
|
||||
if (!items[i].name.equals("Sulfuras, Hand of Ragnaros")) {
|
||||
items[i].sellIn = items[i].sellIn - 1;
|
||||
if (!item.name.equals("Sulfuras, Hand of Ragnaros")) {
|
||||
decrementSellIn(item);
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
if (item.sellIn < 0) {
|
||||
if (!item.name.equals(CHEESE) &&
|
||||
!item.name.equals(BACKSTAGE_PASSES_TO_A_TAFKAL_80_ETC_CONCERT)) {
|
||||
dealWithExpiredItem(item);
|
||||
} else {
|
||||
if (items[i].quality < 50) {
|
||||
items[i].quality = items[i].quality + 1;
|
||||
}
|
||||
dealWithExpiredCheeseOrPasses(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void decrementSellIn(Item item) {
|
||||
item.sellIn = item.sellIn - 1;
|
||||
}
|
||||
|
||||
private void dealWithPasses(Item item) {
|
||||
if (item.quality < 50) {
|
||||
item.quality = item.quality + 1;
|
||||
|
||||
if (item.name.equals(BACKSTAGE_PASSES_TO_A_TAFKAL_80_ETC_CONCERT)) {
|
||||
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 {
|
||||
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 {
|
||||
item.quality = 0;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -14,8 +14,36 @@ public class Item {
|
||||
this.quality = quality;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String toString() {
|
||||
@Override
|
||||
public String toString() {
|
||||
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 {
|
||||
|
||||
@Test
|
||||
void foo() {
|
||||
Item[] items = new Item[] { new Item("foo", 0, 0) };
|
||||
void testNormalDegrade() {
|
||||
Item testItem = new Item("test_item", 3, 10);
|
||||
Item[] items = new Item[] {testItem};
|
||||
GildedRose app = new GildedRose(items);
|
||||
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