mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-05-14 22:08:24 +00:00
feat: add AgedBrieStrategy
This commit is contained in:
parent
adb8f09ee9
commit
c6b779446e
@ -27,6 +27,22 @@ class NormalStrategy:
|
||||
item.quality = max(0, item.quality - 1)
|
||||
|
||||
|
||||
class AgedBrieStrategy:
|
||||
"""
|
||||
Quality improvement strategy for Aged Brie.
|
||||
|
||||
Quality increases by 1 per day; by 2 per day once the sell date
|
||||
has passed. Quality never exceeds 50.
|
||||
"""
|
||||
|
||||
def update(self, item: "Item", days: int) -> None:
|
||||
for _ in range(days):
|
||||
item.quality = min(50, item.quality + 1)
|
||||
item.sell_in -= 1
|
||||
if item.sell_in < 0:
|
||||
item.quality = min(50, item.quality + 1)
|
||||
|
||||
|
||||
class GildedRose(object):
|
||||
|
||||
def __init__(self, items):
|
||||
|
||||
@ -7,7 +7,7 @@ _EXERCISE_ROOT = Path(__file__).resolve().parent.parent
|
||||
if str(_EXERCISE_ROOT) not in sys.path:
|
||||
sys.path.insert(0, str(_EXERCISE_ROOT))
|
||||
|
||||
from gilded_rose import Item, GildedRose, NormalStrategy
|
||||
from gilded_rose import Item, GildedRose, NormalStrategy, AgedBrieStrategy
|
||||
|
||||
|
||||
class GildedRoseTest(unittest.TestCase):
|
||||
@ -59,5 +59,38 @@ class TestNormalStrategy(unittest.TestCase):
|
||||
self.assertEqual(0, item.quality)
|
||||
|
||||
|
||||
class TestAgedBrieStrategy(unittest.TestCase):
|
||||
"""Tests for AgedBrieStrategy — quality improves with age."""
|
||||
|
||||
def setUp(self):
|
||||
self.strategy = AgedBrieStrategy()
|
||||
|
||||
def test_quality_increments_by_one_each_day(self):
|
||||
item = Item("Aged Brie", sell_in=10, quality=20)
|
||||
self.strategy.update(item, days=1)
|
||||
self.assertEqual(21, item.quality)
|
||||
self.assertEqual(9, item.sell_in)
|
||||
|
||||
def test_quality_caps_at_50(self):
|
||||
item = Item("Aged Brie", sell_in=10, quality=50)
|
||||
self.strategy.update(item, days=1)
|
||||
self.assertEqual(50, item.quality)
|
||||
|
||||
def test_quality_increments_twice_after_sell_date(self):
|
||||
# Past sell date: +2 per day
|
||||
item = Item("Aged Brie", sell_in=0, quality=20)
|
||||
self.strategy.update(item, days=1)
|
||||
self.assertEqual(22, item.quality)
|
||||
self.assertEqual(-1, item.sell_in)
|
||||
|
||||
def test_multi_day_crosses_sell_date(self):
|
||||
# sell_in=1, quality=46, days=3
|
||||
# Day1: q=47 si=0 | Day2: q=49 si=-1 | Day3: q=50 (capped) si=-2
|
||||
item = Item("Aged Brie", sell_in=1, quality=46)
|
||||
self.strategy.update(item, days=3)
|
||||
self.assertEqual(50, item.quality)
|
||||
self.assertEqual(-2, item.sell_in)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
unittest.main()
|
||||
|
||||
Loading…
Reference in New Issue
Block a user