package com.gildedrose; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertEquals; class ItemTest { @Test void givenNormalItem_whenDegrade_thenQualityAndSellInDecrease() { var normalItem = new NormalItem("Normal Item", 10, 20); normalItem.degrade(); assertEquals(9, normalItem.sellIn); assertEquals(19, normalItem.quality); } @Test void givenAgedBrie_whenDegrade_thenQualityIncreases() { var brie = new AgedBrieItem("Aged Brie", 10, 30); brie.degrade(); assertEquals(9, brie.sellIn); assertEquals(31, brie.quality); } @Test void givenBackstagePass_whenDegrade_thenQualityIncreasesBeforeSellDate() { var pass = new BackstagePassItem("Backstage Pass", 11, 20); pass.degrade(); assertEquals(10, pass.sellIn); assertEquals(21, pass.quality); } @Test void givenBackstagePass_whenSellInIs10OrLess_thenQualityIncreasesMore() { var pass = new BackstagePassItem("Backstage Pass", 10, 20); pass.degrade(); assertEquals(9, pass.sellIn); assertEquals(22, pass.quality); } @Test void givenBackstagePass_whenSellInIsZero_thenQualityDropsToZero() { var pass = new BackstagePassItem("Backstage Pass", 0, 20); pass.degrade(); assertEquals(-1, pass.sellIn); assertEquals(0, pass.quality); } @Test void givenSulfuras_whenDegrade_thenQualityAndSellInRemainUnchanged() { var sulfuras = new SulfurasItem("Sulfuras, Hand of Ragnaros", 10, 80); sulfuras.degrade(); assertEquals(10, sulfuras.sellIn); assertEquals(80, sulfuras.quality); } @Test void givenAgedBrie_whenQualityIs50_thenQualityDoesNotIncrease() { var brie = new AgedBrieItem("Aged Brie", 10, 50); brie.degrade(); assertEquals(9, brie.sellIn); assertEquals(50, brie.quality); } @Test void givenNormalItem_whenQualityIsZero_thenQualityDoesNotDecrease() { var normalItem = new NormalItem("Normal Item", 10, 0); normalItem.degrade(); assertEquals(9, normalItem.sellIn); assertEquals(0, normalItem.quality); } @Test void givenNormalItem_whenSellInIsNegative_thenQualityDecreasesTwice() { var normalItem = new NormalItem("Normal Item", 0, 10); normalItem.degrade(); assertEquals(-1, normalItem.sellIn); assertEquals(8, normalItem.quality); } @Test void givenAgedBrie_whenSellInIsNegative_thenQualityIncreasesTwice() { var brie = new AgedBrieItem("Aged Brie", 0, 10); brie.degrade(); assertEquals(-1, brie.sellIn); assertEquals(12, brie.quality); } }