diff --git a/python/tests/test_gilded_rose.py b/python/tests/test_gilded_rose.py index 1c92f638..aa907187 100644 --- a/python/tests/test_gilded_rose.py +++ b/python/tests/test_gilded_rose.py @@ -1,16 +1,117 @@ -# -*- coding: utf-8 -*- -import unittest - -from gilded_rose import Item, GildedRose +from python.gilded_rose import ( + GildedRose, + Item, + NormalItem, + AgedBrieItem, + SulfurasItem, + BackstagePassItem, + ConjuredItem, +) +import pytest -class GildedRoseTest(unittest.TestCase): - def test_foo(self): - items = [Item("foo", 0, 0)] - gilded_rose = GildedRose(items) - gilded_rose.update_quality() - self.assertEqual("fixme", items[0].name) +# --- 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 - -if __name__ == '__main__': - unittest.main() + +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