Create class for backstage pass items

This commit is contained in:
Alvaro Gomez Traveso 2022-12-16 11:42:43 +01:00
parent 3bd5d5ffdc
commit 58d66c7770
2 changed files with 85 additions and 0 deletions

View File

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

View File

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