From 58d66c7770473469951f9ecc9cd79d5df221526c Mon Sep 17 00:00:00 2001 From: Alvaro Gomez Traveso Date: Fri, 16 Dec 2022 11:42:43 +0100 Subject: [PATCH] Create class for backstage pass items --- .../gildedrose/items/BackstagePassItem.java | 31 +++++++++++ .../items/BackstagePassItemTest.java | 54 +++++++++++++++++++ 2 files changed, 85 insertions(+) create mode 100644 Java/src/main/java/com/gildedrose/items/BackstagePassItem.java create mode 100644 Java/src/test/java/com/gildedrose/items/BackstagePassItemTest.java 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)); + } + } +}