Skip to content

Instantly share code, notes, and snippets.

@adelatorrefoss
Last active January 10, 2021 19:27
Show Gist options
  • Select an option

  • Save adelatorrefoss/c8a78f193a839ada78493f234f4fa6bb to your computer and use it in GitHub Desktop.

Select an option

Save adelatorrefoss/c8a78f193a839ada78493f234f4fa6bb to your computer and use it in GitHub Desktop.
Test proposals for Gilded Rose in python. Thanks to Mathew Morgan. https://github.com/matthewmorgan/gilded-rose-python-with-tests/blob/master/gilded_rose_test.py
# Thanks to Michael Walker
# https://github.com/CorndelWithSoftwire/Gilded-Rose-Python/blob/master/golden_master_test.py
import unittest
from gilded_rose import Item, GildedRose
class GoldenMasterTest(unittest.TestCase):
def test_update_items(self):
items = [
Item(name="+5 Dexterity Vest", sell_in=10, quality=20),
Item(name="Aged Brie", sell_in=2, quality=0),
Item(name="Elixir of the Mongoose", sell_in=5, quality=7),
Item(name="Sulfuras, Hand of Ragnaros", sell_in=0, quality=80),
Item(name="Sulfuras, Hand of Ragnaros", sell_in=-1, quality=80),
Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=15, quality=20),
Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=10, quality=49),
Item(name="Backstage passes to a TAFKAL80ETC concert", sell_in=5, quality=49),
Item(name="Conjured Mana Cake", sell_in=3, quality=6),
]
gilded_rose = GildedRose(items)
gilded_rose.update_quality()
self.assertEqual(
str(gilded_rose.items),
"[+5 Dexterity Vest, 9, 19, Aged Brie, 1, 1, Elixir of the Mongoose, 4, 6, Sulfuras, Hand of Ragnaros, 0, "
"80, Sulfuras, Hand of Ragnaros, -1, 80, Backstage passes to a TAFKAL80ETC concert, 14, 21, "
"Backstage passes to a TAFKAL80ETC concert, 9, 50, Backstage passes to a TAFKAL80ETC concert, 4, 50, "
"Conjured Mana Cake, 2, 5]"
)
for _ in range(10):
gilded_rose.update_quality()
self.assertEqual(
str(gilded_rose.items),
"[+5 Dexterity Vest, -1, 8, Aged Brie, -9, 20, Elixir of the Mongoose, -6, 0, Sulfuras, "
"Hand of Ragnaros, 0, 80, Sulfuras, Hand of Ragnaros, -1, 80, Backstage passes to a "
"TAFKAL80ETC concert, 4, 38, Backstage passes to a TAFKAL80ETC concert, -1, 0, "
"Backstage passes to a TAFKAL80ETC concert, -6, 0, Conjured Mana Cake, -8, 0]"
)
if __name__ == "__main__":
unittest.main()
# Thanks to Mathew Morgan
# https://github.com/matthewmorgan/gilded-rose-python-with-tests/blob/master/gilded_rose_test.py
from gilded_rose import GildedRose, Item
from unittest import TestCase, skip
class GildedRoseTest(TestCase):
def setUp(self):
self.items = []
self.gilded_rose = GildedRose(self.items)
def test_regular_items_decrease_by_one(self):
self.items.append(Item("+5 Dexterity Vest", 10, 20))
self.gilded_rose.update_quality()
expected = {'sell_in': 9, 'quality': 19}
item = self.items[0]
self.assertEqual(item.quality, expected['quality'])
self.assertEqual(item.sell_in, expected['sell_in'])
def test_quality_goes_up_for_improving_products(self):
self.items.append(Item("Aged Brie", 20, 30))
self.items.append(Item("Backstage passes to a TAFKAL80ETC concert", 20, 30))
self.gilded_rose.update_quality()
expected = [
{'sell_in': 19, 'quality': 31},
{'sell_in': 19, 'quality': 31},
]
for index, expectation in enumerate(expected):
item = self.items[index]
self.assertEqual(item.quality, expectation['quality'])
self.assertEqual(item.sell_in, expectation['sell_in'])
def test_quality_goes_up_by_two_for_improving_products_with_10_days_or_less_left(self):
self.items.append(Item("Aged Brie", 10, 34))
self.items.append(Item("Backstage passes to a TAFKAL80ETC concert", 8, 30))
self.gilded_rose.update_quality()
expected = [
{'sell_in': 9, 'quality': 35},
{'sell_in': 7, 'quality': 32},
]
for index, expectation in enumerate(expected):
item = self.items[index]
self.assertEqual(item.quality, expectation['quality'])
self.assertEqual(item.sell_in, expectation['sell_in'])
def test_quality_goes_up_by_three_for_improving_products_with_5_days_or_less_left(self):
self.items.append(Item("Aged Brie", 4, 11))
self.items.append(Item("Backstage passes to a TAFKAL80ETC concert", 5, 15))
self.gilded_rose.update_quality()
expected = [
{'sell_in': 3, 'quality': 12},
{'sell_in': 4, 'quality': 18},
]
for index, expectation in enumerate(expected):
item = self.items[index]
self.assertEqual(item.quality, expectation['quality'])
self.assertEqual(item.sell_in, expectation['sell_in'])
def test_quality_and_sellin_decrease_twice_as_fast_after_sell_by(self):
self.items.append(Item("+5 Dexterity Vest", 0, 20))
self.items.append(Item("Conjured Mana Cake", 0, 6))
self.gilded_rose.update_quality()
expected = [
{'sell_in': -1, 'quality': 18},
{'sell_in': -1, 'quality': 4},
]
for index, expectation in enumerate(expected):
item = self.items[index]
self.assertEqual(item.quality, expectation['quality'])
self.assertEqual(item.sell_in, expectation['sell_in'])
def test_backstage_passes_and_brie_go_to_quality_zero_after_sell_by(self):
self.items.append(Item("Aged Brie", 0, 20))
self.items.append(Item("Backstage passes to a TAFKAL80ETC concert", 0, 20))
self.gilded_rose.update_quality()
expected = [
{'sell_in': -1, 'quality': 22},
{'sell_in': -1, 'quality': 0},
]
for index, expectation in enumerate(expected):
item = self.items[index]
self.assertEqual(item.quality, expectation['quality'])
self.assertEqual(item.sell_in, expectation['sell_in'])
def test_sulfuras_the_immutable(self):
self.items.append(Item("Sulfuras, Hand of Ragnaros", 0, 80))
self.gilded_rose.update_quality()
expected = {'sell_in': 0, 'quality': 80}
item = self.items[0]
self.assertEqual(item.quality, expected['quality'])
self.assertEqual(item.sell_in, expected['sell_in'])
def test_quality_does_not_increase_past_50(self):
self.items.append(Item("Aged Brie", 4, 49))
self.gilded_rose.update_quality()
expected = {'sell_in': 3, 'quality': 50}
item = self.items[0]
self.assertEqual(item.quality, expected['quality'])
self.assertEqual(item.sell_in, expected['sell_in'])
@skip
def test_conjured_items_decrease_in_quality_twice_as_fast(self):
self.items.append(Item("Conjured Mana Cake", 3, 6))
self.gilded_rose.update_quality()
expected = {'sell_in': 2, 'quality': 4}
item = self.items[0]
self.assertEqual(item.quality, expected['quality'])
self.assertEqual(item.sell_in, expected['sell_in'])
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment