Implement faster quality decrease after sellIn

Quality decreases by 2 after the sellIn reaches 0
This commit is contained in:
Bjorn Misseghers 2021-04-13 10:03:27 +02:00
parent e9f47d84b4
commit 7e3e5d0d7c
2 changed files with 35 additions and 6 deletions

View File

@ -6,6 +6,8 @@ public class DefaultQualityBehavior implements QualityBehavior {
public static final int MAX_QUALITY_LEVEL = 50; public static final int MAX_QUALITY_LEVEL = 50;
public static final int MIN_QUALITY_LEVEL = 0; public static final int MIN_QUALITY_LEVEL = 0;
public static final int DEFAULT_QUALITY_DECREASE = 1;
public static final int FASTER_QUALITY_DECREASE = 2;
@Override @Override
public void processQualityUpdate(Item item) { public void processQualityUpdate(Item item) {
@ -13,9 +15,12 @@ public class DefaultQualityBehavior implements QualityBehavior {
} }
private void decreaseQuality(Item item) { private void decreaseQuality(Item item) {
item.quality = limitQuality(item.quality - 1); item.quality = limitQuality(item.quality - getQualityDecreaseAmount(item));
} }
private int getQualityDecreaseAmount(Item item) {
return item.sellIn > 0 ? DEFAULT_QUALITY_DECREASE : FASTER_QUALITY_DECREASE;
}
private int limitQuality(int newQuality) { private int limitQuality(int newQuality) {
return Math.max(MIN_QUALITY_LEVEL, Math.min(MAX_QUALITY_LEVEL, newQuality)); return Math.max(MIN_QUALITY_LEVEL, Math.min(MAX_QUALITY_LEVEL, newQuality));
} }

View File

@ -17,7 +17,7 @@ public class DefaultQualityBehaviorTest {
@Test @Test
void decreaseQuality() { void decreaseQuality() {
Item item = getItem(10); Item item = getItem(5,10);
qualityBehavior.processQualityUpdate(item); qualityBehavior.processQualityUpdate(item);
assertEquals(9, item.quality); assertEquals(9, item.quality);
@ -25,7 +25,7 @@ public class DefaultQualityBehaviorTest {
@Test @Test
void decreaseNegativeQuality() { void decreaseNegativeQuality() {
Item item = getItem(-10); Item item = getItem(5,-10);
qualityBehavior.processQualityUpdate(item); qualityBehavior.processQualityUpdate(item);
assertEquals(0, item.quality); assertEquals(0, item.quality);
@ -33,13 +33,37 @@ public class DefaultQualityBehaviorTest {
@Test @Test
void decreaseQualityZero() { void decreaseQualityZero() {
Item item = getItem(0); Item item = getItem(5,0);
qualityBehavior.processQualityUpdate(item); qualityBehavior.processQualityUpdate(item);
assertEquals(0, item.quality); assertEquals(0, item.quality);
} }
private Item getItem(int quality) { @Test
return new Item("SomeItem", 0, quality); void decreaseQualityFaster() {
Item item = getItem(0,4);
qualityBehavior.processQualityUpdate(item);
assertEquals(2, item.quality);
}
@Test
void decreaseQualityFasterNegativeSellIn() {
Item item = getItem(-1,4);
qualityBehavior.processQualityUpdate(item);
assertEquals(2, item.quality);
}
@Test
void decreaseQualityFasterRespectLowerLimit() {
Item item = getItem(0,1);
qualityBehavior.processQualityUpdate(item);
assertEquals(0, item.quality);
}
private Item getItem(int sellIn, int quality) {
return new Item("SomeItem", sellIn, quality);
} }
} }