diff --git a/Java/src/main/java/com/gildedrose/items/BackstagePassItem.java b/Java/src/main/java/com/gildedrose/items/BackstagePassItem.java new file mode 100644 index 00000000..ad505fc9 --- /dev/null +++ b/Java/src/main/java/com/gildedrose/items/BackstagePassItem.java @@ -0,0 +1,31 @@ +package com.gildedrose.items; + +import com.gildedrose.Quality; +import com.gildedrose.SellIn; +import lombok.EqualsAndHashCode; + +@EqualsAndHashCode(callSuper = true) +public class BackstagePassItem extends GildedRoseItem { + + public BackstagePassItem(SellIn sellIn, Quality quality, boolean conjured) { + super("Backstage passes to a TAFKAL80ETC concert", sellIn, quality, conjured); + } + + @Override + protected Quality nextQuality(Quality previous) { + Quality nextQuality = previous.copy(); + if (this.getSellIn().isOver()) { + nextQuality.setValue(0); + return nextQuality; + } + + nextQuality.increment(); + if (this.getSellIn().daysLeftUntilIsOverAreLessThan(11)) { + nextQuality.increment(); + } + if (this.getSellIn().daysLeftUntilIsOverAreLessThan(6)) { + nextQuality.increment(); + } + return nextQuality; + } +} diff --git a/Java/src/test/java/com/gildedrose/items/BackstagePassItemTest.java b/Java/src/test/java/com/gildedrose/items/BackstagePassItemTest.java new file mode 100644 index 00000000..ab3f27d9 --- /dev/null +++ b/Java/src/test/java/com/gildedrose/items/BackstagePassItemTest.java @@ -0,0 +1,54 @@ +package com.gildedrose.items; + +import static org.assertj.core.api.Assertions.assertThat; + +import com.gildedrose.Quality; +import com.gildedrose.SellIn; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +class BackstagePassItemTest { + + @Nested + class nextQuality { + @Test + void should_increment_quality_by_one() { + BackstagePassItem item = + new BackstagePassItem(SellIn.create(20), Quality.create(0), Boolean.FALSE); + + Quality nextQuality = item.nextQuality(item.getQuality()); + + assertThat(nextQuality).isEqualTo(Quality.create(1)); + } + + @Test + void should_increment_quality_by_two_if_less_than_ten_days_to_sell() { + BackstagePassItem item = + new BackstagePassItem(SellIn.create(10), Quality.create(0), Boolean.FALSE); + + Quality nextQuality = item.nextQuality(item.getQuality()); + + assertThat(nextQuality).isEqualTo(Quality.create(2)); + } + + @Test + void should_increment_quality_by_three_if_less_than_five_days_to_sell() { + BackstagePassItem item = + new BackstagePassItem(SellIn.create(5), Quality.create(0), Boolean.FALSE); + + Quality nextQuality = item.nextQuality(item.getQuality()); + + assertThat(nextQuality).isEqualTo(Quality.create(3)); + } + + @Test + void should_set_quality_to_zero_if_sell_is_over() { + BackstagePassItem item = + new BackstagePassItem(SellIn.create(0), Quality.create(10), Boolean.FALSE); + + Quality nextQuality = item.nextQuality(item.getQuality()); + + assertThat(nextQuality).isEqualTo(Quality.create(0)); + } + } +}