increasing test coverage, adding tests for aged brie, backstage passes, sulfuras and standard items

This commit is contained in:
villanibe 2025-06-27 19:18:42 +02:00
parent 29fc686933
commit 3d51862bc8
5 changed files with 221 additions and 27 deletions

View File

@ -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;
}
}

View 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);
}
}

View 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);
}
}

View File

@ -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);
}
}

View 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);
}
}