Refactor and add more tests

This commit is contained in:
Mahdi Malaki 2023-08-07 21:13:41 -04:00
parent 2660a46d08
commit ace42fda3a
3 changed files with 91 additions and 52 deletions

View File

@ -7,30 +7,30 @@ public class GildedRose {
public static void updateQuality(Item[] items) { public static void updateQuality(Item[] items) {
for (Item item : items) { for (Item item : items) {
if (!item.name.equals("Sulfuras, Hand of Ragnaros")) { if (!item.name.equals("Sulfuras, Hand of Ragnaros")) {
item.sellIn--; item.sellIn--; // Decrease sellIn for all items except Sulfuras
if (item.name.equals("Aged Brie")) { if (item.name.equals("Aged Brie")) {
increaseQuality(item); increaseQuality(item);
if (item.sellIn < 0) { if (item.sellIn < 0) {
increaseQuality(item); increaseQuality(item); // Quality increases twice after sellIn passes
} }
} else if (item.name.equals("Backstage passes to a TAFKAL80ETC concert")) { } else if (item.name.equals("Backstage passes to a TAFKAL80ETC concert")) {
increaseQuality(item); increaseQuality(item);
if (item.sellIn < 11) { if (item.sellIn < 11) {
increaseQuality(item); increaseQuality(item); // Quality increases by 2 when sellIn is 10 or less
} }
if (item.sellIn < 6) { if (item.sellIn < 6) {
increaseQuality(item); increaseQuality(item); // Quality increases by 3 when sellIn is 5 or less
} }
if (item.sellIn < 0) { if (item.sellIn < 0) {
item.quality = MIN_QUALITY; item.quality = MIN_QUALITY; // Quality drops to 0 after the concert
} }
} else if (item.name.equals("Conjured Mana Cake")) { } else if (item.name.equals("Conjured Mana Cake")) {
decreaseQuality(item, 2); decreaseQuality(item, 2); // Quality decreases twice as fast for conjured items
} else { } else {
decreaseQuality(item); decreaseQuality(item); // Normal items decrease in quality
if (item.sellIn < 0) { if (item.sellIn < 0) {
decreaseQuality(item); decreaseQuality(item); // Quality decreases twice after sellIn passes
} }
} }
} }

View File

@ -1,17 +1,93 @@
package com.gildedrose; package com.gildedrose;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test; import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertEquals;
class GildedRoseTest { public class GildedRoseTest {
@Test private Item[] items;
void foo() {
Item[] items = new Item[] { new Item("foo", 0, 0) }; @BeforeEach
GildedRose app = new GildedRose(); public void setUp() {
app.updateQuality(items); items = new Item[]{
assertEquals("fixme", items[0].name); new Item("+5 Dexterity Vest", 10, 20),
new Item("Aged Brie", 2, 0),
new Item("Elixir of the Mongoose", 5, 7),
new Item("Sulfuras, Hand of Ragnaros", 0, 80),
new Item("Sulfuras, Hand of Ragnaros", -1, 80),
new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20),
new Item("Backstage passes to a TAFKAL80ETC concert", 10, 49),
new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49),
new Item("Conjured Mana Cake", 3, 6)
};
} }
@Test
public void testDay1() {
GildedRose.updateQuality(items);
// Assertions for Day 1
assertEquals(9, items[0].sellIn);
assertEquals(19, items[0].quality);
assertEquals(1, items[1].sellIn);
assertEquals(1, items[1].quality);
assertEquals(4, items[2].sellIn);
assertEquals(6, items[2].quality);
assertEquals(0, items[3].sellIn);
assertEquals(80, items[3].quality);
assertEquals(-1, items[4].sellIn);
assertEquals(80, items[4].quality);
assertEquals(14, items[5].sellIn);
assertEquals(21, items[5].quality);
assertEquals(9, items[6].sellIn);
assertEquals(50, items[6].quality);
assertEquals(4, items[7].sellIn);
assertEquals(50, items[7].quality);
assertEquals(2, items[8].sellIn);
assertEquals(4, items[8].quality);
}
@Test
public void testDay2() {
GildedRose.updateQuality(items);
GildedRose.updateQuality(items);
// Assertions for Day 2
assertEquals(8, items[0].sellIn);
assertEquals(18, items[0].quality);
assertEquals(0, items[1].sellIn);
assertEquals(2, items[1].quality);
assertEquals(3, items[2].sellIn);
assertEquals(5, items[2].quality);
assertEquals(0, items[3].sellIn);
assertEquals(80, items[3].quality);
assertEquals(-1, items[4].sellIn);
assertEquals(80, items[4].quality);
assertEquals(13, items[5].sellIn);
assertEquals(22, items[5].quality);
assertEquals(8, items[6].sellIn);
assertEquals(50, items[6].quality);
assertEquals(3, items[7].sellIn);
assertEquals(50, items[7].quality);
assertEquals(1, items[8].sellIn);
assertEquals(2, items[8].quality);
}
} }

View File

@ -1,37 +0,0 @@
package com.gildedrose;
public class TexttestFixture {
public static void main(String[] args) {
System.out.println("OMGHAI!");
Item[] items = new Item[] {
new Item("+5 Dexterity Vest", 10, 20), //
new Item("Aged Brie", 2, 0), //
new Item("Elixir of the Mongoose", 5, 7), //
new Item("Sulfuras, Hand of Ragnaros", 0, 80), //
new Item("Sulfuras, Hand of Ragnaros", -1, 80),
new Item("Backstage passes to a TAFKAL80ETC concert", 15, 20),
new Item("Backstage passes to a TAFKAL80ETC concert", 10, 49),
new Item("Backstage passes to a TAFKAL80ETC concert", 5, 49),
// this conjured item does not work properly yet
new Item("Conjured Mana Cake", 3, 6) };
GildedRose app = new GildedRose();
int days = 2;
if (args.length > 0) {
days = Integer.parseInt(args[0]) + 1;
}
for (int i = 0; i < days; i++) {
System.out.println("-------- day " + i + " --------");
System.out.println("name, sellIn, quality");
for (Item item : items) {
System.out.println(item);
}
System.out.println();
app.updateQuality(items);
}
}
}