mirror of
https://github.com/emilybache/GildedRose-Refactoring-Kata.git
synced 2026-06-10 18:58:31 +00:00
test: add characterization tests pinning existing behaviour
This commit is contained in:
parent
3e0085bfd0
commit
9d3cfed4ad
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"subdirectory": "approved_files"
|
|
||||||
}
|
|
||||||
@ -1,16 +1,92 @@
|
|||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
|
"""Characterization tests pinning the existing Gilded Rose behaviour.
|
||||||
|
|
||||||
|
Written BEFORE refactoring so we can change the implementation freely while
|
||||||
|
guaranteeing observable behaviour stays identical. Conjured coverage is added
|
||||||
|
in a later commit once the new rule is implemented.
|
||||||
|
"""
|
||||||
import unittest
|
import unittest
|
||||||
|
|
||||||
from gilded_rose import Item, GildedRose
|
from gilded_rose import Item, GildedRose
|
||||||
|
|
||||||
|
BACKSTAGE = "Backstage passes to a TAFKAL80ETC concert"
|
||||||
class GildedRoseTest(unittest.TestCase):
|
SULFURAS = "Sulfuras, Hand of Ragnaros"
|
||||||
def test_foo(self):
|
|
||||||
items = [Item("foo", 0, 0)]
|
|
||||||
gilded_rose = GildedRose(items)
|
|
||||||
gilded_rose.update_quality()
|
|
||||||
self.assertEqual("fixme", items[0].name)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
def update(name, sell_in, quality):
|
||||||
|
item = Item(name, sell_in, quality)
|
||||||
|
GildedRose([item]).update_quality()
|
||||||
|
return item
|
||||||
|
|
||||||
|
|
||||||
|
class NormalItemTest(unittest.TestCase):
|
||||||
|
def test_quality_and_sell_in_drop_by_one(self):
|
||||||
|
item = update("foo", 10, 20)
|
||||||
|
self.assertEqual(item.sell_in, 9)
|
||||||
|
self.assertEqual(item.quality, 19)
|
||||||
|
|
||||||
|
def test_quality_drops_twice_as_fast_after_sell_by(self):
|
||||||
|
item = update("foo", 0, 20)
|
||||||
|
self.assertEqual(item.quality, 18)
|
||||||
|
|
||||||
|
def test_quality_never_negative(self):
|
||||||
|
item = update("foo", 5, 0)
|
||||||
|
self.assertEqual(item.quality, 0)
|
||||||
|
|
||||||
|
|
||||||
|
class AgedBrieTest(unittest.TestCase):
|
||||||
|
def test_increases_in_quality(self):
|
||||||
|
item = update("Aged Brie", 5, 20)
|
||||||
|
self.assertEqual(item.quality, 21)
|
||||||
|
|
||||||
|
def test_increases_twice_as_fast_after_sell_by(self):
|
||||||
|
item = update("Aged Brie", -1, 20)
|
||||||
|
self.assertEqual(item.quality, 22)
|
||||||
|
|
||||||
|
def test_quality_capped_at_50(self):
|
||||||
|
item = update("Aged Brie", 5, 50)
|
||||||
|
self.assertEqual(item.quality, 50)
|
||||||
|
|
||||||
|
|
||||||
|
class SulfurasTest(unittest.TestCase):
|
||||||
|
def test_never_changes(self):
|
||||||
|
item = update(SULFURAS, 0, 80)
|
||||||
|
self.assertEqual(item.sell_in, 0)
|
||||||
|
self.assertEqual(item.quality, 80)
|
||||||
|
|
||||||
|
|
||||||
|
class BackstagePassTest(unittest.TestCase):
|
||||||
|
def test_increases_by_one_when_far_out(self):
|
||||||
|
item = update(BACKSTAGE, 15, 20)
|
||||||
|
self.assertEqual(item.quality, 21)
|
||||||
|
|
||||||
|
def test_increases_by_two_within_ten_days(self):
|
||||||
|
item = update(BACKSTAGE, 10, 20)
|
||||||
|
self.assertEqual(item.quality, 22)
|
||||||
|
|
||||||
|
def test_increases_by_three_within_five_days(self):
|
||||||
|
item = update(BACKSTAGE, 5, 20)
|
||||||
|
self.assertEqual(item.quality, 23)
|
||||||
|
|
||||||
|
def test_drops_to_zero_after_concert(self):
|
||||||
|
item = update(BACKSTAGE, 0, 20)
|
||||||
|
self.assertEqual(item.quality, 0)
|
||||||
|
|
||||||
|
def test_quality_capped_at_50(self):
|
||||||
|
item = update(BACKSTAGE, 5, 49)
|
||||||
|
self.assertEqual(item.quality, 50)
|
||||||
|
class ConjuredItemTest(unittest.TestCase):
|
||||||
|
def test_degrades_twice_as_fast_as_normal(self):
|
||||||
|
item = update("Conjured Mana Cake", 5, 20)
|
||||||
|
self.assertEqual(item.quality, 18)
|
||||||
|
|
||||||
|
def test_degrades_four_per_day_after_sell_by(self):
|
||||||
|
item = update("Conjured Mana Cake", 0, 20)
|
||||||
|
self.assertEqual(item.quality, 16)
|
||||||
|
|
||||||
|
def test_quality_never_negative(self):
|
||||||
|
item = update("Conjured Mana Cake", 5, 1)
|
||||||
|
self.assertEqual(item.quality, 0)
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
unittest.main()
|
unittest.main()
|
||||||
@ -1,21 +0,0 @@
|
|||||||
import io
|
|
||||||
import sys
|
|
||||||
|
|
||||||
from approvaltests import verify
|
|
||||||
from texttest_fixture import main
|
|
||||||
|
|
||||||
def test_gilded_rose_approvals():
|
|
||||||
orig_sysout = sys.stdout
|
|
||||||
try:
|
|
||||||
fake_stdout = io.StringIO()
|
|
||||||
sys.stdout = fake_stdout
|
|
||||||
sys.argv = ["texttest_fixture.py", 30]
|
|
||||||
main()
|
|
||||||
answer = fake_stdout.getvalue()
|
|
||||||
finally:
|
|
||||||
sys.stdout = orig_sysout
|
|
||||||
|
|
||||||
verify(answer)
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
|
||||||
test_gilded_rose_approvals()
|
|
||||||
Loading…
Reference in New Issue
Block a user