GildedRose-Refactoring-Kata/python/tests/test_gilded_rose.py
2025-12-28 10:11:50 +05:30

133 lines
4.2 KiB
Python

import unittest
from gilded_rose import GildedRose, Item
class GildedRoseTest(unittest.TestCase):
def updater(obj = GildedRose, times = 1):
for i in range(times):
obj.update_quality()
def test_normal_item(self):
# Set up the item
item = Item("+5 Dexterity Vest", 10, 20)
gilded_rose = GildedRose([item])
# One day after
gilded_rose.update_quality()
self.assertEqual(item.sell_in, 9)
self.assertEqual(item.quality, 19)
# Sell by date passed
GildedRoseTest.updater(gilded_rose, item.sell_in + 1)
self.assertEqual(item.sell_in, -1)
# Quality degrades twice as fast now
self.assertEqual(item.quality, 8)
GildedRoseTest.updater(gilded_rose, 10)
self.assertEqual(item.sell_in, -11)
# never be less than 0
self.assertEqual(item.quality, 0)
def test_aged_brie(self):
# Set up the item
item = Item("Aged Brie", 10, 20)
gilded_rose = GildedRose([item])
# One day after
gilded_rose.update_quality()
self.assertEqual(item.sell_in, 9)
self.assertEqual(item.quality, 21)
# Sell by date passed
GildedRoseTest.updater(gilded_rose, item.sell_in + 1)
self.assertEqual(item.sell_in, -1)
# Quality increases twice as fast now
self.assertEqual(item.quality, 32)
GildedRoseTest.updater(gilded_rose, 10)
self.assertEqual(item.sell_in, -11)
self.assertEqual(item.quality, 50)
def test_sulfuras(self):
# Set up the item
item = Item("Sulfuras, Hand of Ragnaros", 20, 80)
gilded_rose = GildedRose([item])
# One day after
gilded_rose.update_quality()
self.assertNotEqual(item.sell_in, 19)
self.assertEqual(item.sell_in, 20)
self.assertEqual(item.quality, 80)
# sell by date passed
GildedRoseTest.updater(gilded_rose, item.sell_in + 1)
self.assertEqual(item.sell_in, 20)
self.assertNotEqual(item.sell_in, -1)
def test_backstage_passes(self):
# Set up the item
item = Item("Backstage passes to a TAFKAL80ETC concert", 20, 20)
gilded_rose = GildedRose([item])
# One day after
gilded_rose.update_quality()
self.assertEqual(item.sell_in, 19)
self.assertEqual(item.quality, 21)
GildedRoseTest.updater(gilded_rose, 9)
# Sell in 10 or less
self.assertEqual(item.sell_in, 10)
self.assertEqual(item.quality, 30)
GildedRoseTest.updater(gilded_rose)
self.assertEqual(item.sell_in, 9)
self.assertEqual(item.quality, 32)
# Sell in 5 or less
GildedRoseTest.updater(gilded_rose, 4)
self.assertEqual(item.sell_in, 5)
self.assertEqual(item.quality, 40)
GildedRoseTest.updater(gilded_rose)
self.assertEqual(item.sell_in, 4)
self.assertEqual(item.quality, 43)
GildedRoseTest.updater(gilded_rose, 2)
self.assertEqual(item.sell_in, 2)
self.assertEqual(item.quality, 49)
# Never gets beyond 50 and drops to 0
# once sell in passed
GildedRoseTest.updater(gilded_rose)
self.assertEqual(item.sell_in, 1)
self.assertEqual(item.quality, 50)
GildedRoseTest.updater(gilded_rose, 2)
self.assertEqual(item.sell_in, -1)
self.assertEqual(item.quality, 0)
def test_conjured(self):
# Set up the item
item = Item("Conjured Mana Cake", 20, 50)
gilded_rose = GildedRose([item])
# One day after
gilded_rose.update_quality()
self.assertEqual(item.sell_in, 19)
self.assertEqual(item.quality, 48)
GildedRoseTest.updater(gilded_rose, item.sell_in + 1)
# sell by date passed -- will decrease
# twice as fast as normal items (-4)
self.assertEqual(item.sell_in, -1)
self.assertEqual(item.quality, 6)
GildedRoseTest.updater(gilded_rose)
self.assertEqual(item.sell_in, -2)
self.assertEqual(item.quality, 2)
GildedRoseTest.updater(gilded_rose)
self.assertEqual(item.sell_in, -3)
self.assertEqual(item.quality, 0)
if __name__ == '__main__':
unittest.main()