GildedRose-Refactoring-Kata/python/tests/test_gilded_rose.py
2025-06-28 15:24:18 +05:30

118 lines
3.1 KiB
Python

from python.gilded_rose import (
GildedRose,
Item,
NormalItem,
AgedBrieItem,
SulfurasItem,
BackstagePassItem,
ConjuredItem,
)
import pytest
# --- Tests for NormalItem ---
def test_normal_item_quality_decreases_by_1():
item = NormalItem("Westin", 10, 20)
item.update_quality()
assert item.quality == 19
assert item.sell_in == 9
def test_normal_item_quality_decreases_by_2_after_sell_in():
item = NormalItem("Westin", 0, 20)
item.update_quality()
assert item.quality == 18
assert item.sell_in == -1
def test_normal_item_quality_never_negative():
item = NormalItem("Westin", 10, 0)
item.update_quality()
assert item.quality == 0
assert item.sell_in == 9
def test_aged_brie_quality_increases():
item = AgedBrieItem("Aged Brie", 10, 20)
item.update_quality()
assert item.quality == 21
assert item.sell_in == 9
def test_aged_brie_quality_increases_twice_after_sell_in():
item = AgedBrieItem("Aged Brie", 0, 20)
item.update_quality()
assert item.quality == 22
assert item.sell_in == -1
def test_aged_brie_quality_never_exceeds_50():
item = AgedBrieItem("Aged Brie", 10, 49)
item.update_quality()
assert item.quality == 50
item.update_quality() # One more day
assert item.quality == 50
def test_sulfuras_quality_and_sell_in_never_change():
item = SulfurasItem("Sulfuras, Hand of Ragnaros", 0, 80)
item.update_quality()
assert item.quality == 80
assert item.sell_in == 0
def test_backstage_pass_quality_increases_by_1_normally():
item = BackstagePassItem("Backstage passes", 15, 20)
item.update_quality()
assert item.quality == 21
assert item.sell_in == 14
def test_backstage_pass_quality_increases_by_2_at_10_days_or_less():
item = BackstagePassItem("Backstage passes", 10, 20)
item.update_quality()
assert item.quality == 22
assert item.sell_in == 9
def test_backstage_pass_quality_increases_by_3_at_5_days_or_less():
item = BackstagePassItem("Backstage passes", 5, 20)
item.update_quality()
assert item.quality == 23
assert item.sell_in == 4
def test_backstage_pass_quality_drops_to_0_after_concert():
item = BackstagePassItem("Backstage passes", 0, 20)
item.update_quality()
assert item.quality == 0
assert item.sell_in == -1
def test_backstage_pass_quality_never_exceeds_50():
item = BackstagePassItem("Backstage passes", 10, 49)
item.update_quality()
assert item.quality == 50
# Test cases for Conjured Items
def test_conjured_item_quality_decreases_by_2_normally():
item = ConjuredItem("Conjured Mana Cake", 10, 20)
item.update_quality()
assert item.quality == 18
assert item.sell_in == 9
def test_conjured_item_quality_decreases_by_4_after_sell_in():
item = ConjuredItem("Conjured Mana Cake", 0, 20)
item.update_quality()
assert item.quality == 16
assert item.sell_in == -1
def test_conjured_item_quality_never_negative():
item = ConjuredItem("Conjured Mana Cake", 10, 1)
item.update_quality()
assert item.quality == 0
assert item.sell_in == 9