mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-02-04 09:11:39 +00:00
increasing test coverage, adding tests for aged brie, backstage passes, sulfuras and standard items
This commit is contained in:
parent
29fc686933
commit
3d51862bc8
@ -5,11 +5,13 @@ class GildedRose {
|
||||
public static final String AGED_BRIE = "Aged Brie";
|
||||
public static final String BACKSTAGE_PASSES = "Backstage passes to a TAFKAL80ETC concert";
|
||||
public static final String SULFURAS = "Sulfuras, Hand of Ragnaros";
|
||||
public static final int QUALITY_LEVEL_0 = 0;
|
||||
public static final int QUALITY_LEVEL_50 = 50;
|
||||
|
||||
public static final int MINIMUM_QUALITY = 0;
|
||||
public static final int MAXIMUM_QUALITY = 50;
|
||||
|
||||
public static final int SELL_IN_DAY11 = 11;
|
||||
public static final int SELL_IN_DAY6 = 6;
|
||||
public static final int SELL_IN_DAY0 = 0;
|
||||
public static final int SELL_IN_EXPIRED = 0;
|
||||
|
||||
Item[] items;
|
||||
|
||||
@ -31,65 +33,81 @@ class GildedRose {
|
||||
|
||||
if (isAgedBrie) {
|
||||
// processing quality
|
||||
if (item.quality < QUALITY_LEVEL_50) {
|
||||
item.quality = item.quality + 1;
|
||||
if (item.quality < MAXIMUM_QUALITY) {
|
||||
increaseQuality(item);
|
||||
}
|
||||
|
||||
// processing sell date
|
||||
item.sellIn = item.sellIn - 1;
|
||||
decreaseDay(item);
|
||||
|
||||
// processing sell date
|
||||
if (item.sellIn < SELL_IN_DAY0) {
|
||||
if (item.quality < QUALITY_LEVEL_50) {
|
||||
item.quality = item.quality + 1;
|
||||
if (isExpired(item)) {
|
||||
if (item.quality < MAXIMUM_QUALITY) {
|
||||
increaseQuality(item);
|
||||
}
|
||||
}
|
||||
} else if (isBackstagePasses) {
|
||||
// processing quality
|
||||
if (item.quality < QUALITY_LEVEL_50) {
|
||||
item.quality = item.quality + 1;
|
||||
if (item.quality < MAXIMUM_QUALITY) {
|
||||
increaseQuality(item);
|
||||
|
||||
// processing sell date
|
||||
if (item.sellIn < SELL_IN_DAY11) {
|
||||
if (item.quality < QUALITY_LEVEL_50) {
|
||||
item.quality = item.quality + 1;
|
||||
if (item.quality < MAXIMUM_QUALITY) {
|
||||
increaseQuality(item);
|
||||
}
|
||||
}
|
||||
|
||||
if (item.sellIn < SELL_IN_DAY6) {
|
||||
if (item.quality < QUALITY_LEVEL_50) {
|
||||
item.quality = item.quality + 1;
|
||||
if (item.quality < MAXIMUM_QUALITY) {
|
||||
increaseQuality(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// processing sell date
|
||||
item.sellIn = item.sellIn - 1;
|
||||
decreaseDay(item);
|
||||
|
||||
// processing sell date
|
||||
if (item.sellIn < SELL_IN_DAY0) {
|
||||
item.quality = QUALITY_LEVEL_0;
|
||||
if (isExpired(item)) {
|
||||
item.quality = MINIMUM_QUALITY;
|
||||
}
|
||||
} else if (isSulfuras) {
|
||||
//sulfuras is doing nothing
|
||||
|
||||
} else {
|
||||
//standard item
|
||||
if (item.quality > QUALITY_LEVEL_0) {
|
||||
item.quality = item.quality - 1;
|
||||
if (item.quality > MINIMUM_QUALITY) {
|
||||
decreaseQuality(item);
|
||||
}
|
||||
|
||||
// processing sell date
|
||||
item.sellIn = item.sellIn - 1;
|
||||
decreaseDay(item);
|
||||
|
||||
// processing sell date
|
||||
if (item.sellIn < SELL_IN_DAY0) {
|
||||
if (isExpired(item)) {
|
||||
// processing quality
|
||||
if (item.quality > QUALITY_LEVEL_0) {
|
||||
item.quality = item.quality - 1;
|
||||
if (item.quality > MINIMUM_QUALITY) {
|
||||
decreaseQuality(item);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void decreaseDay(Item item) {
|
||||
item.sellIn = item.sellIn - 1;
|
||||
}
|
||||
|
||||
private static boolean isExpired(Item item) {
|
||||
return item.sellIn < SELL_IN_EXPIRED;
|
||||
}
|
||||
|
||||
private static void decreaseQuality(Item item) {
|
||||
item.quality = item.quality - 1;
|
||||
}
|
||||
|
||||
private static void increaseQuality(Item item) {
|
||||
item.quality = item.quality + 1;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
24
Java/src/test/java/com/gildedrose/AgedBrieTest.java
Normal file
24
Java/src/test/java/com/gildedrose/AgedBrieTest.java
Normal file
@ -0,0 +1,24 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class AgedBrieTest {
|
||||
|
||||
@Test
|
||||
void agedBrieQualityIncreasesByOne() {
|
||||
//given
|
||||
Item agedBrie = new Item("Aged Brie", 5, 2);
|
||||
Item[] items = new Item[] {agedBrie};
|
||||
|
||||
//when
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
//then
|
||||
assertEquals(4, app.items[0].sellIn);
|
||||
assertEquals(3, app.items[0].quality);
|
||||
}
|
||||
|
||||
}
|
||||
61
Java/src/test/java/com/gildedrose/BackStageTest.java
Normal file
61
Java/src/test/java/com/gildedrose/BackStageTest.java
Normal file
@ -0,0 +1,61 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class BackStageTest {
|
||||
|
||||
@Test
|
||||
void backStageQualityIncreasesByTwoWhenThereAre10DaysOrLess() {
|
||||
//given
|
||||
Item backStage10 = new Item("Backstage passes to a TAFKAL80ETC concert", 10, 2);
|
||||
Item backStage6 = new Item("Backstage passes to a TAFKAL80ETC concert", 6, 2);
|
||||
Item[] items = new Item[] {backStage10, backStage6};
|
||||
|
||||
//when
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
//then
|
||||
assertEquals(9, app.items[0].sellIn);
|
||||
assertEquals(4, app.items[0].quality);
|
||||
|
||||
assertEquals(5, app.items[1].sellIn);
|
||||
assertEquals(4, app.items[1].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backStageQualityIncreasesByThreeWhenThereAre5DaysOrLess() {
|
||||
//given
|
||||
Item backStage5 = new Item("Backstage passes to a TAFKAL80ETC concert", 5, 3);
|
||||
Item backStage4 = new Item("Backstage passes to a TAFKAL80ETC concert", 4, 3);
|
||||
Item[] items = new Item[] {backStage5, backStage4};
|
||||
|
||||
//when
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
//then
|
||||
assertEquals(4, app.items[0].sellIn);
|
||||
assertEquals(6, app.items[0].quality);
|
||||
|
||||
assertEquals(3, app.items[1].sellIn);
|
||||
assertEquals(6, app.items[1].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void backStageQualityDecreasesToZeroWhenIsExpired() {
|
||||
//given
|
||||
Item backStage = new Item("Backstage passes to a TAFKAL80ETC concert", 0, 3);
|
||||
Item[] items = new Item[] {backStage};
|
||||
|
||||
//when
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
//then
|
||||
assertEquals(-1, app.items[0].sellIn);
|
||||
assertEquals(0, app.items[0].quality);
|
||||
}
|
||||
}
|
||||
@ -6,12 +6,65 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class GildedRoseTest {
|
||||
|
||||
//GENERAL RULES
|
||||
@Test
|
||||
void foo() {
|
||||
Item[] items = new Item[] { new Item("foo", 0, 0) };
|
||||
void whenSellInDateIsPassed_qualityDegradesTwiceAsFast() {
|
||||
//given
|
||||
Item testItem = new Item("standard item", 0, 3);
|
||||
Item[] items = new Item[] {testItem};
|
||||
|
||||
//when
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
assertEquals("foo", app.items[0].name);
|
||||
|
||||
//then
|
||||
assertEquals(-1, app.items[0].sellIn);
|
||||
assertEquals(1, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void qualityOfAnItemIsNeverNegative() {
|
||||
//given
|
||||
Item testItem = new Item("standard item", 0, 0);
|
||||
Item[] items = new Item[] {testItem};
|
||||
|
||||
//when
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
//then
|
||||
assertEquals(-1, app.items[0].sellIn);
|
||||
assertEquals(0, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void qualityOfAnItemIsNeverMoreThan50() {
|
||||
//given
|
||||
Item testItem = new Item("standard item", 5, 50);
|
||||
Item[] items = new Item[] {testItem};
|
||||
|
||||
//when
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
//then
|
||||
assertEquals(4, app.items[0].sellIn);
|
||||
assertEquals(50, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void standardItemQualityDecreasesByOne() {
|
||||
//given
|
||||
Item testItem = new Item("standard item", 5, 2);
|
||||
Item[] items = new Item[] {testItem};
|
||||
|
||||
//when
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
//then
|
||||
assertEquals(4, app.items[0].sellIn);
|
||||
assertEquals(1, app.items[0].quality);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
38
Java/src/test/java/com/gildedrose/SulfurasTest.java
Normal file
38
Java/src/test/java/com/gildedrose/SulfurasTest.java
Normal file
@ -0,0 +1,38 @@
|
||||
package com.gildedrose;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
class SulfurasTest {
|
||||
|
||||
@Test
|
||||
void sulfurasNeverChanges() {
|
||||
//given
|
||||
Item sulfuras = new Item("Sulfuras, Hand of Ragnaros", 0, 80);
|
||||
Item[] items = new Item[] {sulfuras};
|
||||
|
||||
//when
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
//then
|
||||
assertEquals(0, app.items[0].sellIn);
|
||||
assertEquals(80, app.items[0].quality);
|
||||
}
|
||||
|
||||
@Test
|
||||
void sulfurasQualityLevelIsAlways80() {
|
||||
//given
|
||||
Item sulfuras = new Item("Sulfuras, Hand of Ragnaros", 0, 80);
|
||||
Item[] items = new Item[] {sulfuras};
|
||||
|
||||
//when
|
||||
GildedRose app = new GildedRose(items);
|
||||
app.updateQuality();
|
||||
|
||||
//then
|
||||
assertEquals(80, app.items[0].quality);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user