diff --git a/python/tests/approvaltests_config.json b/python/tests/approvaltests_config.json deleted file mode 100644 index 550e6643..00000000 --- a/python/tests/approvaltests_config.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "subdirectory": "approved_files" -} diff --git a/python/tests/approved_files/test_gilded_rose_approvals.test_gilded_rose_approvals.approved.txt b/python/tests/approved_files/test_gilded_rose_approvals.test_gilded_rose_approvals.approved.txt deleted file mode 100644 index e69de29b..00000000 diff --git a/python/tests/test_gilded_rose.py b/python/tests/test_gilded_rose.py index 1c92f638..7075fe44 100644 --- a/python/tests/test_gilded_rose.py +++ b/python/tests/test_gilded_rose.py @@ -1,16 +1,92 @@ # -*- 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 from gilded_rose import Item, GildedRose +BACKSTAGE = "Backstage passes to a TAFKAL80ETC concert" +SULFURAS = "Sulfuras, Hand of Ragnaros" -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) - -if __name__ == '__main__': - unittest.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() \ No newline at end of file diff --git a/python/tests/test_gilded_rose_approvals.py b/python/tests/test_gilded_rose_approvals.py deleted file mode 100644 index 6c8f9db9..00000000 --- a/python/tests/test_gilded_rose_approvals.py +++ /dev/null @@ -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() \ No newline at end of file