From 5e55f9daa5fec4510461841177bbbd5988eecc16 Mon Sep 17 00:00:00 2001 From: Alexandru Dorobantu Date: Sat, 8 Nov 2025 12:39:12 +0200 Subject: [PATCH 1/2] added unit tests --- tests/test_gilded_rose.py | 68 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 67 insertions(+), 1 deletion(-) diff --git a/tests/test_gilded_rose.py b/tests/test_gilded_rose.py index 1c92f63..2b616b4 100644 --- a/tests/test_gilded_rose.py +++ b/tests/test_gilded_rose.py @@ -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() From 8dd20d2bfa49a1b53f3ccd2e7b083c59a1824189 Mon Sep 17 00:00:00 2001 From: Alexandru Dorobantu Date: Sat, 8 Nov 2025 12:39:56 +0200 Subject: [PATCH 2/2] fixed gilded rose --- .gitignore | 9 ++---- gilded_rose.py | 86 ++++++++++++++++++++++++++++++++++---------------- 2 files changed, 60 insertions(+), 35 deletions(-) diff --git a/.gitignore b/.gitignore index 0ef56d5..9d984fb 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,2 @@ -*.pyc -.cache -.coverage -.idea/ -*.iml -.pytest_cache -.approval_tests_temp \ No newline at end of file +# Created by venv; see https://docs.python.org/3/library/venv.html +venv/ diff --git a/gilded_rose.py b/gilded_rose.py index 4f21ea6..04f9f14 100644 --- a/gilded_rose.py +++ b/gilded_rose.py @@ -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):