Treat conjured items as well

This commit is contained in:
Remus Decea 2023-11-13 13:07:48 +02:00
parent 94f18f669e
commit 0697cf49f0
2 changed files with 34 additions and 7 deletions

View File

@ -14,25 +14,28 @@ class GildedRose {
Item[] agingItems = Arrays.stream(items).filter(i -> !isSulfuras(i)).toArray(Item[]::new); Item[] agingItems = Arrays.stream(items).filter(i -> !isSulfuras(i)).toArray(Item[]::new);
Stream<Item> bries = Arrays.stream(agingItems).filter(this::isBrie); Stream<Item> bries = Arrays.stream(agingItems).filter(this::isBrie);
Stream<Item> backstagePasses = Arrays.stream(agingItems).filter(this::isBackstagePass); Stream<Item> backstagePasses = Arrays.stream(agingItems).filter(this::isBackstagePass);
Stream<Item> standardItems = Arrays.stream(agingItems).filter(i -> !(isBackstagePass(i) || isBrie(i))); Stream<Item> conjured = Arrays.stream(agingItems).filter(this::isConjured);
Stream<Item> standardItems = Arrays.stream(agingItems).filter(i -> !(isBackstagePass(i) || isBrie(i) || isConjured(i)));
for (Item item : agingItems) { for (Item item : agingItems) {
item.sellIn--; item.sellIn--;
} }
bries.forEach(this::changeQualityOfBries); bries.forEach(this::changeBrieQuality);
backstagePasses.forEach(this::changeQualityOfPasses); backstagePasses.forEach(this::changeBackstagePassesQuality);
standardItems.forEach(this::changeQualityOfStandardItems); conjured.forEach(this::changeConjuredQuality);
standardItems.forEach(this::changeStandardQuality);
} }
private void changeQuality(Item item, int factor) { private void changeQuality(Item item, int factor) {
item.quality = Math.min(Math.max(item.quality + factor, 0), 50); item.quality = Math.min(Math.max(item.quality + factor, 0), 50);
} }
private void changeQualityOfStandardItems(Item item) { private void changeStandardQuality(Item item) {
changeQuality(item, (item.sellIn > 0) ? -1 : -2); changeQuality(item, (item.sellIn > 0) ? -1 : -2);
} }
private void changeQualityOfBries(Item item) { private void changeBrieQuality(Item item) {
changeQuality(item, (item.sellIn > 0) ? 1 : 2); changeQuality(item, (item.sellIn > 0) ? 1 : 2);
} }
private void changeQualityOfPasses(Item item) {
private void changeBackstagePassesQuality(Item item) {
if (item.sellIn < 0) { if (item.sellIn < 0) {
item.quality = 0; item.quality = 0;
} else if (item.sellIn < 5) { } else if (item.sellIn < 5) {
@ -43,6 +46,10 @@ class GildedRose {
changeQuality(item, 1); changeQuality(item, 1);
} }
private void changeConjuredQuality(Item item) {
changeQuality(item, (item.sellIn > 0) ? -2 : -4);
}
private boolean isBackstagePass(Item i) { private boolean isBackstagePass(Item i) {
return i.name.toLowerCase().contains("backstage"); return i.name.toLowerCase().contains("backstage");
} }
@ -52,4 +59,8 @@ class GildedRose {
private boolean isBrie(Item i) { private boolean isBrie(Item i) {
return i.name.equals("Aged Brie"); return i.name.equals("Aged Brie");
} }
private boolean isConjured(Item i) {
return i.name.toLowerCase().contains("conjured");
}
} }

View File

@ -111,4 +111,20 @@ class GildedRoseTest {
assertEquals(app.items[6].quality, 0); assertEquals(app.items[6].quality, 0);
assertEquals(app.items[7].quality, 0); assertEquals(app.items[7].quality, 0);
} }
@Test
void conjuredItems() {
Item[] items = new Item[]{
new Item("Conjured item 1", 100, 30),
new Item("Conjured item 2", 0, 30),
new Item("Conjured item 3", 0, 4),
new Item("Conjured item 3", 0, 3)
};
GildedRose app = new GildedRose(items);
app.updateQuality();
assertEquals(app.items[0].quality, 28);
assertEquals(app.items[1].quality, 26);
assertEquals(app.items[2].quality, 0);
assertEquals(app.items[3].quality, 0);
}
} }