Skip to content

Instantly share code, notes, and snippets.

@franreyes
Last active February 23, 2023 11:45
Show Gist options
  • Save franreyes/efe65b9afa560181bc80841816aeb2b4 to your computer and use it in GitHub Desktop.
Save franreyes/efe65b9afa560181bc80841816aeb2b4 to your computer and use it in GitHub Desktop.
Full coverage and mutants killed in GildedRose.java
package com.gildedrose;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
public class GildedRoseTest {
private static final int MIN_QUALITY = 0;
private static final int MAX_QUALITY = 50;
@Test
public void regular_items_quality_decreases_every_day() {
Item item = regularItem(1, 3);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(2, item.quality);
assertEquals(0, item.sellIn);
}
@Test
public void expired_regular_items_quality_decreases_twice_as_fast_once_sellIn_has_passed() {
Item item = regularItem(0, 3);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(1, item.quality);
assertEquals(-1, item.sellIn);
}
@Test
public void regular_items_quality_never_decreases_below_the_minimum_quality() {
Item item = regularItem(5, 0);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(MIN_QUALITY, item.quality);
assertEquals(4, item.sellIn);
}
@Test
public void expired_regular_items_quality_never_decreases_below_the_minimum_quality(){
Item item = regularItem(0, 1);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(MIN_QUALITY, item.quality);
assertEquals(-1, item.sellIn);
}
@Test
public void aged_brie_increases_quality_by_1() {
Item item = agedBrie(5, 8);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(9, item.quality);
assertEquals(4, item.sellIn);
}
@Test
public void aged_brie_quality_never_increases_over_the_maximun_quality() {
Item item = agedBrie(5, MAX_QUALITY);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(MAX_QUALITY, item.quality);
assertEquals(4, item.sellIn);
}
@Test
public void expired_aged_brie_quality_never_increases_over_the_maximun_quality() {
Item item = agedBrie(0, MAX_QUALITY - 1);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(MAX_QUALITY, item.quality);
assertEquals(-1, item.sellIn);
}
@Test
public void expired_aged_brie_increases_quality_by_2() {
Item item = agedBrie(0, 8);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(10, item.quality);
assertEquals(-1, item.sellIn);
}
@Test
public void sulfuras_never_changes() {
Item item = sulfuras(1, 80);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(80, item.quality);
assertEquals(1, item.sellIn);
}
@Test
public void expired_sulfuras_never_changes() {
Item item = sulfuras(-1, 80);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(80, item.quality);
assertEquals(-1, item.sellIn);
}
@Test
public void backstage_increase_quality_by_1_when_sellIn_is_greater_than_10() {
Item item = backstagePasses(11, 6);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(7, item.quality);
assertEquals(10, item.sellIn);
}
@Test
public void backstage_increase_quality_by_2_when_sellIn_is_between_10_and_6() {
Item item1 = backstagePasses(10, 6);
Item item2 = backstagePasses(6, 20);
GildedRose shop = new GildedRose(new Item[]{item1, item2});
shop.updateQuality();
assertEquals(8, item1.quality);
assertEquals(9, item1.sellIn);
assertEquals(22, item2.quality);
assertEquals(5, item2.sellIn);
}
@Test
public void backstage_increase_quality_by_3_when_sellIn_is_between_5_and_1() {
Item item1 = backstagePasses(5, 6);
Item item2 = backstagePasses(1, 20);
GildedRose shop = new GildedRose(new Item[]{item1, item2});
shop.updateQuality();
assertEquals(9, item1.quality);
assertEquals(4, item1.sellIn);
assertEquals(23, item2.quality);
assertEquals(0, item2.sellIn);
}
@Test
public void backstage_quality_drops_to_0_after_the_concert() {
Item item = backstagePasses(0, 6);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(MIN_QUALITY, item.quality);
assertEquals(-1, item.sellIn);
}
@Test
public void backstage_quality_never_increases_over_the_maximun_quality_when_increasing_by_1() {
Item item = backstagePasses(11, MAX_QUALITY);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(MAX_QUALITY, item.quality);
assertEquals(10, item.sellIn);
}
@Test
public void backstage_quality_never_increases_over_the_maximun_quality_when_increasing_by_2() {
Item item = backstagePasses(8, MAX_QUALITY - 1);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(MAX_QUALITY, item.quality);
assertEquals(7, item.sellIn);
}
@Test
public void backstage_quality_never_increases_over_the_maximun_quality_when_increasing_by_3() {
Item item = backstagePasses(4, MAX_QUALITY - 2);
GildedRose shop = new GildedRose(new Item[]{item});
shop.updateQuality();
assertEquals(MAX_QUALITY, item.quality);
assertEquals(3, item.sellIn);
}
public Item regularItem(int sellIn, int quality) {
return new Item("foo", sellIn, quality);
}
public Item agedBrie(int sellIn, int quality) {
return new Item("Aged Brie", sellIn, quality);
}
public Item sulfuras(int sellIn, int quality) {
return new Item("Sulfuras, Hand of Ragnaros", sellIn, quality);
}
public Item backstagePasses(int sellIn, int quality) {
return new Item("Backstage passes to a TAFKAL80ETC concert", sellIn, quality);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment