Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
9 changes: 2 additions & 7 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,7 +1,2 @@
*.pyc
.cache
.coverage
.idea/
*.iml
.pytest_cache
.approval_tests_temp
# Created by venv; see https://docs.python.org/3/library/venv.html
venv/
86 changes: 58 additions & 28 deletions gilded_rose.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,37 +4,67 @@ class GildedRose(object):

def __init__(self, items):
self.items = items
for it in self.items:
self.clip(it)

def update_quality(self):
for item in self.items:
if item.name != "Aged Brie" and item.name != "Backstage passes to a TAFKAL80ETC concert":
if item.quality > 0:
if item.name != "Sulfuras, Hand of Ragnaros":
item.quality = item.quality - 1
def clip(self, it):
if it.name == "Sulfuras, Hand of Ragnaros":
return

if it.quality < 0:
it.quality = 0
elif it.quality > 50:
it.quality = 50

def handle_special_item(self, item) -> bool:
item.sell_in -= 1

# handle aged brie
if item.name == "Aged Brie":
item.quality += 1
return True
# handle passes
elif "Backstage passes" in item.name:
# apply rules for backstage passes quality
if item.sell_in <= 0:
item.quality = 0
elif item.sell_in <= 5:
item.quality += 3
elif item.sell_in <= 10:
item.quality += 2
else:
item.quality += 1

return True
# handle sulfuras
elif item.name == "Sulfuras, Hand of Ragnaros":
item.sell_in += 1
return True
else:
return False

def handle_regular_item(self, item) -> None:
item.sell_in -= 1
expired_multiplier = 1

if item.sell_in < 0:
expired_multiplier = 2

if "Conjured" in item.name:
item.quality -= 2 * expired_multiplier
else:
item.quality -= 1 * expired_multiplier

def update_quality(self) -> None:
for it in self.items:
is_special = self.handle_special_item(it)

if is_special:
pass
else:
if item.quality < 50:
item.quality = item.quality + 1
if item.name == "Backstage passes to a TAFKAL80ETC concert":
if item.sell_in < 11:
if item.quality < 50:
item.quality = item.quality + 1
if item.sell_in < 6:
if item.quality < 50:
item.quality = item.quality + 1
if item.name != "Sulfuras, Hand of Ragnaros":
item.sell_in = item.sell_in - 1
if item.sell_in < 0:
if item.name != "Aged Brie":
if item.name != "Backstage passes to a TAFKAL80ETC concert":
if item.quality > 0:
if item.name != "Sulfuras, Hand of Ragnaros":
item.quality = item.quality - 1
else:
item.quality = item.quality - item.quality
else:
if item.quality < 50:
item.quality = item.quality + 1
self.handle_regular_item(it)

self.clip(it)

class Item:
def __init__(self, name, sell_in, quality):
Expand Down
68 changes: 67 additions & 1 deletion tests/test_gilded_rose.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,78 @@


class GildedRoseTest(unittest.TestCase):
def setUp(self):
self.regular_items = [
Item("CPU Components", 3, 12),
Item("Mega Trash", -2, -10),
Item("Trash", 1, -10),
Item("\"As I\'ve Written\"", 30, 100),
Item("Cheese of Truth", 10, 20),
Item("Rotten Apples", -10, -50)
]
self.conjured_items = [
Item("Conjured Burger", 13, 13),
Item("Conjured +3 Fire DMG Ring", 40, 60),
Item("Conjured Cursed Tome", 100, 30)
]
self.backstage_pass_items = [
Item("Backstage passes to Gandalf concert", 9, 30),
Item("Backstage passes to Haggard concert", 15, 10),
Item("Backstage passes to Conjured Guitarists concert", 5, 0),
Item("Backstage passes to HelloWorld concert", 0, 33)
]
self.aged_brie_items = [
Item("Aged Brie", 5, 12),
Item("Aged Brie", -10, -100)
]

self.sulfuras_items = [
Item("Sulfuras, Hand of Ragnaros", 100, 60),
Item("Sulfuras, Hand of Ragnaros", 999, 60)
]


def test_foo(self):
items = [Item("foo", 0, 0)]
gilded_rose = GildedRose(items)
gilded_rose.update_quality()
self.assertEqual("fixme", items[0].name)
self.assertEqual("foo", items[0].name)

# this checks if all items degrade according to the list [11, 0, 0, 49, 19, 0]
def test_regular_items(self):
gilded_rose = GildedRose(self.regular_items)
values_list = [11, 0, 0, 49, 19, 0]

gilded_rose.update_quality()
self.assertListEqual(values_list, [ it.quality for it in self.regular_items ])

def test_brie(self):
gilded_rose = GildedRose(self.aged_brie_items)
values_list = [13, 1]

gilded_rose.update_quality()
self.assertListEqual(values_list, [ it.quality for it in self.aged_brie_items ])

def test_conjured_items(self):
gilded_rose = GildedRose(self.conjured_items)
values_list = [11, 48, 28]

gilded_rose.update_quality()
self.assertListEqual(values_list, [ it.quality for it in self.conjured_items ])

def test_backstage_passes(self):
gilded_rose = GildedRose(self.backstage_pass_items)
values_list = [32, 11, 3, 0]

gilded_rose.update_quality()
self.assertListEqual(values_list, [ it.quality for it in self.backstage_pass_items ])

def test_sulfuras(self):
gilded_rose = GildedRose(self.sulfuras_items)
values_list = [60, 60]

gilded_rose.update_quality()
self.assertListEqual(values_list, [ it.quality for it in self.sulfuras_items ])

if __name__ == '__main__':
unittest.main()