From 253c445e31de2c1d32bcaa9b05e6a8c9099de088 Mon Sep 17 00:00:00 2001 From: Raj Vora Date: Tue, 5 May 2026 13:32:30 -0700 Subject: [PATCH] feat: add SulfurasStrategy --- python/gilded_rose.py | 12 ++++++++++++ python/tests/test_gilded_rose.py | 25 ++++++++++++++++++++++++- 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/python/gilded_rose.py b/python/gilded_rose.py index 0e7cc1c9..7b8299c1 100755 --- a/python/gilded_rose.py +++ b/python/gilded_rose.py @@ -71,6 +71,18 @@ class BackstagePassStrategy: item.sell_in -= 1 +class SulfurasStrategy: + """ + No-op strategy for Sulfuras, Hand of Ragnaros. + + Legendary items never degrade and never need to be sold. + Neither quality nor sell_in is ever mutated. + """ + + def update(self, item: "Item", days: int) -> None: + pass # legendary items are immutable; parameters required by Protocol + + class GildedRose(object): def __init__(self, items): diff --git a/python/tests/test_gilded_rose.py b/python/tests/test_gilded_rose.py index de8ecb38..734b73a4 100644 --- a/python/tests/test_gilded_rose.py +++ b/python/tests/test_gilded_rose.py @@ -9,7 +9,7 @@ if str(_EXERCISE_ROOT) not in sys.path: from gilded_rose import ( Item, GildedRose, NormalStrategy, AgedBrieStrategy, - BackstagePassStrategy, + BackstagePassStrategy, SulfurasStrategy, ) @@ -146,5 +146,28 @@ class TestBackstagePassStrategy(unittest.TestCase): self.assertEqual(8, item.sell_in) +class TestSulfurasStrategy(unittest.TestCase): + """Tests for SulfurasStrategy — legendary item, never changes.""" + + def setUp(self): + self.strategy = SulfurasStrategy() + + def test_quality_never_changes(self): + item = Item("Sulfuras, Hand of Ragnaros", sell_in=0, quality=80) + self.strategy.update(item, days=1) + self.assertEqual(80, item.quality) + + def test_sell_in_never_changes(self): + item = Item("Sulfuras, Hand of Ragnaros", sell_in=0, quality=80) + self.strategy.update(item, days=1) + self.assertEqual(0, item.sell_in) + + def test_unchanged_after_many_days(self): + item = Item("Sulfuras, Hand of Ragnaros", sell_in=0, quality=80) + self.strategy.update(item, days=100) + self.assertEqual(80, item.quality) + self.assertEqual(0, item.sell_in) + + if __name__ == '__main__': unittest.main()