import unittest import ../src/items import ../src/gildedrose let list = @[ initItem("+5 Dexterity Vest", 10, 20), initItem("Aged Brie", 2, 0), # this doesn't have any special treatment, but if you want you can think of something and add a test initItem("Elixir of the Mongoose", 5, 7), initItem("Sulfuras, Hand of Ragnaros", 0, 80), initItem("Sulfuras, Hand of Ragnaros", -1, 80), initItem("Backstage passes to a TAFKAL80ETC concert", 15, 20), initItem("Backstage passes to a TAFKAL80ETC concert", 10, 49), initItem("Backstage passes to a TAFKAL80ETC concert", 5, 49), # this conjured item does not work properly yet initItem("Conjured Mana Cake", 3, 6) ] template checkItem(item: Item, s, q: int) = check: item.sellIn == s item.quality == q proc days(count: int): seq[Item] = var items = list for _ in 1 .. count: items.updateQuality() items suite "+5 Dexterity Vest [0]": test "1 day": var items = days(1) checkItem(items[0], 9, 19) test "5 days, check for cumulative depeciation": let items = days(5) checkItem(items[0], 5, 15) test "10 days, expiration day": let items = days 10 checkItem(items[0], 0, 10) test "14 days, check for expired depreciation": let items = days(14) checkItem(items[0], -4, 2) test "20 days, quality should not be negative": let items = days 20 checkItem(items[0], -10, 0) suite "Aged Brie [1]": test "1 day, brie increases value": let items = days(1) checkItem(items[1], 1, 1) test "2 days, expiration day": let items = days(2) checkItem(items[1], 0, 2) test "4 days, extra increase after expiration": let items = days(4) checkItem(items[1], -2, 6) test "30 days, should reach max quality": let items = days 30 checkItem items[1], -28, 50 suite "Sulfuras, Hand of Ragnaros [3]": test "1 day": let items = days(1) checkItem(items[3], 0, 80) test "2 days": let items = days(2) checkItem(items[3], 0, 80) suite "Sulfuras, Hand of Ragnaros [4]": test "1 day": let items = days(1) checkItem(items[4], -1, 80) suite "Backstage passes to a TAFKAL80ETC concert [5]": test "1 day": let items= days(1) checkItem(items[5], 14, 21) test "5 days": let items = days 5 checkItem items[5], 10, 25 test "7 days, increase appreciation": let items = days 7 checkItem items[5], 8, 29 test "12 days, extra increased appriciation": let items = days 12 checkItem items[5], 3, 41 test "14 days, day before concert": let items = days 14 checkItem items[5], 1, 47 test "16 days, day after concert": let items = days 16 checkItem items[5], -1, 0 suite "Backstage passes to a TAFKAL80ETC concert [6]": test "1 day, should reach max quality even though concert is soon": let items = days 1 checkItem items[6], 9, 50 test "11 days, day after concert": let items = days 11 checkItem items[6], -1, 0 suite "Backstage passes to a TAFKAL80ETC concert [7]": test "1 day, should reach max quality even though concert is imminent": let items = days 1 checkItem items[7], 4, 50 suite "Conjured Mana cake [8]": test "1 day, should decrease by double": let items = days 1 checkItem items[8], 2, 4